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

  tmp = list;
  goto <D.17782>;
  <D.17781>:
  info = tmp->data;
  D.19587 = info->info.message;
  monoeg_g_free (D.19587);
  monoeg_g_free (info);
  tmp = tmp->next;
  <D.17782>:
  if (tmp != 0B) goto <D.17781>; else goto <D.17783>;
  <D.17783>:
  monoeg_g_slist_free (list);
}


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

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


mono_delegate_signature_equal (struct MonoMethodSignature * delegate_sig, struct MonoMethodSignature * method_sig, gboolean is_static_ldftn)
{
  _Bool D.19590;
  short unsigned int D.19591;
  int D.19592;
  int D.19593;
  short unsigned int D.19594;
  int D.19595;
  gboolean D.19598;
  unsigned int D.19599;
  unsigned int D.19600;
  unsigned int D.19601;
  unsigned int D.19602;
  int D.19605;
  int D.19606;
  struct MonoType * D.19609;
  struct MonoType * D.19610;
  int D.19611;
  int i;
  int method_offset;

  D.19590 = is_static_ldftn != 0;
  method_offset = (int) D.19590;
  D.19591 = delegate_sig->param_count;
  D.19592 = (int) D.19591;
  D.19593 = D.19592 + method_offset;
  D.19594 = method_sig->param_count;
  D.19595 = (int) D.19594;
  if (D.19593 != D.19595) goto <D.19596>; else goto <D.19597>;
  <D.19596>:
  D.19598 = 0;
  return D.19598;
  <D.19597>:
  D.19599 = BIT_FIELD_REF <*delegate_sig, 32, 64>;
  D.19600 = BIT_FIELD_REF <*method_sig, 32, 64>;
  D.19601 = D.19599 ^ D.19600;
  D.19602 = D.19601 & 4128768;
  if (D.19602 != 0) goto <D.19603>; else goto <D.19604>;
  <D.19603>:
  D.19598 = 0;
  return D.19598;
  <D.19604>:
  i = 0;
  goto <D.18264>;
  <D.18263>:
  {
    struct MonoType * p1;
    struct MonoType * p2;

    p1 = delegate_sig->params[i];
    D.19605 = i + method_offset;
    p2 = method_sig->params[D.19605];
    D.19606 = mono_delegate_param_equal (p1, p2);
    if (D.19606 == 0) goto <D.19607>; else goto <D.19608>;
    <D.19607>:
    D.19598 = 0;
    return D.19598;
    <D.19608>:
  }
  i = i + 1;
  <D.18264>:
  D.19591 = delegate_sig->param_count;
  D.19592 = (int) D.19591;
  if (D.19592 > i) goto <D.18263>; else goto <D.18265>;
  <D.18265>:
  D.19609 = delegate_sig->ret;
  D.19610 = method_sig->ret;
  D.19611 = mono_delegate_ret_equal (D.19609, D.19610);
  if (D.19611 == 0) goto <D.19612>; else goto <D.19613>;
  <D.19612>:
  D.19598 = 0;
  return D.19598;
  <D.19613>:
  D.19598 = 1;
  return D.19598;
}


mono_delegate_param_equal (struct MonoType * delegate, struct MonoType * method)
{
  int D.19615;
  gboolean D.19618;

  D.19615 = mono_metadata_type_equal_full (delegate, method, 1);
  if (D.19615 != 0) goto <D.19616>; else goto <D.19617>;
  <D.19616>:
  D.19618 = 1;
  return D.19618;
  <D.19617>:
  D.19618 = mono_delegate_type_equal (method, delegate);
  return D.19618;
}


mono_delegate_type_equal (struct MonoType * target, struct MonoType * candidate)
{
  unsigned int D.19620;
  unsigned int D.19621;
  unsigned int D.19622;
  unsigned int D.19623;
  gboolean D.19626;
  unsigned char D.19627;
  int D.19628;
  unsigned char D.19629;
  _Bool D.19630;
  struct MonoType * D.19633;
  struct MonoType * D.19634;
  struct MonoMethodSignature * D.19637;
  struct MonoMethodSignature * D.19638;
  struct MonoClass * D.19639;
  struct MonoClass * D.19640;
  struct MonoClass * D.19643;
  struct MonoClass * D.19644;
  struct MonoClass * D.19645;
  struct MonoClass * D.19646;
  struct MonoClass * D.19649;
  struct MonoClass * D.19650;
  _Bool D.19651;
  int iftmp.0;
  struct MonoGenericParam * D.19656;
  short unsigned int D.19657;
  struct MonoGenericParam * D.19658;
  short unsigned int D.19659;
  int iftmp.1;

  D.19620 = BIT_FIELD_REF <*candidate, 32, 32>;
  D.19621 = BIT_FIELD_REF <*target, 32, 32>;
  D.19622 = D.19620 ^ D.19621;
  D.19623 = D.19622 & 1073741824;
  if (D.19623 != 0) goto <D.19624>; else goto <D.19625>;
  <D.19624>:
  D.19626 = 0;
  return D.19626;
  <D.19625>:
  D.19627 = target->type;
  D.19628 = (int) D.19627;
  switch (D.19628) <default: <D.18245>, case 1: <D.18216>, case 2: <D.18219>, case 3: <D.18222>, case 4: <D.18217>, case 5: <D.18218>, case 6: <D.18220>, case 7: <D.18221>, case 8: <D.18223>, case 9: <D.18224>, case 10: <D.18225>, case 11: <D.18226>, case 12: <D.18227>, case 13: <D.18228>, case 14: <D.18231>, case 15: <D.18233>, case 17: <D.18242>, case 18: <D.18239>, case 19: <D.18243>, case 20: <D.18241>, case 21: <D.18235>, case 22: <D.18232>, case 24: <D.18229>, case 25: <D.18230>, case 27: <D.18234>, case 28: <D.18238>, case 29: <D.18240>, case 30: <D.18244>>
  <D.18216>:
  <D.18217>:
  <D.18218>:
  <D.18219>:
  <D.18220>:
  <D.18221>:
  <D.18222>:
  <D.18223>:
  <D.18224>:
  <D.18225>:
  <D.18226>:
  <D.18227>:
  <D.18228>:
  <D.18229>:
  <D.18230>:
  <D.18231>:
  <D.18232>:
  D.19629 = candidate->type;
  D.19627 = target->type;
  D.19630 = D.19629 == D.19627;
  D.19626 = (gboolean) D.19630;
  return D.19626;
  <D.18233>:
  D.19629 = candidate->type;
  if (D.19629 != 15) goto <D.19631>; else goto <D.19632>;
  <D.19631>:
  D.19626 = 0;
  return D.19626;
  <D.19632>:
  D.19633 = target->data.type;
  D.19634 = candidate->data.type;
  D.19626 = mono_delegate_type_equal (D.19633, D.19634);
  return D.19626;
  <D.18234>:
  D.19629 = candidate->type;
  if (D.19629 != 27) goto <D.19635>; else goto <D.19636>;
  <D.19635>:
  D.19626 = 0;
  return D.19626;
  <D.19636>:
  D.19637 = mono_type_get_signature (target);
  D.19638 = mono_type_get_signature (candidate);
  D.19626 = mono_delegate_signature_equal (D.19637, D.19638, 0);
  return D.19626;
  <D.18235>:
  {
    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.19626 = verifier_class_is_assignable_from (target_klass, candidate_klass);
    return D.19626;
  }
  <D.18238>:
  D.19626 = mono_type_is_reference (candidate);
  return D.19626;
  <D.18239>:
  D.19639 = target->data.klass;
  D.19640 = mono_class_from_mono_type (candidate);
  D.19626 = verifier_class_is_assignable_from (D.19639, D.19640);
  return D.19626;
  <D.18240>:
  D.19629 = candidate->type;
  if (D.19629 != 29) goto <D.19641>; else goto <D.19642>;
  <D.19641>:
  D.19626 = 0;
  return D.19626;
  <D.19642>:
  D.19643 = mono_class_from_mono_type (target);
  D.19644 = D.19643->element_class;
  D.19645 = mono_class_from_mono_type (candidate);
  D.19646 = D.19645->element_class;
  D.19626 = verifier_class_is_assignable_from (D.19644, D.19646);
  return D.19626;
  <D.18241>:
  D.19629 = candidate->type;
  if (D.19629 != 20) goto <D.19647>; else goto <D.19648>;
  <D.19647>:
  D.19626 = 0;
  return D.19626;
  <D.19648>:
  D.19626 = is_array_type_compatible (target, candidate);
  return D.19626;
  <D.18242>:
  D.19649 = mono_class_from_mono_type (candidate);
  D.19650 = mono_class_from_mono_type (target);
  D.19651 = D.19649 == D.19650;
  D.19626 = (gboolean) D.19651;
  return D.19626;
  <D.18243>:
  D.19629 = candidate->type;
  if (D.19629 == 19) goto <D.19655>; else goto <D.19653>;
  <D.19655>:
  D.19656 = target->data.generic_param;
  D.19657 = D.19656->num;
  D.19658 = candidate->data.generic_param;
  D.19659 = D.19658->num;
  if (D.19657 == D.19659) goto <D.19660>; else goto <D.19653>;
  <D.19660>:
  iftmp.0 = 1;
  goto <D.19654>;
  <D.19653>:
  iftmp.0 = 0;
  <D.19654>:
  D.19626 = iftmp.0;
  return D.19626;
  D.19626 = 0;
  return D.19626;
  <D.18244>:
  D.19629 = candidate->type;
  if (D.19629 == 30) goto <D.19664>; else goto <D.19662>;
  <D.19664>:
  D.19656 = target->data.generic_param;
  D.19657 = D.19656->num;
  D.19658 = candidate->data.generic_param;
  D.19659 = D.19658->num;
  if (D.19657 == D.19659) goto <D.19665>; else goto <D.19662>;
  <D.19665>:
  iftmp.1 = 1;
  goto <D.19663>;
  <D.19662>:
  iftmp.1 = 0;
  <D.19663>:
  D.19626 = iftmp.1;
  return D.19626;
  D.19626 = 0;
  return D.19626;
  <D.18245>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "verify.c", 2594);
  D.19626 = 0;
  return D.19626;
}


verifier_class_is_assignable_from (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.19669;
  int D.19670;
  unsigned int D.19676;
  unsigned int D.19677;
  unsigned char D.19679;
  unsigned int D.19683;
  unsigned int D.19684;
  unsigned char D.19686;
  int D.19688;
  unsigned char D.19691;
  struct MonoClass * D.19694;
  struct MonoClass * D.19695;
  int D.19696;
  struct MonoClass * D.19699;
  int D.19700;
  struct MonoClass * D.19703;
  int D.19704;
  struct MonoClass * D.19707;
  int D.19708;
  struct MonoClass * D.19711;
  int D.19712;
  int D.19716;
  struct MonoClass * * D.19719;
  unsigned int i.2;
  unsigned int D.19721;
  struct MonoClass * * D.19722;
  int D.19723;
  short unsigned int D.19726;
  int D.19727;
  struct MonoClass * * D.19728;
  struct MonoClass * * D.19729;
  int D.19730;
  short unsigned int D.19733;
  int D.19734;
  struct MonoClass * D.19736;
  unsigned int D.19737;
  unsigned int D.19738;
  int D.19741;
  int D.19744;
  struct MonoGenericClass * D.19752;
  struct MonoClass * D.19756;
  struct MonoClass * D.19759;
  struct MonoGenericInst * D.19762;
  struct MonoType * D.19763;
  struct MonoClass * iface_gtd;

  if (target == candidate) goto <D.19667>; else goto <D.19668>;
  <D.19667>:
  D.19669 = 1;
  return D.19669;
  <D.19668>:
  D.19670 = mono_class_has_variant_generic_params (target);
  if (D.19670 != 0) goto <D.19671>; else goto <D.19672>;
  <D.19671>:
  D.19676 = target->flags;
  D.19677 = D.19676 & 32;
  if (D.19677 != 0) goto <D.19673>; else goto <D.19678>;
  <D.19678>:
  D.19679 = target->byval_arg.type;
  if (D.19679 == 19) goto <D.19673>; else goto <D.19680>;
  <D.19680>:
  D.19679 = target->byval_arg.type;
  if (D.19679 == 30) goto <D.19673>; else goto <D.19674>;
  <D.19673>:
  D.19683 = candidate->flags;
  D.19684 = D.19683 & 32;
  if (D.19684 != 0) goto <D.19681>; else goto <D.19685>;
  <D.19685>:
  D.19686 = candidate->byval_arg.type;
  if (D.19686 == 19) goto <D.19681>; else goto <D.19687>;
  <D.19687>:
  D.19686 = candidate->byval_arg.type;
  if (D.19686 == 30) goto <D.19681>; else goto <D.19682>;
  <D.19681>:
  D.19688 = mono_class_is_variant_compatible (target, candidate, 1);
  if (D.19688 != 0) goto <D.19689>; else goto <D.19690>;
  <D.19689>:
  D.19669 = 1;
  return D.19669;
  <D.19690>:
  <D.19682>:
  D.19691 = candidate->rank;
  if (D.19691 == 1) goto <D.19692>; else goto <D.19693>;
  <D.19692>:
  D.19694 = mono_defaults.generic_ilist_class;
  D.19695 = candidate->element_class;
  D.19696 = verifier_inflate_and_check_compat (target, D.19694, D.19695);
  if (D.19696 != 0) goto <D.19697>; else goto <D.19698>;
  <D.19697>:
  D.19669 = 1;
  return D.19669;
  <D.19698>:
  D.19699 = get_icollection_class ();
  D.19695 = candidate->element_class;
  D.19700 = verifier_inflate_and_check_compat (target, D.19699, D.19695);
  if (D.19700 != 0) goto <D.19701>; else goto <D.19702>;
  <D.19701>:
  D.19669 = 1;
  return D.19669;
  <D.19702>:
  D.19703 = get_ienumerable_class ();
  D.19695 = candidate->element_class;
  D.19704 = verifier_inflate_and_check_compat (target, D.19703, D.19695);
  if (D.19704 != 0) goto <D.19705>; else goto <D.19706>;
  <D.19705>:
  D.19669 = 1;
  return D.19669;
  <D.19706>:
  D.19707 = get_ireadonlylist_class ();
  D.19695 = candidate->element_class;
  D.19708 = verifier_inflate_and_check_compat (target, D.19707, D.19695);
  if (D.19708 != 0) goto <D.19709>; else goto <D.19710>;
  <D.19709>:
  D.19669 = 1;
  return D.19669;
  <D.19710>:
  D.19711 = get_ireadonlycollection_class ();
  D.19695 = candidate->element_class;
  D.19712 = verifier_inflate_and_check_compat (target, D.19711, D.19695);
  if (D.19712 != 0) goto <D.19713>; else goto <D.19714>;
  <D.19713>:
  D.19669 = 1;
  return D.19669;
  <D.19714>:
  goto <D.19715>;
  <D.19693>:
  {
    struct MonoError error;
    int i;

    try
      {
        goto <D.18112>;
        <D.18111>:
        mono_class_setup_interfaces (candidate, &error);
        D.19716 = mono_error_ok (&error);
        if (D.19716 == 0) goto <D.19717>; else goto <D.19718>;
        <D.19717>:
        mono_error_cleanup (&error);
        D.19669 = 0;
        return D.19669;
        <D.19718>:
        i = 0;
        goto <D.18105>;
        <D.18104>:
        {
          struct MonoClass * iface;

          D.19719 = candidate->interfaces_packed;
          i.2 = (unsigned int) i;
          D.19721 = i.2 * 4;
          D.19722 = D.19719 + D.19721;
          iface = *D.19722;
          D.19723 = mono_class_is_variant_compatible (target, iface, 1);
          if (D.19723 != 0) goto <D.19724>; else goto <D.19725>;
          <D.19724>:
          D.19669 = 1;
          return D.19669;
          <D.19725>:
        }
        i = i + 1;
        <D.18105>:
        D.19726 = candidate->interface_offsets_count;
        D.19727 = (int) D.19726;
        if (D.19727 > i) goto <D.18104>; else goto <D.18106>;
        <D.18106>:
        i = 0;
        goto <D.18109>;
        <D.18108>:
        {
          struct MonoClass * iface;

          D.19728 = candidate->interfaces;
          i.2 = (unsigned int) i;
          D.19721 = i.2 * 4;
          D.19729 = D.19728 + D.19721;
          iface = *D.19729;
          D.19730 = mono_class_is_variant_compatible (target, iface, 1);
          if (D.19730 != 0) goto <D.19731>; else goto <D.19732>;
          <D.19731>:
          D.19669 = 1;
          return D.19669;
          <D.19732>:
        }
        i = i + 1;
        <D.18109>:
        D.19733 = candidate->interface_count;
        D.19734 = (int) D.19733;
        if (D.19734 > i) goto <D.18108>; else goto <D.18110>;
        <D.18110>:
        candidate = candidate->parent;
        <D.18112>:
        if (candidate != 0B) goto <D.19735>; else goto <D.18113>;
        <D.19735>:
        D.19736 = mono_defaults.object_class;
        if (D.19736 != candidate) goto <D.18111>; else goto <D.18113>;
        <D.18113>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.19715>:
  goto <D.19675>;
  <D.19674>:
  D.19737 = BIT_FIELD_REF <*target, 32, 160>;
  D.19738 = D.19737 & 16777216;
  if (D.19738 != 0) goto <D.19739>; else goto <D.19740>;
  <D.19739>:
  D.19741 = mono_class_is_variant_compatible (target, candidate, 1);
  if (D.19741 != 0) goto <D.19742>; else goto <D.19743>;
  <D.19742>:
  D.19669 = 1;
  return D.19669;
  <D.19743>:
  <D.19740>:
  <D.19675>:
  D.19669 = 0;
  return D.19669;
  <D.19672>:
  D.19744 = mono_class_is_assignable_from (target, candidate);
  if (D.19744 != 0) goto <D.19745>; else goto <D.19746>;
  <D.19745>:
  D.19669 = 1;
  return D.19669;
  <D.19746>:
  D.19676 = target->flags;
  D.19677 = D.19676 & 32;
  if (D.19677 == 0) goto <D.19750>; else goto <D.19747>;
  <D.19750>:
  D.19679 = target->byval_arg.type;
  if (D.19679 != 19) goto <D.19751>; else goto <D.19747>;
  <D.19751>:
  D.19679 = target->byval_arg.type;
  if (D.19679 != 30) goto <D.19748>; else goto <D.19747>;
  <D.19747>:
  D.19752 = target->generic_class;
  if (D.19752 == 0B) goto <D.19748>; else goto <D.19753>;
  <D.19753>:
  D.19691 = candidate->rank;
  if (D.19691 != 1) goto <D.19748>; else goto <D.19749>;
  <D.19748>:
  D.19669 = 0;
  return D.19669;
  <D.19749>:
  D.19752 = target->generic_class;
  iface_gtd = D.19752->container_class;
  D.19694 = mono_defaults.generic_ilist_class;
  if (D.19694 != iface_gtd) goto <D.19754>; else goto <D.19755>;
  <D.19754>:
  D.19756 = get_icollection_class ();
  if (D.19756 != iface_gtd) goto <D.19757>; else goto <D.19758>;
  <D.19757>:
  D.19759 = get_ienumerable_class ();
  if (D.19759 != iface_gtd) goto <D.19760>; else goto <D.19761>;
  <D.19760>:
  D.19669 = 0;
  return D.19669;
  <D.19761>:
  <D.19758>:
  <D.19755>:
  D.19752 = target->generic_class;
  D.19762 = D.19752->context.class_inst;
  D.19763 = D.19762->type_argv[0];
  target = mono_class_from_mono_type (D.19763);
  candidate = candidate->element_class;
  D.19669 = 1;
  return D.19669;
}


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

  generic_ireadonlylist_class.3 = generic_ireadonlylist_class;
  if (generic_ireadonlylist_class.3 == 0B) goto <D.19768>; else goto <D.19769>;
  <D.19768>:
  D.19770 = mono_defaults.corlib;
  generic_ireadonlylist_class.4 = mono_class_from_name (D.19770, "System.Collections.Generic", "IReadOnlyList`1");
  generic_ireadonlylist_class = generic_ireadonlylist_class.4;
  <D.19769>:
  D.19772 = generic_ireadonlylist_class;
  return D.19772;
}


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

  generic_ireadonlycollection_class.5 = generic_ireadonlycollection_class;
  if (generic_ireadonlycollection_class.5 == 0B) goto <D.19775>; else goto <D.19776>;
  <D.19775>:
  D.19777 = mono_defaults.corlib;
  generic_ireadonlycollection_class.6 = mono_class_from_name (D.19777, "System.Collections.Generic", "IReadOnlyCollection`1");
  generic_ireadonlycollection_class = generic_ireadonlycollection_class.6;
  <D.19776>:
  D.19779 = generic_ireadonlycollection_class;
  return D.19779;
}


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

  tmp = inflate_class_one_arg (gtd, arg);
  if (tmp == 0B) goto <D.19781>; else goto <D.19782>;
  <D.19781>:
  D.19783 = 0;
  return D.19783;
  <D.19782>:
  D.19784 = mono_class_is_variant_compatible (target, tmp, 1);
  if (D.19784 != 0) goto <D.19785>; else goto <D.19786>;
  <D.19785>:
  D.19783 = 1;
  return D.19783;
  <D.19786>:
  D.19783 = 0;
  return D.19783;
}


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

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


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

  generic_icollection_class.7 = generic_icollection_class;
  if (generic_icollection_class.7 == 0B) goto <D.19793>; else goto <D.19794>;
  <D.19793>:
  D.19795 = mono_defaults.corlib;
  generic_icollection_class.8 = mono_class_from_name (D.19795, "System.Collections.Generic", "ICollection`1");
  generic_icollection_class = generic_icollection_class.8;
  <D.19794>:
  D.19797 = generic_icollection_class;
  return D.19797;
}


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

  generic_ienumerable_class.9 = generic_ienumerable_class;
  if (generic_ienumerable_class.9 == 0B) goto <D.19800>; else goto <D.19801>;
  <D.19800>:
  D.19802 = mono_defaults.corlib;
  generic_ienumerable_class.10 = mono_class_from_name (D.19802, "System.Collections.Generic", "IEnumerable`1");
  generic_ienumerable_class = generic_ienumerable_class.10;
  <D.19801>:
  D.19804 = generic_ienumerable_class;
  return D.19804;
}


is_array_type_compatible (struct MonoType * target, struct MonoType * candidate)
{
  unsigned char D.19806;
  _Bool D.19807;
  long int D.19808;
  long int D.19809;
  unsigned char D.19812;
  _Bool D.19813;
  long int D.19814;
  long int D.19815;
  unsigned char D.19818;
  unsigned char D.19819;
  gboolean D.19822;
  struct MonoClass * D.19823;
  struct MonoClass * D.19824;
  struct MonoArrayType * left;
  struct MonoArrayType * right;

  left = target->data.array;
  right = candidate->data.array;
  D.19806 = target->type;
  D.19807 = D.19806 != 20;
  D.19808 = (long int) D.19807;
  D.19809 = __builtin_expect (D.19808, 0);
  if (D.19809 != 0) goto <D.19810>; else goto <D.19811>;
  <D.19810>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1880, "target->type == MONO_TYPE_ARRAY");
  <D.19811>:
  D.19812 = candidate->type;
  D.19813 = D.19812 != 20;
  D.19814 = (long int) D.19813;
  D.19815 = __builtin_expect (D.19814, 0);
  if (D.19815 != 0) goto <D.19816>; else goto <D.19817>;
  <D.19816>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1881, "candidate->type == MONO_TYPE_ARRAY");
  <D.19817>:
  D.19818 = left->rank;
  D.19819 = right->rank;
  if (D.19818 != D.19819) goto <D.19820>; else goto <D.19821>;
  <D.19820>:
  D.19822 = 0;
  return D.19822;
  <D.19821>:
  D.19823 = left->eklass;
  D.19824 = right->eklass;
  D.19822 = verifier_class_is_assignable_from (D.19823, D.19824);
  return D.19822;
}


mono_delegate_ret_equal (struct MonoType * delegate, struct MonoType * method)
{
  int D.19826;
  gboolean D.19829;

  D.19826 = mono_metadata_type_equal_full (delegate, method, 1);
  if (D.19826 != 0) goto <D.19827>; else goto <D.19828>;
  <D.19827>:
  D.19829 = 1;
  return D.19829;
  <D.19828>:
  D.19829 = mono_delegate_type_equal (delegate, method);
  return D.19829;
}


mono_method_verify (struct MonoMethod * method, int level)
{
  short unsigned int D.19833;
  int D.19834;
  int D.19835;
  short unsigned int D.19837;
  int D.19838;
  int D.19839;
  struct GSList * D.19840;
  struct MonoMethodSignature * D.19841;
  struct MonoMethodSignature * D.19842;
  gchar * D.19845;
  struct GSList * D.19846;
  struct GSList * D.19847;
  unsigned int D.19848;
  unsigned int D.19849;
  struct MonoClass * D.19852;
  unsigned int D.19853;
  unsigned int D.19854;
  unsigned int D.19857;
  unsigned int D.19858;
  gchar * D.19861;
  struct GSList * D.19862;
  struct MonoMethodHeader * D.19863;
  struct MonoMethodHeader * D.19864;
  gchar * D.19867;
  struct GSList * D.19868;
  unsigned int D.19869;
  short unsigned int D.19870;
  int D.19871;
  <unnamed-unsigned:1> D.19872;
  int D.19873;
  int D.19874;
  <unnamed-unsigned:15> D.19875;
  int D.19876;
  int D.19877;
  unsigned int D.19878;
  void * D.19879;
  int D.19880;
  struct ILCodeDesc * D.19881;
  short unsigned int D.19882;
  int D.19883;
  struct MonoType *[0:] * D.19884;
  unsigned int D.19885;
  unsigned int D.19886;
  void * D.19887;
  int D.19888;
  unsigned int D.19891;
  unsigned int D.19892;
  int D.19897;
  int D.19899;
  int D.19900;
  gchar * D.19901;
  struct GSList * D.19902;
  int D.19903;
  int D.19906;
  unsigned int D.19907;
  unsigned int D.19908;
  void * D.19909;
  unsigned int D.19910;
  struct MonoType * * D.19913;
  struct MonoType * iftmp.11;
  unsigned int D.19915;
  unsigned int D.19916;
  unsigned int D.19920;
  unsigned int D.19921;
  struct MonoType * * D.19922;
  struct MonoType *[0:] * D.19923;
  unsigned int D.19924;
  unsigned int D.19925;
  unsigned int D.19926;
  struct MonoGenericContainer * D.19933;
  struct MonoGenericContainer * D.19937;
  struct MonoType * * D.19939;
  unsigned int i.12;
  unsigned int D.19941;
  struct MonoType * * D.19942;
  struct MonoType * D.19943;
  struct MonoGenericContext * D.19944;
  struct MonoType * D.19945;
  int D.19946;
  struct MonoType * iftmp.13;
  gchar * D.19953;
  struct GSList * D.19954;
  struct MonoType * * D.19955;
  struct MonoType * D.19956;
  struct MonoType * D.19957;
  int D.19958;
  struct MonoType * iftmp.14;
  gchar * D.19965;
  struct GSList * D.19966;
  int D.19967;
  int D.19969;
  gchar * D.19972;
  struct GSList * D.19973;
  int D.19974;
  int D.19976;
  gchar * D.19979;
  struct GSList * D.19980;
  struct MonoExceptionClause * D.19982;
  unsigned int D.19983;
  unsigned int D.19986;
  int D.19987;
  unsigned int D.19988;
  unsigned int D.19990;
  unsigned int D.19991;
  unsigned int D.19993;
  gchar * D.19994;
  struct GSList * D.19995;
  gchar * D.19998;
  struct GSList * D.19999;
  unsigned int D.20002;
  unsigned int D.20004;
  unsigned int D.20005;
  unsigned int D.20007;
  gchar * D.20008;
  struct GSList * D.20009;
  gchar * D.20012;
  struct GSList * D.20013;
  uint32_t iftmp.15;
  unsigned int D.20019;
  gchar * D.20024;
  struct GSList * D.20025;
  unsigned int D.20028;
  gchar * D.20031;
  struct GSList * D.20032;
  gchar * D.20035;
  struct GSList * D.20036;
  unsigned int n.16;
  unsigned int D.20038;
  struct MonoExceptionClause * D.20039;
  <unnamed-unsigned:15> D.20040;
  int D.20041;
  unsigned int D.20044;
  struct ILCodeDesc * D.20045;
  short unsigned int D.20046;
  short unsigned int D.20047;
  unsigned int D.20050;
  struct ILCodeDesc * D.20051;
  short unsigned int D.20052;
  short unsigned int D.20053;
  unsigned int D.20056;
  struct ILCodeDesc * D.20057;
  short unsigned int D.20058;
  short unsigned int D.20059;
  struct MonoClass * D.20062;
  gchar * D.20065;
  struct GSList * D.20066;
  struct MonoType * D.20067;
  int D.20068;
  unsigned int D.20070;
  struct ILCodeDesc * D.20071;
  unsigned int D.20075;
  struct ILCodeDesc * D.20076;
  struct MonoClass * D.20077;
  int D.20080;
  const char * D.20083;
  gchar * D.20084;
  struct GSList * D.20085;
  _Bool D.20086;
  long int D.20087;
  long int D.20088;
  int ip.17;
  int code_start.18;
  int D.20093;
  int D.20094;
  unsigned int D.20095;
  gchar * D.20098;
  struct GSList * D.20099;
  unsigned char D.20104;
  int D.20105;
  gchar * D.20106;
  struct GSList * D.20107;
  unsigned int op_size.19;
  unsigned int D.20111;
  unsigned int op_size.20;
  unsigned int D.20114;
  gchar * D.20115;
  struct GSList * D.20116;
  int op.21;
  int D.20120;
  const char * D.20123;
  gchar * D.20124;
  struct GSList * D.20125;
  unsigned int D.20126;
  unsigned int D.20127;
  unsigned int D.20128;
  gchar * D.20136;
  struct GSList * D.20137;
  unsigned int D.20140;
  unsigned int D.20141;
  unsigned int D.20142;
  unsigned int D.20147;
  gchar * D.20150;
  struct GSList * D.20151;
  gchar * D.20156;
  struct GSList * D.20157;
  gchar * D.20166;
  struct GSList * D.20167;
  gchar * D.20175;
  struct GSList * D.20176;
  short unsigned int D.20181;
  gchar * D.20186;
  struct GSList * D.20187;
  unsigned int D.20189;
  unsigned int D.20190;
  unsigned int D.20193;
  struct ILCodeDesc * D.20194;
  short unsigned int D.20195;
  short unsigned int D.20196;
  sizetype op_size.22;
  int D.20201;
  unsigned int D.20202;
  unsigned int D.20203;
  struct ILCodeDesc * D.20204;
  int D.20205;
  unsigned int D.20206;
  const unsigned char * D.20209;
  unsigned int ip.23;
  unsigned int D.20212;
  gchar * D.20213;
  struct GSList * D.20214;
  const unsigned char * D.20215;
  unsigned char D.20216;
  unsigned int D.20217;
  _Bool D.20218;
  int D.20219;
  unsigned int D.20220;
  int D.20221;
  int D.20223;
  unsigned int D.20224;
  int D.20225;
  unsigned int D.20226;
  gchar * D.20230;
  struct GSList * D.20231;
  unsigned int D.20232;
  gchar * D.20236;
  struct GSList * D.20237;
  int D.20238;
  struct MonoClass * D.20241;
  struct MonoType * D.20242;
  gchar * D.20246;
  struct GSList * D.20247;
  int D.20248;
  const unsigned char * D.20253;
  gchar * D.20255;
  struct GSList * D.20256;
  int D.20257;
  const unsigned char * D.20262;
  gchar * D.20264;
  struct GSList * D.20265;
  int D.20266;
  struct MonoClass * D.20269;
  struct MonoType * D.20270;
  gchar * D.20274;
  struct GSList * D.20275;
  int D.20276;
  struct MonoClass * D.20279;
  struct MonoType * D.20280;
  gchar * D.20284;
  struct GSList * D.20285;
  int D.20286;
  int D.20289;
  struct MonoClass * D.20292;
  struct MonoType * D.20293;
  gchar * D.20297;
  struct GSList * D.20298;
  signed char D.20299;
  int D.20300;
  int D.20301;
  gchar * D.20305;
  struct GSList * D.20306;
  gchar * D.20310;
  struct GSList * D.20311;
  unsigned int D.20312;
  int D.20313;
  int D.20314;
  gchar * D.20318;
  struct GSList * D.20319;
  unsigned int D.20320;
  int D.20321;
  int D.20322;
  gchar * D.20326;
  struct GSList * D.20327;
  _Bool D.20328;
  int D.20329;
  gchar * D.20330;
  struct GSList * D.20331;
  int D.20332;
  int D.20334;
  struct ILStackDesc * D.20336;
  gchar * D.20340;
  struct GSList * D.20341;
  gchar * D.20344;
  struct GSList * D.20345;
  int D.20346;
  gchar * D.20349;
  struct GSList * D.20350;
  gchar * D.20354;
  struct GSList * D.20355;
  gchar * D.20361;
  struct GSList * D.20362;
  unsigned int D.20363;
  int D.20364;
  _Bool D.20365;
  int D.20366;
  gchar * D.20370;
  struct GSList * D.20371;
  gchar * D.20375;
  struct GSList * D.20376;
  gchar * D.20382;
  struct GSList * D.20383;
  gchar * D.20387;
  struct GSList * D.20388;
  gchar * D.20392;
  struct GSList * D.20393;
  unsigned int D.20394;
  int D.20395;
  int D.20396;
  gchar * D.20400;
  struct GSList * D.20401;
  unsigned int D.20402;
  int D.20403;
  int D.20404;
  gchar * D.20408;
  struct GSList * D.20409;
  gchar * D.20412;
  struct GSList * D.20413;
  unsigned int D.20416;
  const unsigned char * D.20417;
  unsigned int D.20419;
  gchar * D.20420;
  struct GSList * D.20421;
  int entries.24;
  gchar * D.20426;
  struct GSList * D.20427;
  unsigned int D.20428;
  int D.20429;
  gchar * D.20433;
  struct GSList * D.20434;
  unsigned int D.20435;
  int D.20436;
  gchar * D.20440;
  struct GSList * D.20441;
  unsigned int D.20442;
  gchar * D.20446;
  struct GSList * D.20447;
  unsigned int D.20448;
  int D.20449;
  gchar * D.20453;
  struct GSList * D.20454;
  unsigned int D.20455;
  int D.20456;
  const char * iftmp.25;
  gchar * D.20461;
  struct GSList * D.20462;
  gchar * D.20466;
  struct GSList * D.20467;
  unsigned int D.20468;
  int D.20469;
  gchar * D.20473;
  struct GSList * D.20474;
  unsigned int D.20475;
  int D.20476;
  _Bool D.20477;
  int D.20478;
  gchar * D.20482;
  struct GSList * D.20483;
  unsigned int D.20484;
  int D.20485;
  _Bool D.20486;
  int D.20487;
  gchar * D.20491;
  struct GSList * D.20492;
  unsigned int D.20493;
  int D.20494;
  gchar * D.20498;
  struct GSList * D.20499;
  unsigned int D.20500;
  int D.20501;
  gchar * D.20505;
  struct GSList * D.20506;
  unsigned int D.20507;
  int D.20508;
  gchar * D.20512;
  struct GSList * D.20513;
  unsigned int D.20514;
  int D.20515;
  gchar * D.20519;
  struct GSList * D.20520;
  unsigned int D.20521;
  int D.20522;
  gchar * D.20526;
  struct GSList * D.20527;
  unsigned int D.20528;
  int D.20529;
  gchar * D.20533;
  struct GSList * D.20534;
  unsigned int D.20535;
  int D.20536;
  gchar * D.20540;
  struct GSList * D.20541;
  unsigned int D.20542;
  int D.20543;
  gchar * D.20547;
  struct GSList * D.20548;
  unsigned int D.20549;
  int D.20550;
  gchar * D.20554;
  struct GSList * D.20555;
  unsigned int D.20556;
  int D.20557;
  gchar * D.20561;
  struct GSList * D.20562;
  unsigned int D.20563;
  int D.20564;
  gchar * D.20568;
  struct GSList * D.20569;
  unsigned int D.20570;
  int D.20571;
  int D.20572;
  gchar * D.20575;
  struct GSList * D.20576;
  gchar * D.20580;
  struct GSList * D.20581;
  unsigned int D.20582;
  unsigned int D.20583;
  int D.20584;
  gchar * D.20588;
  struct GSList * D.20589;
  gchar * D.20593;
  struct GSList * D.20594;
  const unsigned char * D.20597;
  gchar * D.20599;
  struct GSList * D.20600;
  short unsigned int D.20601;
  unsigned int D.20602;
  unsigned int D.20603;
  gchar * D.20607;
  struct GSList * D.20608;
  short unsigned int D.20609;
  unsigned int D.20610;
  int D.20611;
  unsigned int D.20613;
  gchar * D.20616;
  struct GSList * D.20617;
  struct ILStackDesc * D.20618;
  struct MonoClass * D.20619;
  struct MonoType * D.20620;
  gchar * D.20624;
  struct GSList * D.20625;
  unsigned int D.20626;
  gchar * D.20630;
  struct GSList * D.20631;
  unsigned int D.20632;
  gchar * D.20636;
  struct GSList * D.20637;
  short unsigned int D.20638;
  unsigned int D.20639;
  _Bool D.20640;
  int D.20641;
  gchar * D.20645;
  struct GSList * D.20646;
  short unsigned int D.20647;
  unsigned int D.20648;
  _Bool D.20649;
  int D.20650;
  gchar * D.20651;
  struct GSList * D.20652;
  gchar * D.20656;
  struct GSList * D.20657;
  unsigned char D.20660;
  gchar * D.20665;
  struct GSList * D.20666;
  gchar * D.20670;
  struct GSList * D.20671;
  unsigned int D.20672;
  int D.20673;
  gchar * D.20677;
  struct GSList * D.20678;
  unsigned int D.20679;
  int D.20680;
  struct MonoType * D.20681;
  unsigned int D.20682;
  unsigned int D.20683;
  int D.20684;
  gchar * D.20689;
  struct GSList * D.20690;
  int D.20693;
  gchar * D.20698;
  struct GSList * D.20699;
  int D.20702;
  gchar * D.20705;
  struct GSList * D.20706;
  gchar * D.20710;
  struct GSList * D.20711;
  unsigned int D.20712;
  int D.20713;
  gchar * D.20714;
  struct GSList * D.20715;
  gchar * D.20716;
  struct GSList * D.20717;
  unsigned int D.20722;
  struct ILCodeDesc * D.20723;
  short unsigned int D.20724;
  short unsigned int D.20725;
  unsigned int D.20726;
  int D.20728;
  unsigned int D.20731;
  gchar * D.20734;
  struct GSList * D.20735;
  unsigned int D.20736;
  gchar * D.20739;
  struct GSList * D.20740;
  unsigned int D.20741;
  gchar * D.20744;
  struct GSList * D.20745;
  unsigned int D.20746;
  gchar * D.20749;
  struct GSList * D.20750;
  gchar * D.20759;
  struct GSList * D.20760;
  unsigned int D.20761;
  struct ILCodeDesc * D.20762;
  short unsigned int D.20763;
  int D.20764;
  int D.20765;
  int D.20768;
  gchar * D.20771;
  struct GSList * D.20772;
  int D.20773;
  gchar * D.20779;
  struct GSList * D.20780;
  int D.20783;
  int D.20786;
  gchar * D.20792;
  struct GSList * D.20793;
  int D.20796;
  gchar * D.20804;
  struct GSList * D.20805;
  unsigned int i.26;
  struct MonoMethod * D.20810;
  int D.20811;
  int D.20814;
  struct MonoClass * D.20817;
  unsigned int D.20818;
  unsigned int D.20819;
  struct MonoClass * D.20826;
  unsigned char D.20828;
  gchar * D.20833;
  struct GSList * D.20834;
  gchar * D.20840;
  struct GSList * D.20841;
  struct ILStackDesc * D.20846;
  unsigned int i.27;
  void * D.20850;
  struct GSList * D.20851;
  struct GSList * D.20852;
  struct ILStackDesc * D.20857;
  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.19833 = method->iflags;
      D.19834 = (int) D.19833;
      D.19835 = D.19834 & 4099;
      if (D.19835 != 0) goto <D.19831>; else goto <D.19836>;
      <D.19836>:
      D.19837 = method->flags;
      D.19838 = (int) D.19837;
      D.19839 = D.19838 & 9216;
      if (D.19839 != 0) goto <D.19831>; else goto <D.19832>;
      <D.19831>:
      D.19840 = 0B;
      return D.19840;
      <D.19832>:
      memset (&ctx, 0, 112);
      D.19841 = mono_method_signature (method);
      ctx.signature = D.19841;
      D.19842 = ctx.signature;
      if (D.19842 == 0B) goto <D.19843>; else goto <D.19844>;
      <D.19843>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.19845 = monoeg_g_strdup_printf ("Could not decode method signature");
        vinfo->info.message = D.19845;
        vinfo->exception_type = 3;
        D.19846 = ctx.list;
        D.19847 = monoeg_g_slist_prepend (D.19846, vinfo);
        ctx.list = D.19847;
      }
      ctx.valid = 0;
      D.19840 = ctx.list;
      return D.19840;
      <D.19844>:
      D.19848 = BIT_FIELD_REF <*method, 32, 160>;
      D.19849 = D.19848 & 2048;
      if (D.19849 == 0) goto <D.19850>; else goto <D.19851>;
      <D.19850>:
      D.19852 = method->klass;
      D.19853 = BIT_FIELD_REF <*D.19852, 32, 192>;
      D.19854 = D.19853 & 4;
      if (D.19854 == 0) goto <D.19855>; else goto <D.19856>;
      <D.19855>:
      D.19842 = ctx.signature;
      D.19857 = BIT_FIELD_REF <*D.19842, 32, 64>;
      D.19858 = D.19857 & 67108864;
      if (D.19858 != 0) goto <D.19859>; else goto <D.19860>;
      <D.19859>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.19861 = monoeg_g_strdup_printf ("Method and signature don\'t match in terms of genericity");
        vinfo->info.message = D.19861;
        vinfo->exception_type = 3;
        D.19846 = ctx.list;
        D.19862 = monoeg_g_slist_prepend (D.19846, vinfo);
        ctx.list = D.19862;
      }
      ctx.valid = 0;
      D.19840 = ctx.list;
      return D.19840;
      <D.19860>:
      <D.19856>:
      <D.19851>:
      D.19863 = mono_method_get_header (method);
      ctx.header = D.19863;
      D.19864 = ctx.header;
      if (D.19864 == 0B) goto <D.19865>; else goto <D.19866>;
      <D.19865>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.19867 = monoeg_g_strdup_printf ("Could not decode method header");
        vinfo->info.message = D.19867;
        vinfo->exception_type = 3;
        D.19846 = ctx.list;
        D.19868 = monoeg_g_slist_prepend (D.19846, vinfo);
        ctx.list = D.19868;
      }
      ctx.valid = 0;
      D.19840 = ctx.list;
      return D.19840;
      <D.19866>:
      ctx.method = method;
      D.19864 = ctx.header;
      ip = D.19864->code;
      code_start = ip;
      D.19864 = ctx.header;
      D.19869 = D.19864->code_size;
      end = ip + D.19869;
      D.19852 = method->klass;
      image = D.19852->image;
      ctx.image = image;
      D.19842 = ctx.signature;
      D.19870 = D.19842->param_count;
      D.19871 = (int) D.19870;
      D.19842 = ctx.signature;
      D.19872 = D.19842->hasthis;
      D.19873 = (int) D.19872;
      D.19874 = D.19871 + D.19873;
      ctx.max_args = D.19874;
      D.19864 = ctx.header;
      D.19875 = D.19864->max_stack;
      D.19876 = (int) D.19875;
      ctx.max_stack = D.19876;
      ctx.valid = 1;
      D.19877 = ctx.valid;
      ctx.verifiable = D.19877;
      ctx.level = level;
      D.19864 = ctx.header;
      D.19869 = D.19864->code_size;
      D.19878 = D.19869 * 12;
      D.19879 = monoeg_malloc (D.19878);
      ctx.code = D.19879;
      D.19864 = ctx.header;
      D.19869 = D.19864->code_size;
      D.19880 = (int) D.19869;
      ctx.code_size = D.19880;
      D.19881 = ctx.code;
      D.19864 = ctx.header;
      D.19869 = D.19864->code_size;
      D.19878 = D.19869 * 12;
      memset (D.19881, 0, D.19878);
      D.19864 = ctx.header;
      D.19882 = D.19864->num_locals;
      D.19883 = (int) D.19882;
      ctx.num_locals = D.19883;
      D.19864 = ctx.header;
      D.19884 = &D.19864->locals;
      D.19864 = ctx.header;
      D.19882 = D.19864->num_locals;
      D.19885 = (unsigned int) D.19882;
      D.19886 = D.19885 * 4;
      D.19887 = monoeg_g_memdup (D.19884, D.19886);
      ctx.locals = D.19887;
      D.19888 = ctx.num_locals;
      if (D.19888 > 0) goto <D.19889>; else goto <D.19890>;
      <D.19889>:
      D.19864 = ctx.header;
      D.19891 = BIT_FIELD_REF <*D.19864, 32, 64>;
      D.19892 = D.19891 & 2147483648;
      if (D.19892 == 0) goto <D.19893>; else goto <D.19894>;
      <D.19893>:
      D.19897 = ctx.verifiable;
      if (D.19897 != 0) goto <D.19895>; else goto <D.19898>;
      <D.19898>:
      D.19899 = ctx.level;
      D.19900 = D.19899 & 128;
      if (D.19900 != 0) goto <D.19895>; else goto <D.19896>;
      <D.19895>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.19901 = monoeg_g_strdup_printf ("Method with locals variable but without init locals set");
        vinfo->info.message = D.19901;
        vinfo->exception_type = 4;
        D.19846 = ctx.list;
        D.19902 = monoeg_g_slist_prepend (D.19846, vinfo);
        ctx.list = D.19902;
      }
      ctx.verifiable = 0;
      D.19899 = ctx.level;
      D.19903 = D.19899 & 16;
      if (D.19903 != 0) goto <D.19904>; else goto <D.19905>;
      <D.19904>:
      ctx.valid = 0;
      <D.19905>:
      <D.19896>:
      <D.19894>:
      <D.19890>:
      D.19906 = ctx.max_args;
      D.19907 = (unsigned int) D.19906;
      D.19908 = D.19907 * 4;
      D.19909 = monoeg_malloc (D.19908);
      ctx.params = D.19909;
      D.19842 = ctx.signature;
      D.19857 = BIT_FIELD_REF <*D.19842, 32, 64>;
      D.19910 = D.19857 & 4194304;
      if (D.19910 != 0) goto <D.19911>; else goto <D.19912>;
      <D.19911>:
      D.19913 = ctx.params;
      D.19852 = method->klass;
      D.19915 = BIT_FIELD_REF <*D.19852, 32, 160>;
      D.19916 = D.19915 & 8;
      if (D.19916 != 0) goto <D.19917>; else goto <D.19918>;
      <D.19917>:
      D.19852 = method->klass;
      iftmp.11 = &D.19852->this_arg;
      goto <D.19919>;
      <D.19918>:
      D.19852 = method->klass;
      iftmp.11 = &D.19852->byval_arg;
      <D.19919>:
      *D.19913 = iftmp.11;
      <D.19912>:
      D.19913 = ctx.params;
      D.19842 = ctx.signature;
      D.19872 = D.19842->hasthis;
      D.19920 = (unsigned int) D.19872;
      D.19921 = D.19920 * 4;
      D.19922 = D.19913 + D.19921;
      D.19842 = ctx.signature;
      D.19923 = &D.19842->params;
      D.19842 = ctx.signature;
      D.19870 = D.19842->param_count;
      D.19924 = (unsigned int) D.19870;
      D.19925 = D.19924 * 4;
      memcpy (D.19922, D.19923, D.19925);
      D.19842 = ctx.signature;
      D.19857 = BIT_FIELD_REF <*D.19842, 32, 64>;
      D.19926 = D.19857 & 33554432;
      if (D.19926 != 0) goto <D.19927>; else goto <D.19928>;
      <D.19927>:
      generic_context = mono_method_get_context (method);
      ctx.generic_context = generic_context;
      <D.19928>:
      if (generic_context == 0B) goto <D.19931>; else goto <D.19932>;
      <D.19931>:
      D.19852 = method->klass;
      D.19933 = D.19852->generic_container;
      if (D.19933 != 0B) goto <D.19929>; else goto <D.19934>;
      <D.19934>:
      D.19848 = BIT_FIELD_REF <*method, 32, 160>;
      D.19849 = D.19848 & 2048;
      if (D.19849 != 0) goto <D.19929>; else goto <D.19930>;
      <D.19929>:
      D.19848 = BIT_FIELD_REF <*method, 32, 160>;
      D.19849 = D.19848 & 2048;
      if (D.19849 != 0) goto <D.19935>; else goto <D.19936>;
      <D.19935>:
      D.19937 = mono_method_get_generic_container (method);
      generic_context = &D.19937->context;
      ctx.generic_context = generic_context;
      goto <D.19938>;
      <D.19936>:
      D.19852 = method->klass;
      D.19933 = D.19852->generic_container;
      generic_context = &D.19933->context;
      ctx.generic_context = generic_context;
      <D.19938>:
      <D.19930>:
      <D.19932>:
      i = 0;
      goto <D.19039>;
      <D.19038>:
      {
        struct MonoType * uninflated;

        D.19939 = ctx.locals;
        i.12 = (unsigned int) i;
        D.19941 = i.12 * 4;
        D.19942 = D.19939 + D.19941;
        uninflated = *D.19942;
        D.19939 = ctx.locals;
        i.12 = (unsigned int) i;
        D.19941 = i.12 * 4;
        D.19942 = D.19939 + D.19941;
        D.19939 = ctx.locals;
        i.12 = (unsigned int) i;
        D.19941 = i.12 * 4;
        D.19942 = D.19939 + D.19941;
        D.19943 = *D.19942;
        D.19944 = ctx.generic_context;
        D.19945 = mono_class_inflate_generic_type_checked (D.19943, D.19944, &error);
        *D.19942 = D.19945;
        D.19946 = mono_error_ok (&error);
        if (D.19946 == 0) goto <D.19947>; else goto <D.19948>;
        <D.19947>:
        {
          char * name;

          D.19939 = ctx.locals;
          i.12 = (unsigned int) i;
          D.19941 = i.12 * 4;
          D.19942 = D.19939 + D.19941;
          D.19943 = *D.19942;
          if (D.19943 != 0B) goto <D.19950>; else goto <D.19951>;
          <D.19950>:
          D.19939 = ctx.locals;
          i.12 = (unsigned int) i;
          D.19941 = i.12 * 4;
          D.19942 = D.19939 + D.19941;
          iftmp.13 = *D.19942;
          goto <D.19952>;
          <D.19951>:
          iftmp.13 = uninflated;
          <D.19952>:
          name = mono_type_full_name (iftmp.13);
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.19953 = monoeg_g_strdup_printf ("Invalid local %d of type %s", i, name);
            vinfo->info.message = D.19953;
            vinfo->exception_type = 3;
            D.19846 = ctx.list;
            D.19954 = monoeg_g_slist_prepend (D.19846, vinfo);
            ctx.list = D.19954;
          }
          ctx.valid = 0;
          monoeg_g_free (name);
          mono_error_cleanup (&error);
          ctx.num_locals = i;
          ctx.max_args = 0;
          goto cleanup;
        }
        <D.19948>:
      }
      i = i + 1;
      <D.19039>:
      D.19888 = ctx.num_locals;
      if (D.19888 > i) goto <D.19038>; else goto <D.19040>;
      <D.19040>:
      i = 0;
      goto <D.19045>;
      <D.19044>:
      {
        struct MonoType * uninflated;

        D.19913 = ctx.params;
        i.12 = (unsigned int) i;
        D.19941 = i.12 * 4;
        D.19955 = D.19913 + D.19941;
        uninflated = *D.19955;
        D.19913 = ctx.params;
        i.12 = (unsigned int) i;
        D.19941 = i.12 * 4;
        D.19955 = D.19913 + D.19941;
        D.19913 = ctx.params;
        i.12 = (unsigned int) i;
        D.19941 = i.12 * 4;
        D.19955 = D.19913 + D.19941;
        D.19956 = *D.19955;
        D.19944 = ctx.generic_context;
        D.19957 = mono_class_inflate_generic_type_checked (D.19956, D.19944, &error);
        *D.19955 = D.19957;
        D.19958 = mono_error_ok (&error);
        if (D.19958 == 0) goto <D.19959>; else goto <D.19960>;
        <D.19959>:
        {
          char * name;

          D.19913 = ctx.params;
          i.12 = (unsigned int) i;
          D.19941 = i.12 * 4;
          D.19955 = D.19913 + D.19941;
          D.19956 = *D.19955;
          if (D.19956 != 0B) goto <D.19962>; else goto <D.19963>;
          <D.19962>:
          D.19913 = ctx.params;
          i.12 = (unsigned int) i;
          D.19941 = i.12 * 4;
          D.19955 = D.19913 + D.19941;
          iftmp.14 = *D.19955;
          goto <D.19964>;
          <D.19963>:
          iftmp.14 = uninflated;
          <D.19964>:
          name = mono_type_full_name (iftmp.14);
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.19965 = monoeg_g_strdup_printf ("Invalid parameter %d of type %s", i, name);
            vinfo->info.message = D.19965;
            vinfo->exception_type = 3;
            D.19846 = ctx.list;
            D.19966 = monoeg_g_slist_prepend (D.19846, vinfo);
            ctx.list = D.19966;
          }
          ctx.valid = 0;
          monoeg_g_free (name);
          mono_error_cleanup (&error);
          ctx.max_args = i;
          goto cleanup;
        }
        <D.19960>:
      }
      i = i + 1;
      <D.19045>:
      D.19906 = ctx.max_args;
      if (D.19906 > i) goto <D.19044>; else goto <D.19046>;
      <D.19046>:
      stack_init (&ctx, &ctx.eval);
      i = 0;
      goto <D.19051>;
      <D.19050>:
      D.19939 = ctx.locals;
      i.12 = (unsigned int) i;
      D.19941 = i.12 * 4;
      D.19942 = D.19939 + D.19941;
      D.19943 = *D.19942;
      D.19967 = mono_type_is_valid_in_context (&ctx, D.19943);
      if (D.19967 == 0) goto <D.19047>; else goto <D.19968>;
      <D.19968>:
      D.19939 = ctx.locals;
      i.12 = (unsigned int) i;
      D.19941 = i.12 * 4;
      D.19942 = D.19939 + D.19941;
      D.19943 = *D.19942;
      D.19969 = get_stack_type (D.19943);
      if (D.19969 == 0) goto <D.19970>; else goto <D.19971>;
      <D.19970>:
      {
        char * name;

        D.19939 = ctx.locals;
        i.12 = (unsigned int) i;
        D.19941 = i.12 * 4;
        D.19942 = D.19939 + D.19941;
        D.19943 = *D.19942;
        name = mono_type_full_name (D.19943);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.19972 = monoeg_g_strdup_printf ("Invalid local %i of type %s", i, name);
          vinfo->info.message = D.19972;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.19973 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.19973;
        }
        ctx.valid = 0;
        monoeg_g_free (name);
        goto <D.19047>;
      }
      <D.19971>:
      i = i + 1;
      <D.19051>:
      D.19888 = ctx.num_locals;
      if (D.19888 > i) goto <D.19050>; else goto <D.19047>;
      <D.19047>:
      i = 0;
      goto <D.19056>;
      <D.19055>:
      D.19913 = ctx.params;
      i.12 = (unsigned int) i;
      D.19941 = i.12 * 4;
      D.19955 = D.19913 + D.19941;
      D.19956 = *D.19955;
      D.19974 = mono_type_is_valid_in_context (&ctx, D.19956);
      if (D.19974 == 0) goto <D.19052>; else goto <D.19975>;
      <D.19975>:
      D.19913 = ctx.params;
      i.12 = (unsigned int) i;
      D.19941 = i.12 * 4;
      D.19955 = D.19913 + D.19941;
      D.19956 = *D.19955;
      D.19976 = get_stack_type (D.19956);
      if (D.19976 == 0) goto <D.19977>; else goto <D.19978>;
      <D.19977>:
      {
        char * name;

        D.19913 = ctx.params;
        i.12 = (unsigned int) i;
        D.19941 = i.12 * 4;
        D.19955 = D.19913 + D.19941;
        D.19956 = *D.19955;
        name = mono_type_full_name (D.19956);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.19979 = monoeg_g_strdup_printf ("Invalid parameter %i of type %s", i, name);
          vinfo->info.message = D.19979;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.19980 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.19980;
        }
        ctx.valid = 0;
        monoeg_g_free (name);
        goto <D.19052>;
      }
      <D.19978>:
      i = i + 1;
      <D.19056>:
      D.19906 = ctx.max_args;
      if (D.19906 > i) goto <D.19055>; else goto <D.19052>;
      <D.19052>:
      D.19877 = ctx.valid;
      if (D.19877 == 0) goto cleanup; else goto <D.19981>;
      <D.19981>:
      i = 0;
      goto <D.19071>;
      <D.19070>:
      {
        struct MonoExceptionClause * clause;

        D.19864 = ctx.header;
        D.19982 = D.19864->clauses;
        i.12 = (unsigned int) i;
        D.19983 = i.12 * 24;
        clause = D.19982 + D.19983;
        D.19986 = clause->try_offset;
        D.19987 = ctx.code_size;
        D.19988 = (unsigned int) D.19987;
        if (D.19986 > D.19988) goto <D.19984>; else goto <D.19989>;
        <D.19989>:
        D.19986 = clause->try_offset;
        D.19990 = clause->try_len;
        D.19991 = D.19986 + D.19990;
        D.19987 = ctx.code_size;
        D.19988 = (unsigned int) D.19987;
        if (D.19991 > D.19988) goto <D.19984>; else goto <D.19992>;
        <D.19992>:
        D.19990 = clause->try_len;
        D.19993 = ~D.19990;
        D.19986 = clause->try_offset;
        if (D.19993 < D.19986) goto <D.19984>; else goto <D.19985>;
        <D.19984>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.19986 = clause->try_offset;
          D.19994 = monoeg_g_strdup_printf ("try clause out of bounds at 0x%04x", D.19986);
          vinfo->info.message = D.19994;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.19995 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.19995;
        }
        ctx.valid = 0;
        <D.19985>:
        D.19990 = clause->try_len;
        if (D.19990 == 0) goto <D.19996>; else goto <D.19997>;
        <D.19996>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.19986 = clause->try_offset;
          D.19998 = monoeg_g_strdup_printf ("try clause len <= 0 at 0x%04x", D.19986);
          vinfo->info.message = D.19998;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.19999 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.19999;
        }
        ctx.valid = 0;
        <D.19997>:
        D.20002 = clause->handler_offset;
        D.19987 = ctx.code_size;
        D.19988 = (unsigned int) D.19987;
        if (D.20002 > D.19988) goto <D.20000>; else goto <D.20003>;
        <D.20003>:
        D.20002 = clause->handler_offset;
        D.20004 = clause->handler_len;
        D.20005 = D.20002 + D.20004;
        D.19987 = ctx.code_size;
        D.19988 = (unsigned int) D.19987;
        if (D.20005 > D.19988) goto <D.20000>; else goto <D.20006>;
        <D.20006>:
        D.20004 = clause->handler_len;
        D.20007 = ~D.20004;
        D.20002 = clause->handler_offset;
        if (D.20007 < D.20002) goto <D.20000>; else goto <D.20001>;
        <D.20000>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.19986 = clause->try_offset;
          D.20008 = monoeg_g_strdup_printf ("handler clause out of bounds at 0x%04x", D.19986);
          vinfo->info.message = D.20008;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20009 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20009;
        }
        ctx.valid = 0;
        <D.20001>:
        D.20004 = clause->handler_len;
        if (D.20004 == 0) goto <D.20010>; else goto <D.20011>;
        <D.20010>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.19986 = clause->try_offset;
          D.20012 = monoeg_g_strdup_printf ("handler clause len <= 0 at 0x%04x", D.19986);
          vinfo->info.message = D.20012;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20013 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20013;
        }
        ctx.valid = 0;
        <D.20011>:
        D.19986 = clause->try_offset;
        D.20002 = clause->handler_offset;
        if (D.19986 < D.20002) goto <D.20016>; else goto <D.20017>;
        <D.20016>:
        D.19986 = clause->try_offset;
        D.19990 = clause->try_len;
        D.19991 = D.19986 + D.19990;
        D.20019 = clause->flags;
        if (D.20019 == 1) goto <D.20020>; else goto <D.20021>;
        <D.20020>:
        iftmp.15 = clause->data.filter_offset;
        goto <D.20022>;
        <D.20021>:
        iftmp.15 = clause->handler_offset;
        <D.20022>:
        if (D.19991 > iftmp.15) goto <D.20014>; else goto <D.20023>;
        <D.20023>:
        D.19990 = clause->try_len;
        D.19993 = ~D.19990;
        D.19986 = clause->try_offset;
        if (D.19993 < D.19986) goto <D.20014>; else goto <D.20015>;
        <D.20014>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.19986 = clause->try_offset;
          D.20002 = clause->handler_offset;
          D.20024 = monoeg_g_strdup_printf ("try block (at 0x%04x) includes handler block (at 0x%04x)", D.19986, D.20002);
          vinfo->info.message = D.20024;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20025 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20025;
        }
        ctx.valid = 0;
        <D.20015>:
        <D.20017>:
        D.20019 = clause->flags;
        if (D.20019 == 1) goto <D.20026>; else goto <D.20027>;
        <D.20026>:
        D.20028 = clause->data.filter_offset;
        D.19987 = ctx.code_size;
        D.19988 = (unsigned int) D.19987;
        if (D.20028 > D.19988) goto <D.20029>; else goto <D.20030>;
        <D.20029>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.19986 = clause->try_offset;
          D.20031 = monoeg_g_strdup_printf ("filter clause out of bounds at 0x%04x", D.19986);
          vinfo->info.message = D.20031;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20032 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20032;
        }
        ctx.valid = 0;
        <D.20030>:
        D.20028 = clause->data.filter_offset;
        D.20002 = clause->handler_offset;
        if (D.20028 >= D.20002) goto <D.20033>; else goto <D.20034>;
        <D.20033>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20028 = clause->data.filter_offset;
          D.20035 = monoeg_g_strdup_printf ("filter clause must come before the handler clause at 0x%04x", D.20028);
          vinfo->info.message = D.20035;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20036 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20036;
        }
        ctx.valid = 0;
        <D.20034>:
        <D.20027>:
        n = i + 1;
        goto <D.19066>;
        <D.19065>:
        D.19864 = ctx.header;
        D.19982 = D.19864->clauses;
        n.16 = (unsigned int) n;
        D.20038 = n.16 * 24;
        D.20039 = D.19982 + D.20038;
        verify_clause_relationship (&ctx, clause, D.20039);
        n = n + 1;
        <D.19066>:
        D.19864 = ctx.header;
        D.20040 = D.19864->num_clauses;
        D.20041 = (int) D.20040;
        if (D.20041 > n) goto <D.20042>; else goto <D.19067>;
        <D.20042>:
        D.19877 = ctx.valid;
        if (D.19877 != 0) goto <D.19065>; else goto <D.19067>;
        <D.19067>:
        D.19877 = ctx.valid;
        if (D.19877 == 0) goto <D.19068>; else goto <D.20043>;
        <D.20043>:
        D.19881 = ctx.code;
        D.19986 = clause->try_offset;
        D.20044 = D.19986 * 12;
        D.20045 = D.19881 + D.20044;
        D.19881 = ctx.code;
        D.19986 = clause->try_offset;
        D.20044 = D.19986 * 12;
        D.20045 = D.19881 + D.20044;
        D.20046 = D.20045->flags;
        D.20047 = D.20046 | 2;
        D.20045->flags = D.20047;
        D.19986 = clause->try_offset;
        D.19990 = clause->try_len;
        D.19991 = D.19986 + D.19990;
        D.19987 = ctx.code_size;
        D.19988 = (unsigned int) D.19987;
        if (D.19991 < D.19988) goto <D.20048>; else goto <D.20049>;
        <D.20048>:
        D.19881 = ctx.code;
        D.19986 = clause->try_offset;
        D.19990 = clause->try_len;
        D.19991 = D.19986 + D.19990;
        D.20050 = D.19991 * 12;
        D.20051 = D.19881 + D.20050;
        D.19881 = ctx.code;
        D.19986 = clause->try_offset;
        D.19990 = clause->try_len;
        D.19991 = D.19986 + D.19990;
        D.20050 = D.19991 * 12;
        D.20051 = D.19881 + D.20050;
        D.20052 = D.20051->flags;
        D.20053 = D.20052 | 2;
        D.20051->flags = D.20053;
        <D.20049>:
        D.20002 = clause->handler_offset;
        D.20004 = clause->handler_len;
        D.20005 = D.20002 + D.20004;
        D.19987 = ctx.code_size;
        D.19988 = (unsigned int) D.19987;
        if (D.20005 < D.19988) goto <D.20054>; else goto <D.20055>;
        <D.20054>:
        D.19881 = ctx.code;
        D.20002 = clause->handler_offset;
        D.20004 = clause->handler_len;
        D.20005 = D.20002 + D.20004;
        D.20056 = D.20005 * 12;
        D.20057 = D.19881 + D.20056;
        D.19881 = ctx.code;
        D.20002 = clause->handler_offset;
        D.20004 = clause->handler_len;
        D.20005 = D.20002 + D.20004;
        D.20056 = D.20005 * 12;
        D.20057 = D.19881 + D.20056;
        D.20058 = D.20057->flags;
        D.20059 = D.20058 | 2;
        D.20057->flags = D.20059;
        <D.20055>:
        D.20019 = clause->flags;
        if (D.20019 == 0) goto <D.20060>; else goto <D.20061>;
        <D.20060>:
        D.20062 = clause->data.catch_class;
        if (D.20062 == 0B) goto <D.20063>; else goto <D.20064>;
        <D.20063>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20065 = monoeg_g_strdup_printf ("Catch clause %d with invalid type", i);
          vinfo->info.message = D.20065;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20066 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20066;
        }
        ctx.valid = 0;
        goto <D.19068>;
        <D.20064>:
        D.20062 = clause->data.catch_class;
        D.20067 = &D.20062->byval_arg;
        D.20068 = mono_type_is_valid_in_context (&ctx, D.20067);
        if (D.20068 == 0) goto <D.19068>; else goto <D.20069>;
        <D.20069>:
        D.19881 = ctx.code;
        D.20002 = clause->handler_offset;
        D.20070 = D.20002 * 12;
        D.20071 = D.19881 + D.20070;
        D.20062 = clause->data.catch_class;
        init_stack_with_value_at_exception_boundary (&ctx, D.20071, D.20062);
        goto <D.20072>;
        <D.20061>:
        D.20019 = clause->flags;
        if (D.20019 == 1) goto <D.20073>; else goto <D.20074>;
        <D.20073>:
        D.19881 = ctx.code;
        D.20028 = clause->data.filter_offset;
        D.20075 = D.20028 * 12;
        D.20076 = D.19881 + D.20075;
        D.20077 = mono_defaults.exception_class;
        init_stack_with_value_at_exception_boundary (&ctx, D.20076, D.20077);
        D.19881 = ctx.code;
        D.20002 = clause->handler_offset;
        D.20070 = D.20002 * 12;
        D.20071 = D.19881 + D.20070;
        D.20077 = mono_defaults.exception_class;
        init_stack_with_value_at_exception_boundary (&ctx, D.20071, D.20077);
        <D.20074>:
        <D.20072>:
      }
      i = i + 1;
      <D.19071>:
      D.19864 = ctx.header;
      D.20040 = D.19864->num_clauses;
      D.20041 = (int) D.20040;
      if (D.20041 > i) goto <D.20078>; else goto <D.19068>;
      <D.20078>:
      D.19877 = ctx.valid;
      if (D.19877 != 0) goto <D.19070>; else goto <D.19068>;
      <D.19068>:
      D.19877 = ctx.valid;
      if (D.19877 == 0) goto cleanup; else goto <D.20079>;
      <D.20079>:
      bb = mono_basic_block_split (method, &error);
      original_bb = bb;
      D.20080 = mono_error_ok (&error);
      if (D.20080 == 0) goto <D.20081>; else goto <D.20082>;
      <D.20081>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.20083 = mono_error_get_message (&error);
        D.20084 = monoeg_g_strdup_printf ("Invalid branch target: %s", D.20083);
        vinfo->info.message = D.20084;
        vinfo->exception_type = 3;
        D.19846 = ctx.list;
        D.20085 = monoeg_g_slist_prepend (D.19846, vinfo);
        ctx.list = D.20085;
      }
      ctx.valid = 0;
      mono_error_cleanup (&error);
      goto cleanup;
      <D.20082>:
      D.20086 = bb == 0B;
      D.20087 = (long int) D.20086;
      D.20088 = __builtin_expect (D.20087, 0);
      if (D.20088 != 0) goto <D.20089>; else goto <D.20090>;
      <D.20089>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 5001, "bb");
      <D.20090>:
      goto <D.19090>;
      <D.19400>:
      {
        int op_size;

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

          try
            {
              ip_copy = ip;
              D.20094 = bb->end;
              D.20095 = (unsigned int) D.20094;
              if (D.20095 < ip_offset) goto <D.20096>; else goto <D.20097>;
              <D.20096>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (12);
                vinfo->info.status = 1;
                D.20094 = bb->end;
                D.20098 = monoeg_g_strdup_printf ("Branch or EH block at [0x%04x] targets middle instruction at 0x%04x", D.20094, ip_offset);
                vinfo->info.message = D.20098;
                vinfo->exception_type = 3;
                D.19846 = ctx.list;
                D.20099 = monoeg_g_slist_prepend (D.19846, vinfo);
                ctx.list = D.20099;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20097>:
              D.20094 = bb->end;
              D.20095 = (unsigned int) D.20094;
              if (D.20095 == ip_offset) goto <D.20100>; else goto <D.20101>;
              <D.20100>:
              bb = bb->next;
              <D.20101>:
              op_size = mono_opcode_value_and_size (&ip_copy, end, &op);
              if (op_size == -1) goto <D.20102>; else goto <D.20103>;
              <D.20102>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (12);
                vinfo->info.status = 1;
                D.20104 = *ip;
                D.20105 = (int) D.20104;
                D.20106 = monoeg_g_strdup_printf ("Invalid instruction %x at 0x%04x", D.20105, ip_offset);
                vinfo->info.message = D.20106;
                vinfo->exception_type = 3;
                D.19846 = ctx.list;
                D.20107 = monoeg_g_slist_prepend (D.19846, vinfo);
                ctx.list = D.20107;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20103>:
              op_size.19 = (unsigned int) op_size;
              D.20111 = ip_offset + op_size.19;
              D.20094 = bb->end;
              D.20095 = (unsigned int) D.20094;
              if (D.20111 > D.20095) goto <D.20108>; else goto <D.20112>;
              <D.20112>:
              op_size.20 = (unsigned int) op_size;
              D.20114 = ~op_size.20;
              if (D.20114 < ip_offset) goto <D.20108>; else goto <D.20109>;
              <D.20108>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (12);
                vinfo->info.status = 1;
                D.20115 = monoeg_g_strdup_printf ("Branch or EH block targets middle of instruction at 0x%04x", ip_offset);
                vinfo->info.message = D.20115;
                vinfo->exception_type = 3;
                D.19846 = ctx.list;
                D.20116 = monoeg_g_slist_prepend (D.19846, vinfo);
                ctx.list = D.20116;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20109>:
              op_size.19 = (unsigned int) op_size;
              D.20111 = ip_offset + op_size.19;
              D.20094 = bb->end;
              D.20095 = (unsigned int) D.20094;
              if (D.20111 == D.20095) goto <D.20117>; else goto <D.20118>;
              <D.20117>:
              op.21 = op;
              D.20120 = mono_opcode_is_prefix (op.21);
              if (D.20120 != 0) goto <D.20121>; else goto <D.20122>;
              <D.20121>:
              {
                struct MonoVerifyInfoExtended * vinfo;

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

          D.19864 = ctx.header;
          D.19982 = D.19864->clauses;
          i.12 = (unsigned int) i;
          D.19983 = i.12 * 24;
          clause = D.19982 + D.19983;
          D.20126 = clause->try_offset;
          D.20127 = clause->try_len;
          D.20128 = D.20126 + D.20127;
          if (D.20128 == ip_offset) goto <D.20129>; else goto <D.20130>;
          <D.20129>:
          if (start == 0) goto <D.20131>; else goto <D.20132>;
          <D.20131>:
          D.19897 = ctx.verifiable;
          if (D.19897 != 0) goto <D.20133>; else goto <D.20135>;
          <D.20135>:
          D.19899 = ctx.level;
          D.19900 = D.19899 & 128;
          if (D.19900 != 0) goto <D.20133>; else goto <D.20134>;
          <D.20133>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.20136 = monoeg_g_strdup_printf ("fallthru off try block at 0x%04x", ip_offset);
            vinfo->info.message = D.20136;
            vinfo->exception_type = 4;
            D.19846 = ctx.list;
            D.20137 = monoeg_g_slist_prepend (D.19846, vinfo);
            ctx.list = D.20137;
          }
          ctx.verifiable = 0;
          D.19899 = ctx.level;
          D.19903 = D.19899 & 16;
          if (D.19903 != 0) goto <D.20138>; else goto <D.20139>;
          <D.20138>:
          ctx.valid = 0;
          <D.20139>:
          <D.20134>:
          start = 1;
          <D.20132>:
          <D.20130>:
          D.20140 = clause->handler_offset;
          D.20141 = clause->handler_len;
          D.20142 = D.20140 + D.20141;
          if (D.20142 == ip_offset) goto <D.20143>; else goto <D.20144>;
          <D.20143>:
          if (start == 0) goto <D.20145>; else goto <D.20146>;
          <D.20145>:
          D.20147 = clause->flags;
          if (D.20147 == 1) goto <D.20148>; else goto <D.20149>;
          <D.20148>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20150 = monoeg_g_strdup_printf ("fallout of handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20150;
            vinfo->exception_type = 3;
            D.19846 = ctx.list;
            D.20151 = monoeg_g_slist_prepend (D.19846, vinfo);
            ctx.list = D.20151;
          }
          ctx.valid = 0;
          goto <D.20152>;
          <D.20149>:
          D.19897 = ctx.verifiable;
          if (D.19897 != 0) goto <D.20153>; else goto <D.20155>;
          <D.20155>:
          D.19899 = ctx.level;
          D.19900 = D.19899 & 128;
          if (D.19900 != 0) goto <D.20153>; else goto <D.20154>;
          <D.20153>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.20156 = monoeg_g_strdup_printf ("fallout of handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20156;
            vinfo->exception_type = 4;
            D.19846 = ctx.list;
            D.20157 = monoeg_g_slist_prepend (D.19846, vinfo);
            ctx.list = D.20157;
          }
          ctx.verifiable = 0;
          D.19899 = ctx.level;
          D.19903 = D.19899 & 16;
          if (D.19903 != 0) goto <D.20158>; else goto <D.20159>;
          <D.20158>:
          ctx.valid = 0;
          <D.20159>:
          <D.20154>:
          <D.20152>:
          start = 1;
          <D.20146>:
          <D.20144>:
          D.20147 = clause->flags;
          if (D.20147 == 1) goto <D.20160>; else goto <D.20161>;
          <D.20160>:
          D.20140 = clause->handler_offset;
          if (D.20140 == ip_offset) goto <D.20162>; else goto <D.20163>;
          <D.20162>:
          if (start == 0) goto <D.20164>; else goto <D.20165>;
          <D.20164>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20166 = monoeg_g_strdup_printf ("fallout of filter block at 0x%04x", ip_offset);
            vinfo->info.message = D.20166;
            vinfo->exception_type = 3;
            D.19846 = ctx.list;
            D.20167 = monoeg_g_slist_prepend (D.19846, vinfo);
            ctx.list = D.20167;
          }
          ctx.valid = 0;
          start = 1;
          <D.20165>:
          <D.20163>:
          <D.20161>:
          D.20140 = clause->handler_offset;
          if (D.20140 == ip_offset) goto <D.20168>; else goto <D.20169>;
          <D.20168>:
          if (start == 0) goto <D.20170>; else goto <D.20171>;
          <D.20170>:
          D.19897 = ctx.verifiable;
          if (D.19897 != 0) goto <D.20172>; else goto <D.20174>;
          <D.20174>:
          D.19899 = ctx.level;
          D.19900 = D.19899 & 128;
          if (D.19900 != 0) goto <D.20172>; else goto <D.20173>;
          <D.20172>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.20175 = monoeg_g_strdup_printf ("fallthru handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20175;
            vinfo->exception_type = 4;
            D.19846 = ctx.list;
            D.20176 = monoeg_g_slist_prepend (D.19846, vinfo);
            ctx.list = D.20176;
          }
          ctx.verifiable = 0;
          D.19899 = ctx.level;
          D.19903 = D.19899 & 16;
          if (D.19903 != 0) goto <D.20177>; else goto <D.20178>;
          <D.20177>:
          ctx.valid = 0;
          <D.20178>:
          <D.20173>:
          start = 1;
          <D.20171>:
          <D.20169>:
          D.20126 = clause->try_offset;
          if (D.20126 == ip_offset) goto <D.20179>; else goto <D.20180>;
          <D.20179>:
          D.20181 = ctx.eval.size;
          if (D.20181 != 0) goto <D.20182>; else goto <D.20183>;
          <D.20182>:
          if (start == 0) goto <D.20184>; else goto <D.20185>;
          <D.20184>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20186 = monoeg_g_strdup_printf ("Try to enter try block with a non-empty stack at 0x%04x", ip_offset);
            vinfo->info.message = D.20186;
            vinfo->exception_type = 3;
            D.19846 = ctx.list;
            D.20187 = monoeg_g_slist_prepend (D.19846, vinfo);
            ctx.list = D.20187;
          }
          ctx.valid = 0;
          start = 1;
          <D.20185>:
          <D.20183>:
          <D.20180>:
        }
        i = i + 1;
        <D.19088>:
        D.19864 = ctx.header;
        D.20040 = D.19864->num_clauses;
        D.20041 = (int) D.20040;
        if (D.20041 > i) goto <D.20188>; else goto <D.19089>;
        <D.20188>:
        D.19877 = ctx.valid;
        if (D.19877 != 0) goto <D.19087>; else goto <D.19089>;
        <D.19089>:
        D.20189 = BIT_FIELD_REF <*bb, 32, 224>;
        D.20190 = D.20189 & 2;
        if (D.20190 != 0) goto <D.20191>; else goto <D.20192>;
        <D.20191>:
        D.19881 = ctx.code;
        D.20193 = ip_offset * 12;
        D.20194 = D.19881 + D.20193;
        D.19881 = ctx.code;
        D.20193 = ip_offset * 12;
        D.20194 = D.19881 + D.20193;
        D.20195 = D.20194->flags;
        D.20196 = D.20195 | 1;
        D.20194->flags = D.20196;
        op_size.22 = (sizetype) op_size;
        ip = ip + op_size.22;
        // predicted unlikely by continue predictor.
        goto <D.19090>;
        <D.20192>:
        D.19877 = ctx.valid;
        if (D.19877 == 0) goto <D.19091>; else goto <D.20198>;
        <D.20198>:
        if (need_merge != 0) goto <D.20199>; else goto <D.20200>;
        <D.20199>:
        D.19881 = ctx.code;
        D.20201 = ctx.target;
        D.20202 = (unsigned int) D.20201;
        D.20203 = D.20202 * 12;
        D.20204 = D.19881 + D.20203;
        merge_stacks (&ctx, &ctx.eval, D.20204, 0, 1);
        need_merge = 0;
        <D.20200>:
        D.19881 = ctx.code;
        D.20193 = ip_offset * 12;
        D.20194 = D.19881 + D.20193;
        merge_stacks (&ctx, &ctx.eval, D.20194, start, 0);
        start = 0;
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        switch (D.20105) <default: <D.19394>, case 0: <D.19092>, case 1: <D.19093>, case 2: <D.19095>, case 3: <D.19096>, case 4: <D.19097>, case 5: <D.19098>, case 6: <D.19123>, case 7: <D.19124>, case 8: <D.19125>, case 9: <D.19126>, case 10: <D.19127>, case 11: <D.19128>, case 12: <D.19129>, case 13: <D.19130>, case 14: <D.19099>, case 15: <D.19100>, case 16: <D.19133>, case 17: <D.19180>, case 18: <D.19181>, case 19: <D.19131>, case 20: <D.19155>, case 21: <D.19135>, case 22: <D.19136>, case 23: <D.19137>, case 24: <D.19138>, case 25: <D.19139>, case 26: <D.19140>, case 27: <D.19141>, case 28: <D.19142>, case 29: <D.19143>, case 30: <D.19144>, case 31: <D.19145>, case 32: <D.19147>, case 33: <D.19149>, case 34: <D.19151>, case 35: <D.19153>, case 36: <D.19183>, case 37: <D.19185>, case 38: <D.19121>, case 39: <D.19187>, case 40: <D.19192>, case 41: <D.19195>, case 42: <D.19122>, case 43: <D.19198>, case 44: <D.19200>, case 45: <D.19201>, case 46: <D.19156>, case 47: <D.19159>, case 48: <D.19160>, case 49: <D.19161>, case 50: <D.19162>, case 51: <D.19157>, case 52: <D.19163>, case 53: <D.19164>, case 54: <D.19165>, case 55: <D.19166>, case 56: <D.19203>, case 57: <D.19205>, case 58: <D.19206>, case 59: <D.19168>, case 60: <D.19171>, case 61: <D.19172>, case 62: <D.19173>, case 63: <D.19174>, case 64: <D.19169>, case 65: <D.19175>, case 66: <D.19176>, case 67: <D.19177>, case 68: <D.19178>, case 69: <D.19208>, case 70: <D.19213>, case 71: <D.19214>, case 72: <D.19215>, case 73: <D.19216>, case 74: <D.19217>, case 75: <D.19218>, case 76: <D.19219>, case 77: <D.19220>, case 78: <D.19221>, case 79: <D.19222>, case 80: <D.19223>, case 81: <D.19224>, case 82: <D.19225>, case 83: <D.19226>, case 84: <D.19227>, case 85: <D.19228>, case 86: <D.19229>, case 87: <D.19230>, case 88: <D.19108>, case 89: <D.19109>, case 90: <D.19110>, case 91: <D.19111>, case 92: <D.19114>, case 93: <D.19112>, case 94: <D.19116>, case 95: <D.19113>, case 96: <D.19115>, case 97: <D.19117>, case 98: <D.19118>, case 99: <D.19119>, case 100: <D.19120>, case 101: <D.19233>, case 102: <D.19232>, case 103: <D.19234>, case 104: <D.19235>, case 105: <D.19236>, case 106: <D.19240>, case 107: <D.19242>, case 108: <D.19243>, case 109: <D.19239>, case 110: <D.19241>, case 111: <D.19193>, case 112: <D.19247>, case 113: <D.19249>, case 114: <D.19251>, case 115: <D.19253>, case 116: <D.19255>, case 117: <D.19256>, case 118: <D.19244>, case 119: <D.19258>, case 120: <D.19259>, case 121: <D.19261>, case 122: <D.19263>, case 123: <D.19264>, case 124: <D.19265>, case 125: <D.19270>, case 126: <D.19267>, case 127: <D.19268>, case 128: <D.19272>, case 129: <D.19274>, case 130: <D.19276>, case 131: <D.19277>, case 132: <D.19278>, case 133: <D.19282>, case 134: <D.19279>, case 135: <D.19280>, case 136: <D.19281>, case 137: <D.19283>, case 138: <D.19284>, case 139: <D.19285>, case 140: <D.19286>, case 141: <D.19288>, case 142: <D.19290>, case 143: <D.19291>, case 144: <D.19293>, case 145: <D.19294>, case 146: <D.19295>, case 147: <D.19296>, case 148: <D.19297>, case 149: <D.19298>, case 150: <D.19299>, case 151: <D.19300>, case 152: <D.19301>, case 153: <D.19302>, case 154: <D.19303>, case 155: <D.19304>, case 156: <D.19305>, case 157: <D.19306>, case 158: <D.19307>, case 159: <D.19308>, case 160: <D.19309>, case 161: <D.19310>, case 162: <D.19311>, case 163: <D.19312>, case 164: <D.19314>, case 165: <D.19316>, case 179: <D.19318>, case 180: <D.19319>, case 181: <D.19320>, case 182: <D.19321>, case 183: <D.19322>, case 184: <D.19323>, case 185: <D.19324>, case 186: <D.19325>, case 194: <D.19328>, case 195: <D.19330>, case 198: <D.19331>, case 208: <D.19333>, case 209: <D.19238>, case 210: <D.19237>, case 211: <D.19245>, case 212: <D.19326>, case 213: <D.19327>, case 214: <D.19104>, case 215: <D.19102>, case 216: <D.19106>, case 217: <D.19107>, case 218: <D.19105>, case 219: <D.19103>, case 220: <D.19335>, case 221: <D.19337>, case 222: <D.19339>, case 223: <D.19231>, case 224: <D.19246>, case 254: <D.19341>>
        <D.19092>:
        <D.19093>:
        ip = ip + 1;
        goto <D.19094>;
        <D.19095>:
        <D.19096>:
        <D.19097>:
        <D.19098>:
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        D.20205 = D.20105 + -2;
        D.20206 = (unsigned int) D.20205;
        push_arg (&ctx, D.20206, 0);
        ip = ip + 1;
        goto <D.19094>;
        <D.19099>:
        <D.19100>:
        D.20209 = ip + 2;
        if (D.20209 > end) goto <D.20207>; else goto <D.20210>;
        <D.20210>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20207>; else goto <D.20208>;
        <D.20207>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20213 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20213;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20214 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20214;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20208>:
        D.20215 = ip + 1;
        D.20216 = *D.20215;
        D.20217 = (unsigned int) D.20216;
        D.20104 = *ip;
        D.20218 = D.20104 == 15;
        D.20219 = (int) D.20218;
        push_arg (&ctx, D.20217, D.20219);
        ip = ip + 2;
        goto <D.19094>;
        <D.19102>:
        D.20104 = *ip;
        D.20220 = (unsigned int) D.20104;
        do_binop (&ctx, D.20220, &add_ovf_un_table);
        ip = ip + 1;
        goto <D.19094>;
        <D.19103>:
        D.20104 = *ip;
        D.20220 = (unsigned int) D.20104;
        do_binop (&ctx, D.20220, &sub_ovf_un_table);
        ip = ip + 1;
        goto <D.19094>;
        <D.19104>:
        <D.19105>:
        <D.19106>:
        <D.19107>:
        D.20104 = *ip;
        D.20220 = (unsigned int) D.20104;
        do_binop (&ctx, D.20220, &bin_ovf_table);
        ip = ip + 1;
        goto <D.19094>;
        <D.19108>:
        D.20104 = *ip;
        D.20220 = (unsigned int) D.20104;
        do_binop (&ctx, D.20220, &add_table);
        ip = ip + 1;
        goto <D.19094>;
        <D.19109>:
        D.20104 = *ip;
        D.20220 = (unsigned int) D.20104;
        do_binop (&ctx, D.20220, &sub_table);
        ip = ip + 1;
        goto <D.19094>;
        <D.19110>:
        <D.19111>:
        <D.19112>:
        D.20104 = *ip;
        D.20220 = (unsigned int) D.20104;
        do_binop (&ctx, D.20220, &bin_op_table);
        ip = ip + 1;
        goto <D.19094>;
        <D.19113>:
        <D.19114>:
        <D.19115>:
        <D.19116>:
        <D.19117>:
        D.20104 = *ip;
        D.20220 = (unsigned int) D.20104;
        do_binop (&ctx, D.20220, &int_bin_op_table);
        ip = ip + 1;
        goto <D.19094>;
        <D.19118>:
        <D.19119>:
        <D.19120>:
        D.20104 = *ip;
        D.20220 = (unsigned int) D.20104;
        do_binop (&ctx, D.20220, &shift_op_table);
        ip = ip + 1;
        goto <D.19094>;
        <D.19121>:
        D.20221 = check_underflow (&ctx, 1);
        if (D.20221 == 0) goto <D.19094>; else goto <D.20222>;
        <D.20222>:
        stack_pop_safe (&ctx);
        ip = ip + 1;
        goto <D.19094>;
        <D.19122>:
        do_ret (&ctx);
        ip = ip + 1;
        start = 1;
        goto <D.19094>;
        <D.19123>:
        <D.19124>:
        <D.19125>:
        <D.19126>:
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        D.20223 = D.20105 + -6;
        D.20224 = (unsigned int) D.20223;
        push_local (&ctx, D.20224, 0);
        ip = ip + 1;
        goto <D.19094>;
        <D.19127>:
        <D.19128>:
        <D.19129>:
        <D.19130>:
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        D.20225 = D.20105 + -10;
        D.20226 = (unsigned int) D.20225;
        store_local (&ctx, D.20226);
        ip = ip + 1;
        goto <D.19094>;
        <D.19131>:
        D.20209 = ip + 2;
        if (D.20209 > end) goto <D.20227>; else goto <D.20229>;
        <D.20229>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20227>; else goto <D.20228>;
        <D.20227>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20230 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20230;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20231 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20231;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20228>:
        D.20215 = ip + 1;
        D.20216 = *D.20215;
        D.20232 = (unsigned int) D.20216;
        store_local (&ctx, D.20232);
        ip = ip + 2;
        goto <D.19094>;
        <D.19133>:
        D.20209 = ip + 2;
        if (D.20209 > end) goto <D.20233>; else goto <D.20235>;
        <D.20235>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20233>; else goto <D.20234>;
        <D.20233>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20236 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20236;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20237 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20237;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20234>:
        D.20215 = ip + 1;
        D.20216 = *D.20215;
        D.20232 = (unsigned int) D.20216;
        store_arg (&ctx, D.20232);
        ip = ip + 2;
        goto <D.19094>;
        <D.19135>:
        <D.19136>:
        <D.19137>:
        <D.19138>:
        <D.19139>:
        <D.19140>:
        <D.19141>:
        <D.19142>:
        <D.19143>:
        <D.19144>:
        D.20238 = check_overflow (&ctx);
        if (D.20238 != 0) goto <D.20239>; else goto <D.20240>;
        <D.20239>:
        D.20241 = mono_defaults.int32_class;
        D.20242 = &D.20241->byval_arg;
        stack_push_val (&ctx, 1, D.20242);
        <D.20240>:
        ip = ip + 1;
        goto <D.19094>;
        <D.19145>:
        D.20209 = ip + 2;
        if (D.20209 > end) goto <D.20243>; else goto <D.20245>;
        <D.20245>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20243>; else goto <D.20244>;
        <D.20243>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20246 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20246;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20247 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20247;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20244>:
        D.20248 = check_overflow (&ctx);
        if (D.20248 != 0) goto <D.20249>; else goto <D.20250>;
        <D.20249>:
        D.20241 = mono_defaults.int32_class;
        D.20242 = &D.20241->byval_arg;
        stack_push_val (&ctx, 1, D.20242);
        <D.20250>:
        ip = ip + 2;
        goto <D.19094>;
        <D.19147>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20251>; else goto <D.20254>;
        <D.20254>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20251>; else goto <D.20252>;
        <D.20251>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20255 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20255;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20256 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20256;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20252>:
        D.20257 = check_overflow (&ctx);
        if (D.20257 != 0) goto <D.20258>; else goto <D.20259>;
        <D.20258>:
        D.20241 = mono_defaults.int32_class;
        D.20242 = &D.20241->byval_arg;
        stack_push_val (&ctx, 1, D.20242);
        <D.20259>:
        ip = ip + 5;
        goto <D.19094>;
        <D.19149>:
        D.20262 = ip + 9;
        if (D.20262 > end) goto <D.20260>; else goto <D.20263>;
        <D.20263>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967286) goto <D.20260>; else goto <D.20261>;
        <D.20260>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20264 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20264;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20265 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20265;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20261>:
        D.20266 = check_overflow (&ctx);
        if (D.20266 != 0) goto <D.20267>; else goto <D.20268>;
        <D.20267>:
        D.20269 = mono_defaults.int64_class;
        D.20270 = &D.20269->byval_arg;
        stack_push_val (&ctx, 2, D.20270);
        <D.20268>:
        ip = ip + 9;
        goto <D.19094>;
        <D.19151>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20271>; else goto <D.20273>;
        <D.20273>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20271>; else goto <D.20272>;
        <D.20271>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20274 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20274;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20275 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20275;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20272>:
        D.20276 = check_overflow (&ctx);
        if (D.20276 != 0) goto <D.20277>; else goto <D.20278>;
        <D.20277>:
        D.20279 = mono_defaults.double_class;
        D.20280 = &D.20279->byval_arg;
        stack_push_val (&ctx, 4, D.20280);
        <D.20278>:
        ip = ip + 5;
        goto <D.19094>;
        <D.19153>:
        D.20262 = ip + 9;
        if (D.20262 > end) goto <D.20281>; else goto <D.20283>;
        <D.20283>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967286) goto <D.20281>; else goto <D.20282>;
        <D.20281>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20284 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20284;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20285 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20285;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20282>:
        D.20286 = check_overflow (&ctx);
        if (D.20286 != 0) goto <D.20287>; else goto <D.20288>;
        <D.20287>:
        D.20279 = mono_defaults.double_class;
        D.20280 = &D.20279->byval_arg;
        stack_push_val (&ctx, 4, D.20280);
        <D.20288>:
        ip = ip + 9;
        goto <D.19094>;
        <D.19155>:
        D.20289 = check_overflow (&ctx);
        if (D.20289 != 0) goto <D.20290>; else goto <D.20291>;
        <D.20290>:
        D.20292 = mono_defaults.object_class;
        D.20293 = &D.20292->byval_arg;
        stack_push_val (&ctx, 1030, D.20293);
        <D.20291>:
        ip = ip + 1;
        goto <D.19094>;
        <D.19156>:
        <D.19157>:
        D.20209 = ip + 2;
        if (D.20209 > end) goto <D.20294>; else goto <D.20296>;
        <D.20296>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20294>; else goto <D.20295>;
        <D.20294>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20297 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20297;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20298 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20298;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20295>:
        D.20215 = ip + 1;
        D.20216 = *D.20215;
        D.20299 = (signed char) D.20216;
        D.20300 = (int) D.20299;
        D.20301 = D.20300 + 2;
        do_branch_op (&ctx, D.20301, &cmp_br_eq_op);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19094>;
        <D.19159>:
        <D.19160>:
        <D.19161>:
        <D.19162>:
        <D.19163>:
        <D.19164>:
        <D.19165>:
        <D.19166>:
        D.20209 = ip + 2;
        if (D.20209 > end) goto <D.20302>; else goto <D.20304>;
        <D.20304>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20302>; else goto <D.20303>;
        <D.20302>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20305 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20305;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20306 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20306;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20303>:
        D.20215 = ip + 1;
        D.20216 = *D.20215;
        D.20299 = (signed char) D.20216;
        D.20300 = (int) D.20299;
        D.20301 = D.20300 + 2;
        do_branch_op (&ctx, D.20301, &cmp_br_op);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19094>;
        <D.19168>:
        <D.19169>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20307>; else goto <D.20309>;
        <D.20309>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20307>; else goto <D.20308>;
        <D.20307>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20310 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20310;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20311 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20311;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20308>:
        D.20215 = ip + 1;
        D.20312 = mono_read32 (D.20215);
        D.20313 = (int) D.20312;
        D.20314 = D.20313 + 5;
        do_branch_op (&ctx, D.20314, &cmp_br_eq_op);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19094>;
        <D.19171>:
        <D.19172>:
        <D.19173>:
        <D.19174>:
        <D.19175>:
        <D.19176>:
        <D.19177>:
        <D.19178>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20315>; else goto <D.20317>;
        <D.20317>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20315>; else goto <D.20316>;
        <D.20315>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20318 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20318;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20319 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20319;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20316>:
        D.20215 = ip + 1;
        D.20320 = mono_read32 (D.20215);
        D.20321 = (int) D.20320;
        D.20322 = D.20321 + 5;
        do_branch_op (&ctx, D.20322, &cmp_br_op);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19094>;
        <D.19180>:
        <D.19181>:
        D.20209 = ip + 2;
        if (D.20209 > 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.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20326 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20326;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20327 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20327;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20324>:
        D.20215 = ip + 1;
        D.20216 = *D.20215;
        D.20232 = (unsigned int) D.20216;
        D.20104 = *ip;
        D.20328 = D.20104 == 18;
        D.20329 = (int) D.20328;
        push_local (&ctx, D.20232, D.20329);
        ip = ip + 2;
        goto <D.19094>;
        <D.19183>:
        {
          struct MonoVerifyInfoExtended * vinfo;

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

          D.20332 = check_underflow (&ctx, 1);
          if (D.20332 == 0) goto <D.19094>; else goto <D.20333>;
          <D.20333>:
          D.20334 = check_overflow (&ctx);
          if (D.20334 == 0) goto <D.19094>; else goto <D.20335>;
          <D.20335>:
          top = stack_push (&ctx);
          D.20336 = stack_peek (&ctx, 1);
          copy_stack_value (top, D.20336);
          ip = ip + 1;
          goto <D.19094>;
        }
        <D.19187>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20337>; else goto <D.20339>;
        <D.20339>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20337>; else goto <D.20338>;
        <D.20337>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20340 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20340;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20341 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20341;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20338>:
        D.20181 = ctx.eval.size;
        if (D.20181 != 0) goto <D.20342>; else goto <D.20343>;
        <D.20342>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20344 = monoeg_g_strdup_printf ("Eval stack must be empty in jmp at 0x%04x", ip_offset);
          vinfo->info.message = D.20344;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20345 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20345;
        }
        ctx.valid = 0;
        <D.20343>:
        D.20215 = ip + 1;
        token = mono_read32 (D.20215);
        D.19864 = ctx.header;
        D.20346 = in_any_block (D.19864, ip_offset);
        if (D.20346 != 0) goto <D.20347>; else goto <D.20348>;
        <D.20347>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20349 = monoeg_g_strdup_printf ("jmp cannot escape exception blocks at 0x%04x", ip_offset);
          vinfo->info.message = D.20349;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20350 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20350;
        }
        ctx.valid = 0;
        <D.20348>:
        D.19897 = ctx.verifiable;
        if (D.19897 != 0) goto <D.20351>; else goto <D.20353>;
        <D.20353>:
        D.19899 = ctx.level;
        D.19900 = D.19899 & 128;
        if (D.19900 != 0) goto <D.20351>; else goto <D.20352>;
        <D.20351>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20212 = ctx.ip_offset;
          D.20354 = monoeg_g_strdup_printf ("Intruction jmp is not verifiable at 0x%04x", D.20212);
          vinfo->info.message = D.20354;
          vinfo->exception_type = 4;
          D.19846 = ctx.list;
          D.20355 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20355;
        }
        ctx.verifiable = 0;
        D.19899 = ctx.level;
        D.19903 = D.19899 & 16;
        if (D.19903 != 0) goto <D.20356>; else goto <D.20357>;
        <D.20356>:
        ctx.valid = 0;
        <D.20357>:
        <D.20352>:
        ip = ip + 5;
        goto <D.19094>;
        <D.19192>:
        <D.19193>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20358>; else goto <D.20360>;
        <D.20360>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20358>; else goto <D.20359>;
        <D.20358>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20361 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20361;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20362 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20362;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20359>:
        D.20215 = ip + 1;
        D.20363 = mono_read32 (D.20215);
        D.20364 = (int) D.20363;
        D.20104 = *ip;
        D.20365 = D.20104 == 111;
        D.20366 = (int) D.20365;
        do_invoke_method (&ctx, D.20364, D.20366);
        ip = ip + 5;
        goto <D.19094>;
        <D.19195>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20367>; else goto <D.20369>;
        <D.20369>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20367>; else goto <D.20368>;
        <D.20367>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20370 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20370;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20371 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20371;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20368>:
        D.20215 = ip + 1;
        token = mono_read32 (D.20215);
        D.19897 = ctx.verifiable;
        if (D.19897 != 0) goto <D.20372>; else goto <D.20374>;
        <D.20374>:
        D.19899 = ctx.level;
        D.19900 = D.19899 & 128;
        if (D.19900 != 0) goto <D.20372>; else goto <D.20373>;
        <D.20372>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20212 = ctx.ip_offset;
          D.20375 = monoeg_g_strdup_printf ("Intruction calli is not verifiable at 0x%04x", D.20212);
          vinfo->info.message = D.20375;
          vinfo->exception_type = 4;
          D.19846 = ctx.list;
          D.20376 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20376;
        }
        ctx.verifiable = 0;
        D.19899 = ctx.level;
        D.19903 = D.19899 & 16;
        if (D.19903 != 0) goto <D.20377>; else goto <D.20378>;
        <D.20377>:
        ctx.valid = 0;
        <D.20378>:
        <D.20373>:
        ip = ip + 5;
        goto <D.19094>;
        <D.19198>:
        D.20209 = ip + 2;
        if (D.20209 > end) goto <D.20379>; else goto <D.20381>;
        <D.20381>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20379>; else goto <D.20380>;
        <D.20379>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20382 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20382;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20383 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20383;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20380>:
        D.20215 = ip + 1;
        D.20216 = *D.20215;
        D.20299 = (signed char) D.20216;
        D.20300 = (int) D.20299;
        D.20301 = D.20300 + 2;
        do_static_branch (&ctx, D.20301);
        need_merge = 1;
        ip = ip + 2;
        start = 1;
        goto <D.19094>;
        <D.19200>:
        <D.19201>:
        D.20209 = ip + 2;
        if (D.20209 > end) goto <D.20384>; else goto <D.20386>;
        <D.20386>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20384>; else goto <D.20385>;
        <D.20384>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20387 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20387;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20388 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20388;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20385>:
        D.20215 = ip + 1;
        D.20216 = *D.20215;
        D.20299 = (signed char) D.20216;
        D.20300 = (int) D.20299;
        D.20301 = D.20300 + 2;
        do_boolean_branch_op (&ctx, D.20301);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19094>;
        <D.19203>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20389>; else goto <D.20391>;
        <D.20391>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20389>; else goto <D.20390>;
        <D.20389>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20392 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20392;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20393 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20393;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20390>:
        D.20215 = ip + 1;
        D.20394 = mono_read32 (D.20215);
        D.20395 = (int) D.20394;
        D.20396 = D.20395 + 5;
        do_static_branch (&ctx, D.20396);
        need_merge = 1;
        ip = ip + 5;
        start = 1;
        goto <D.19094>;
        <D.19205>:
        <D.19206>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20397>; else goto <D.20399>;
        <D.20399>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20397>; else goto <D.20398>;
        <D.20397>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20400 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20400;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20401 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20401;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20398>:
        D.20215 = ip + 1;
        D.20402 = mono_read32 (D.20215);
        D.20403 = (int) D.20402;
        D.20404 = D.20403 + 5;
        do_boolean_branch_op (&ctx, D.20404);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19094>;
        <D.19208>:
        {
          guint32 entries;

          D.20253 = ip + 5;
          if (D.20253 > end) goto <D.20405>; else goto <D.20407>;
          <D.20407>:
          ip.23 = (unsigned int) ip;
          if (ip.23 > 4294967290) goto <D.20405>; else goto <D.20406>;
          <D.20405>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20104 = *ip;
            D.20105 = (int) D.20104;
            D.20212 = ctx.ip_offset;
            D.20408 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
            vinfo->info.message = D.20408;
            vinfo->exception_type = 3;
            D.19846 = ctx.list;
            D.20409 = monoeg_g_slist_prepend (D.19846, vinfo);
            ctx.list = D.20409;
          }
          ctx.valid = 0;
          goto <D.19094>;
          <D.20406>:
          D.20215 = ip + 1;
          entries = mono_read32 (D.20215);
          if (entries > 1073741823) goto <D.20410>; else goto <D.20411>;
          <D.20410>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20212 = ctx.ip_offset;
            D.20412 = monoeg_g_strdup_printf ("Too many switch entries %x at 0x%04x", entries, D.20212);
            vinfo->info.message = D.20412;
            vinfo->exception_type = 3;
            D.19846 = ctx.list;
            D.20413 = monoeg_g_slist_prepend (D.19846, vinfo);
            ctx.list = D.20413;
          }
          ctx.valid = 0;
          <D.20411>:
          ip = ip + 5;
          D.20416 = entries * 4;
          D.20417 = ip + D.20416;
          if (D.20417 > end) goto <D.20414>; else goto <D.20418>;
          <D.20418>:
          D.20416 = entries * 4;
          D.20419 = ~D.20416;
          ip.23 = (unsigned int) ip;
          if (D.20419 < ip.23) goto <D.20414>; else goto <D.20415>;
          <D.20414>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20104 = *ip;
            D.20105 = (int) D.20104;
            D.20212 = ctx.ip_offset;
            D.20420 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
            vinfo->info.message = D.20420;
            vinfo->exception_type = 3;
            D.19846 = ctx.list;
            D.20421 = monoeg_g_slist_prepend (D.19846, vinfo);
            ctx.list = D.20421;
          }
          ctx.valid = 0;
          goto <D.19094>;
          <D.20415>:
          entries.24 = (int) entries;
          do_switch (&ctx, entries.24, ip);
          D.20416 = entries * 4;
          ip = ip + D.20416;
          goto <D.19094>;
        }
        <D.19213>:
        <D.19214>:
        <D.19215>:
        <D.19216>:
        <D.19217>:
        <D.19218>:
        <D.19219>:
        <D.19220>:
        <D.19221>:
        <D.19222>:
        <D.19223>:
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        do_load_indirect (&ctx, D.20105);
        ip = ip + 1;
        goto <D.19094>;
        <D.19224>:
        <D.19225>:
        <D.19226>:
        <D.19227>:
        <D.19228>:
        <D.19229>:
        <D.19230>:
        <D.19231>:
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        do_store_indirect (&ctx, D.20105);
        ip = ip + 1;
        goto <D.19094>;
        <D.19232>:
        <D.19233>:
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        do_unary_math_op (&ctx, D.20105);
        ip = ip + 1;
        goto <D.19094>;
        <D.19234>:
        <D.19235>:
        <D.19236>:
        <D.19237>:
        <D.19238>:
        <D.19239>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19094>;
        <D.19240>:
        <D.19241>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19094>;
        <D.19242>:
        <D.19243>:
        <D.19244>:
        do_conversion (&ctx, 4);
        ip = ip + 1;
        goto <D.19094>;
        <D.19245>:
        <D.19246>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19094>;
        <D.19247>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20423>; else goto <D.20425>;
        <D.20425>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20423>; else goto <D.20424>;
        <D.20423>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20426 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20426;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20427 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20427;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20424>:
        D.20215 = ip + 1;
        D.20428 = mono_read32 (D.20215);
        D.20429 = (int) D.20428;
        do_cpobj (&ctx, D.20429);
        ip = ip + 5;
        goto <D.19094>;
        <D.19249>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20430>; else goto <D.20432>;
        <D.20432>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20430>; else goto <D.20431>;
        <D.20430>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20433 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20433;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20434 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20434;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20431>:
        D.20215 = ip + 1;
        D.20435 = mono_read32 (D.20215);
        D.20436 = (int) D.20435;
        do_ldobj_value (&ctx, D.20436);
        ip = ip + 5;
        goto <D.19094>;
        <D.19251>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20437>; else goto <D.20439>;
        <D.20439>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20437>; else goto <D.20438>;
        <D.20437>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20440 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20440;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20441 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20441;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20438>:
        D.20215 = ip + 1;
        D.20442 = mono_read32 (D.20215);
        do_ldstr (&ctx, D.20442);
        ip = ip + 5;
        goto <D.19094>;
        <D.19253>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20443>; else goto <D.20445>;
        <D.20445>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20443>; else goto <D.20444>;
        <D.20443>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20446 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20446;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20447 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20447;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20444>:
        D.20215 = ip + 1;
        D.20448 = mono_read32 (D.20215);
        D.20449 = (int) D.20448;
        do_newobj (&ctx, D.20449);
        ip = ip + 5;
        goto <D.19094>;
        <D.19255>:
        <D.19256>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20450>; else goto <D.20452>;
        <D.20452>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20450>; else goto <D.20451>;
        <D.20450>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20453 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20453;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20454 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20454;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20451>:
        D.20215 = ip + 1;
        D.20455 = mono_read32 (D.20215);
        D.20456 = (int) D.20455;
        D.20104 = *ip;
        if (D.20104 == 116) goto <D.20458>; else goto <D.20459>;
        <D.20458>:
        iftmp.25 = "castclass";
        goto <D.20460>;
        <D.20459>:
        iftmp.25 = "isinst";
        <D.20460>:
        do_cast (&ctx, D.20456, iftmp.25);
        ip = ip + 5;
        goto <D.19094>;
        <D.19258>:
        <D.19259>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20461 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.20461;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20462 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20462;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.19094>;
        <D.19261>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20463>; else goto <D.20465>;
        <D.20465>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20463>; else goto <D.20464>;
        <D.20463>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20466 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20466;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20467 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20467;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20464>:
        D.20215 = ip + 1;
        D.20468 = mono_read32 (D.20215);
        D.20469 = (int) D.20468;
        do_unbox_value (&ctx, D.20469);
        ip = ip + 5;
        goto <D.19094>;
        <D.19263>:
        do_throw (&ctx);
        start = 1;
        ip = ip + 1;
        goto <D.19094>;
        <D.19264>:
        <D.19265>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20470>; else goto <D.20472>;
        <D.20472>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20470>; else goto <D.20471>;
        <D.20470>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20473 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20473;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20474 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20474;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20471>:
        D.20215 = ip + 1;
        D.20475 = mono_read32 (D.20215);
        D.20476 = (int) D.20475;
        D.20104 = *ip;
        D.20477 = D.20104 == 124;
        D.20478 = (int) D.20477;
        do_push_field (&ctx, D.20476, D.20478);
        ip = ip + 5;
        goto <D.19094>;
        <D.19267>:
        <D.19268>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20479>; else goto <D.20481>;
        <D.20481>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20479>; else goto <D.20480>;
        <D.20479>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20482 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20482;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20483 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20483;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20480>:
        D.20215 = ip + 1;
        D.20484 = mono_read32 (D.20215);
        D.20485 = (int) D.20484;
        D.20104 = *ip;
        D.20486 = D.20104 == 127;
        D.20487 = (int) D.20486;
        do_push_static_field (&ctx, D.20485, D.20487);
        ip = ip + 5;
        goto <D.19094>;
        <D.19270>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20488>; else goto <D.20490>;
        <D.20490>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20488>; else goto <D.20489>;
        <D.20488>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20491 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20491;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20492 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20492;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20489>:
        D.20215 = ip + 1;
        D.20493 = mono_read32 (D.20215);
        D.20494 = (int) D.20493;
        do_store_field (&ctx, D.20494);
        ip = ip + 5;
        goto <D.19094>;
        <D.19272>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20495>; else goto <D.20497>;
        <D.20497>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20495>; else goto <D.20496>;
        <D.20495>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20498 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20498;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20499 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20499;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20496>:
        D.20215 = ip + 1;
        D.20500 = mono_read32 (D.20215);
        D.20501 = (int) D.20500;
        do_store_static_field (&ctx, D.20501);
        ip = ip + 5;
        goto <D.19094>;
        <D.19274>:
        D.20253 = ip + 5;
        if (D.20253 > 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.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20505 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20505;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20506 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20506;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20503>:
        D.20215 = ip + 1;
        D.20507 = mono_read32 (D.20215);
        D.20508 = (int) D.20507;
        do_stobj (&ctx, D.20508);
        ip = ip + 5;
        goto <D.19094>;
        <D.19276>:
        <D.19277>:
        <D.19278>:
        <D.19279>:
        <D.19280>:
        <D.19281>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19094>;
        <D.19282>:
        <D.19283>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19094>;
        <D.19284>:
        <D.19285>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19094>;
        <D.19286>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20509>; else goto <D.20511>;
        <D.20511>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20509>; else goto <D.20510>;
        <D.20509>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20512 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20512;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20513 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20513;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20510>:
        D.20215 = ip + 1;
        D.20514 = mono_read32 (D.20215);
        D.20515 = (int) D.20514;
        do_box_value (&ctx, D.20515);
        ip = ip + 5;
        goto <D.19094>;
        <D.19288>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20516>; else goto <D.20518>;
        <D.20518>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20516>; else goto <D.20517>;
        <D.20516>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20519 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20519;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20520 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20520;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20517>:
        D.20215 = ip + 1;
        D.20521 = mono_read32 (D.20215);
        D.20522 = (int) D.20521;
        do_newarr (&ctx, D.20522);
        ip = ip + 5;
        goto <D.19094>;
        <D.19290>:
        do_ldlen (&ctx);
        ip = ip + 1;
        goto <D.19094>;
        <D.19291>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20523>; else goto <D.20525>;
        <D.20525>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20523>; else goto <D.20524>;
        <D.20523>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20526 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20526;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20527 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20527;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20524>:
        D.20215 = ip + 1;
        D.20528 = mono_read32 (D.20215);
        D.20529 = (int) D.20528;
        do_ldelema (&ctx, D.20529);
        ip = ip + 5;
        goto <D.19094>;
        <D.19293>:
        <D.19294>:
        <D.19295>:
        <D.19296>:
        <D.19297>:
        <D.19298>:
        <D.19299>:
        <D.19300>:
        <D.19301>:
        <D.19302>:
        <D.19303>:
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        do_ldelem (&ctx, D.20105, 0);
        ip = ip + 1;
        goto <D.19094>;
        <D.19304>:
        <D.19305>:
        <D.19306>:
        <D.19307>:
        <D.19308>:
        <D.19309>:
        <D.19310>:
        <D.19311>:
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        do_stelem (&ctx, D.20105, 0);
        ip = ip + 1;
        goto <D.19094>;
        <D.19312>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20530>; else goto <D.20532>;
        <D.20532>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20530>; else goto <D.20531>;
        <D.20530>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20533 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20533;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20534 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20534;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20531>:
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        D.20215 = ip + 1;
        D.20535 = mono_read32 (D.20215);
        D.20536 = (int) D.20535;
        do_ldelem (&ctx, D.20105, D.20536);
        ip = ip + 5;
        goto <D.19094>;
        <D.19314>:
        D.20253 = ip + 5;
        if (D.20253 > 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.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20540 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20540;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20541 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20541;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20538>:
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        D.20215 = ip + 1;
        D.20542 = mono_read32 (D.20215);
        D.20543 = (int) D.20542;
        do_stelem (&ctx, D.20105, D.20543);
        ip = ip + 5;
        goto <D.19094>;
        <D.19316>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20544>; else goto <D.20546>;
        <D.20546>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20544>; else goto <D.20545>;
        <D.20544>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20547 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20547;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20548 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20548;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20545>:
        D.20215 = ip + 1;
        D.20549 = mono_read32 (D.20215);
        D.20550 = (int) D.20549;
        do_unbox_any (&ctx, D.20550);
        ip = ip + 5;
        goto <D.19094>;
        <D.19318>:
        <D.19319>:
        <D.19320>:
        <D.19321>:
        <D.19322>:
        <D.19323>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19094>;
        <D.19324>:
        <D.19325>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19094>;
        <D.19326>:
        <D.19327>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19094>;
        <D.19328>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20551>; else goto <D.20553>;
        <D.20553>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20551>; else goto <D.20552>;
        <D.20551>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20554 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20554;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20555 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20555;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20552>:
        D.20215 = ip + 1;
        D.20556 = mono_read32 (D.20215);
        D.20557 = (int) D.20556;
        do_refanyval (&ctx, D.20557);
        ip = ip + 5;
        goto <D.19094>;
        <D.19330>:
        do_ckfinite (&ctx);
        ip = ip + 1;
        goto <D.19094>;
        <D.19331>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20558>; else goto <D.20560>;
        <D.20560>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20558>; else goto <D.20559>;
        <D.20558>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20561 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20561;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20562 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20562;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20559>:
        D.20215 = ip + 1;
        D.20563 = mono_read32 (D.20215);
        D.20564 = (int) D.20563;
        do_mkrefany (&ctx, D.20564);
        ip = ip + 5;
        goto <D.19094>;
        <D.19333>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20565>; else goto <D.20567>;
        <D.20567>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20565>; else goto <D.20566>;
        <D.20565>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20568 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20568;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20569 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20569;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20566>:
        D.20215 = ip + 1;
        D.20570 = mono_read32 (D.20215);
        D.20571 = (int) D.20570;
        do_load_token (&ctx, D.20571);
        ip = ip + 5;
        goto <D.19094>;
        <D.19335>:
        D.19864 = ctx.header;
        D.20572 = is_correct_endfinally (D.19864, ip_offset);
        if (D.20572 == 0) goto <D.20573>; else goto <D.20574>;
        <D.20573>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20212 = ctx.ip_offset;
          D.20575 = monoeg_g_strdup_printf ("endfinally must be used inside a finally/fault handler at 0x%04x", D.20212);
          vinfo->info.message = D.20575;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20576 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20576;
        }
        ctx.valid = 0;
        <D.20574>:
        ctx.eval.size = 0;
        start = 1;
        ip = ip + 1;
        goto <D.19094>;
        <D.19337>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20577>; else goto <D.20579>;
        <D.20579>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20577>; else goto <D.20578>;
        <D.20577>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20580 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20580;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20581 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20581;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20578>:
        D.20215 = ip + 1;
        D.20582 = mono_read32 (D.20215);
        D.20583 = D.20582 + 5;
        D.20584 = (int) D.20583;
        do_leave (&ctx, D.20584);
        ip = ip + 5;
        start = 1;
        need_merge = 1;
        goto <D.19094>;
        <D.19339>:
        D.20209 = ip + 2;
        if (D.20209 > end) goto <D.20585>; else goto <D.20587>;
        <D.20587>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20585>; else goto <D.20586>;
        <D.20585>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20588 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20588;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20589 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20589;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20586>:
        D.20215 = ip + 1;
        D.20216 = *D.20215;
        D.20299 = (signed char) D.20216;
        D.20300 = (int) D.20299;
        D.20301 = D.20300 + 2;
        do_leave (&ctx, D.20301);
        ip = ip + 2;
        start = 1;
        need_merge = 1;
        goto <D.19094>;
        <D.19341>:
        D.20209 = ip + 2;
        if (D.20209 > end) goto <D.20590>; else goto <D.20592>;
        <D.20592>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20590>; else goto <D.20591>;
        <D.20590>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20593 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20593;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20594 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20594;
        }
        ctx.valid = 0;
        goto <D.19094>;
        <D.20591>:
        ip = ip + 1;
        D.20104 = *ip;
        D.20105 = (int) D.20104;
        switch (D.20105) <default: <D.19392>, case 0: <D.19353>, case 1: <D.19346>, case 2: <D.19347>, case 3: <D.19348>, case 4: <D.19349>, case 5: <D.19350>, case 6: <D.19355>, case 7: <D.19357>, case 8: <D.19366>, case 9: <D.19359>, case 10: <D.19360>, case 11: <D.19351>, case 12: <D.19362>, case 13: <D.19363>, case 14: <D.19343>, case 15: <D.19365>, case 16: <D.19367>, case 17: <D.19371>, case 18: <D.19372>, case 19: <D.19374>, case 20: <D.19375>, case 21: <D.19377>, case 22: <D.19379>, case 23: <D.19382>, case 24: <D.19384>, case 25: <D.19386>, case 26: <D.19387>, case 27: <D.19369>, case 28: <D.19389>, case 29: <D.19391>, case 30: <D.19381>, case 34: <D.19368>>
        <D.19343>:
        D.20597 = ip + 3;
        if (D.20597 > end) goto <D.20595>; else goto <D.20598>;
        <D.20598>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967292) goto <D.20595>; else goto <D.20596>;
        <D.20595>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20599 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20599;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20600 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20600;
        }
        ctx.valid = 0;
        goto <D.19345>;
        <D.20596>:
        D.20215 = ip + 1;
        D.20601 = mono_read16 (D.20215);
        D.20602 = (unsigned int) D.20601;
        store_local (&ctx, D.20602);
        ip = ip + 3;
        goto <D.19345>;
        <D.19346>:
        D.20104 = *ip;
        D.20603 = (unsigned int) D.20104;
        do_cmp_op (&ctx, &cmp_br_eq_op, D.20603);
        ip = ip + 1;
        goto <D.19345>;
        <D.19347>:
        <D.19348>:
        <D.19349>:
        <D.19350>:
        D.20104 = *ip;
        D.20603 = (unsigned int) D.20104;
        do_cmp_op (&ctx, &cmp_br_op, D.20603);
        ip = ip + 1;
        goto <D.19345>;
        <D.19351>:
        D.20597 = ip + 3;
        if (D.20597 > end) goto <D.20604>; else goto <D.20606>;
        <D.20606>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967292) goto <D.20604>; else goto <D.20605>;
        <D.20604>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20607 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20607;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20608 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20608;
        }
        ctx.valid = 0;
        goto <D.19345>;
        <D.20605>:
        D.20215 = ip + 1;
        D.20609 = mono_read16 (D.20215);
        D.20610 = (unsigned int) D.20609;
        store_arg (&ctx, D.20610);
        ip = ip + 3;
        goto <D.19345>;
        <D.19353>:
        D.20611 = check_overflow (&ctx);
        if (D.20611 == 0) goto <D.19345>; else goto <D.20612>;
        <D.20612>:
        D.19842 = ctx.signature;
        D.19857 = BIT_FIELD_REF <*D.19842, 32, 64>;
        D.20613 = D.19857 & 4128768;
        if (D.20613 != 327680) goto <D.20614>; else goto <D.20615>;
        <D.20614>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20212 = ctx.ip_offset;
          D.20616 = monoeg_g_strdup_printf ("Cannot use arglist on method without VARGARG calling convention at 0x%04x", D.20212);
          vinfo->info.message = D.20616;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20617 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20617;
        }
        ctx.valid = 0;
        <D.20615>:
        D.20618 = stack_push (&ctx);
        D.20619 = mono_defaults.argumenthandle_class;
        D.20620 = &D.20619->byval_arg;
        set_stack_value (&ctx, D.20618, D.20620, 0);
        ip = ip + 1;
        goto <D.19345>;
        <D.19355>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20621>; else goto <D.20623>;
        <D.20623>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20621>; else goto <D.20622>;
        <D.20621>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20624 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20624;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20625 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20625;
        }
        ctx.valid = 0;
        goto <D.19345>;
        <D.20622>:
        D.20215 = ip + 1;
        D.20626 = mono_read32 (D.20215);
        do_load_function_ptr (&ctx, D.20626, 0);
        ip = ip + 5;
        goto <D.19345>;
        <D.19357>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20627>; else goto <D.20629>;
        <D.20629>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20627>; else goto <D.20628>;
        <D.20627>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20630 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20630;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20631 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20631;
        }
        ctx.valid = 0;
        goto <D.19345>;
        <D.20628>:
        D.20215 = ip + 1;
        D.20632 = mono_read32 (D.20215);
        do_load_function_ptr (&ctx, D.20632, 1);
        ip = ip + 5;
        goto <D.19345>;
        <D.19359>:
        <D.19360>:
        D.20597 = ip + 3;
        if (D.20597 > end) goto <D.20633>; else goto <D.20635>;
        <D.20635>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967292) goto <D.20633>; else goto <D.20634>;
        <D.20633>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20636 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20636;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20637 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20637;
        }
        ctx.valid = 0;
        goto <D.19345>;
        <D.20634>:
        D.20215 = ip + 1;
        D.20638 = mono_read16 (D.20215);
        D.20639 = (unsigned int) D.20638;
        D.20104 = *ip;
        D.20640 = D.20104 == 10;
        D.20641 = (int) D.20640;
        push_arg (&ctx, D.20639, D.20641);
        ip = ip + 3;
        goto <D.19345>;
        <D.19362>:
        <D.19363>:
        D.20597 = ip + 3;
        if (D.20597 > end) goto <D.20642>; else goto <D.20644>;
        <D.20644>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967292) goto <D.20642>; else goto <D.20643>;
        <D.20642>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20645 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20645;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20646 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20646;
        }
        ctx.valid = 0;
        goto <D.19345>;
        <D.20643>:
        D.20215 = ip + 1;
        D.20647 = mono_read16 (D.20215);
        D.20648 = (unsigned int) D.20647;
        D.20104 = *ip;
        D.20649 = D.20104 == 13;
        D.20650 = (int) D.20649;
        push_local (&ctx, D.20648, D.20650);
        ip = ip + 3;
        goto <D.19345>;
        <D.19365>:
        do_localloc (&ctx);
        ip = ip + 1;
        goto <D.19345>;
        <D.19366>:
        <D.19367>:
        <D.19368>:
        <D.19369>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20651 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.20651;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20652 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20652;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.19345>;
        <D.19371>:
        do_endfilter (&ctx);
        start = 1;
        ip = ip + 1;
        goto <D.19345>;
        <D.19372>:
        D.20209 = ip + 2;
        if (D.20209 > end) goto <D.20653>; else goto <D.20655>;
        <D.20655>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20653>; else goto <D.20654>;
        <D.20653>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20656 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20656;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20657 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20657;
        }
        ctx.valid = 0;
        goto <D.19345>;
        <D.20654>:
        prefix = prefix | 1;
        ip = ip + 2;
        goto <D.19345>;
        <D.19374>:
        prefix = prefix | 2;
        ip = ip + 1;
        goto <D.19345>;
        <D.19375>:
        prefix = prefix | 4;
        ip = ip + 1;
        if (ip < end) goto <D.20658>; else goto <D.20659>;
        <D.20658>:
        D.20104 = *ip;
        D.20660 = D.20104 + 216;
        if (D.20660 > 1) goto <D.20661>; else goto <D.20662>;
        <D.20661>:
        D.20104 = *ip;
        if (D.20104 != 111) goto <D.20663>; else goto <D.20664>;
        <D.20663>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20665 = monoeg_g_strdup_printf ("tail prefix must be used only with call opcodes at 0x%04x", ip_offset);
          vinfo->info.message = D.20665;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20666 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20666;
        }
        ctx.valid = 0;
        <D.20664>:
        <D.20662>:
        <D.20659>:
        goto <D.19345>;
        <D.19377>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20667>; else goto <D.20669>;
        <D.20669>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20667>; else goto <D.20668>;
        <D.20667>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20670 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20670;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20671 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20671;
        }
        ctx.valid = 0;
        goto <D.19345>;
        <D.20668>:
        D.20215 = ip + 1;
        D.20672 = mono_read32 (D.20215);
        D.20673 = (int) D.20672;
        do_initobj (&ctx, D.20673);
        ip = ip + 5;
        goto <D.19345>;
        <D.19379>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20674>; else goto <D.20676>;
        <D.20676>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20674>; else goto <D.20675>;
        <D.20674>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20677 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20677;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20678 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20678;
        }
        ctx.valid = 0;
        goto <D.19345>;
        <D.20675>:
        D.20215 = ip + 1;
        D.20679 = mono_read32 (D.20215);
        D.20680 = (int) D.20679;
        D.20681 = get_boxable_mono_type (&ctx, D.20680, "constrained.");
        ctx.constrained_type = D.20681;
        prefix = prefix | 8;
        ip = ip + 5;
        goto <D.19345>;
        <D.19381>:
        prefix = prefix | 16;
        ip = ip + 1;
        goto <D.19345>;
        <D.19382>:
        D.20682 = ctx.prefix_set;
        D.20683 = D.20682 & 4294967292;
        ctx.prefix_set = D.20683;
        D.20684 = check_underflow (&ctx, 3);
        if (D.20684 == 0) goto <D.19345>; else goto <D.20685>;
        <D.20685>:
        D.19897 = ctx.verifiable;
        if (D.19897 != 0) goto <D.20686>; else goto <D.20688>;
        <D.20688>:
        D.19899 = ctx.level;
        D.19900 = D.19899 & 128;
        if (D.19900 != 0) goto <D.20686>; else goto <D.20687>;
        <D.20686>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20212 = ctx.ip_offset;
          D.20689 = monoeg_g_strdup_printf ("Instruction cpblk is not verifiable at 0x%04x", D.20212);
          vinfo->info.message = D.20689;
          vinfo->exception_type = 4;
          D.19846 = ctx.list;
          D.20690 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20690;
        }
        ctx.verifiable = 0;
        D.19899 = ctx.level;
        D.19903 = D.19899 & 16;
        if (D.19903 != 0) goto <D.20691>; else goto <D.20692>;
        <D.20691>:
        ctx.valid = 0;
        <D.20692>:
        <D.20687>:
        ip = ip + 1;
        goto <D.19345>;
        <D.19384>:
        D.20682 = ctx.prefix_set;
        D.20683 = D.20682 & 4294967292;
        ctx.prefix_set = D.20683;
        D.20693 = check_underflow (&ctx, 3);
        if (D.20693 == 0) goto <D.19345>; else goto <D.20694>;
        <D.20694>:
        D.19897 = ctx.verifiable;
        if (D.19897 != 0) goto <D.20695>; else goto <D.20697>;
        <D.20697>:
        D.19899 = ctx.level;
        D.19900 = D.19899 & 128;
        if (D.19900 != 0) goto <D.20695>; else goto <D.20696>;
        <D.20695>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20212 = ctx.ip_offset;
          D.20698 = monoeg_g_strdup_printf ("Instruction initblk is not verifiable at 0x%04x", D.20212);
          vinfo->info.message = D.20698;
          vinfo->exception_type = 4;
          D.19846 = ctx.list;
          D.20699 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20699;
        }
        ctx.verifiable = 0;
        D.19899 = ctx.level;
        D.19903 = D.19899 & 16;
        if (D.19903 != 0) goto <D.20700>; else goto <D.20701>;
        <D.20700>:
        ctx.valid = 0;
        <D.20701>:
        <D.20696>:
        ip = ip + 1;
        goto <D.19345>;
        <D.19386>:
        ip = ip + 2;
        goto <D.19345>;
        <D.19387>:
        D.19864 = ctx.header;
        D.20702 = is_correct_rethrow (D.19864, ip_offset);
        if (D.20702 == 0) goto <D.20703>; else goto <D.20704>;
        <D.20703>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20212 = ctx.ip_offset;
          D.20705 = monoeg_g_strdup_printf ("rethrow must be used inside a catch handler at 0x%04x", D.20212);
          vinfo->info.message = D.20705;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20706 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20706;
        }
        ctx.valid = 0;
        <D.20704>:
        ctx.eval.size = 0;
        start = 1;
        ip = ip + 1;
        goto <D.19345>;
        <D.19389>:
        D.20253 = ip + 5;
        if (D.20253 > end) goto <D.20707>; else goto <D.20709>;
        <D.20709>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20707>; else goto <D.20708>;
        <D.20707>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20710 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20710;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20711 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20711;
        }
        ctx.valid = 0;
        goto <D.19345>;
        <D.20708>:
        D.20215 = ip + 1;
        D.20712 = mono_read32 (D.20215);
        D.20713 = (int) D.20712;
        do_sizeof (&ctx, D.20713);
        ip = ip + 5;
        goto <D.19345>;
        <D.19391>:
        do_refanytype (&ctx);
        ip = ip + 1;
        goto <D.19345>;
        <D.19392>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20714 = monoeg_g_strdup_printf ("Invalid instruction FE %x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20714;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20715 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20715;
        }
        ctx.valid = 0;
        ip = ip + 1;
        <D.19345>:
        goto <D.19094>;
        <D.19394>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20104 = *ip;
          D.20105 = (int) D.20104;
          D.20212 = ctx.ip_offset;
          D.20716 = monoeg_g_strdup_printf ("Invalid instruction %x at 0x%04x", D.20105, D.20212);
          vinfo->info.message = D.20716;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20717 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20717;
        }
        ctx.valid = 0;
        ip = ip + 1;
        <D.19094>:
        if (prefix != 0) goto <D.20718>; else goto <D.20719>;
        <D.20718>:
        D.20682 = ctx.prefix_set;
        if (D.20682 == 0) goto <D.20720>; else goto <D.20721>;
        <D.20720>:
        D.19881 = ctx.code;
        D.20212 = ctx.ip_offset;
        D.20722 = D.20212 * 12;
        D.20723 = D.19881 + D.20722;
        D.19881 = ctx.code;
        D.20212 = ctx.ip_offset;
        D.20722 = D.20212 * 12;
        D.20723 = D.19881 + D.20722;
        D.20724 = D.20723->flags;
        D.20725 = D.20724 | 1;
        D.20723->flags = D.20725;
        <D.20721>:
        D.20682 = ctx.prefix_set;
        D.20726 = D.20682 | prefix;
        ctx.prefix_set = D.20726;
        ctx.has_flags = 1;
        prefix = 0;
        goto <D.20727>;
        <D.20719>:
        D.20728 = ctx.has_flags;
        if (D.20728 == 0) goto <D.20729>; else goto <D.20730>;
        <D.20729>:
        D.19881 = ctx.code;
        D.20212 = ctx.ip_offset;
        D.20722 = D.20212 * 12;
        D.20723 = D.19881 + D.20722;
        D.19881 = ctx.code;
        D.20212 = ctx.ip_offset;
        D.20722 = D.20212 * 12;
        D.20723 = D.19881 + D.20722;
        D.20724 = D.20723->flags;
        D.20725 = D.20724 | 1;
        D.20723->flags = D.20725;
        <D.20730>:
        D.20682 = ctx.prefix_set;
        D.20731 = D.20682 & 8;
        if (D.20731 != 0) goto <D.20732>; else goto <D.20733>;
        <D.20732>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20212 = ctx.ip_offset;
          D.20734 = monoeg_g_strdup_printf ("Invalid instruction after constrained prefix at 0x%04x", D.20212);
          vinfo->info.message = D.20734;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20735 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20735;
        }
        ctx.valid = 0;
        <D.20733>:
        D.20682 = ctx.prefix_set;
        D.20736 = D.20682 & 16;
        if (D.20736 != 0) goto <D.20737>; else goto <D.20738>;
        <D.20737>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20212 = ctx.ip_offset;
          D.20739 = monoeg_g_strdup_printf ("Invalid instruction after readonly prefix at 0x%04x", D.20212);
          vinfo->info.message = D.20739;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20740 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20740;
        }
        ctx.valid = 0;
        <D.20738>:
        D.20682 = ctx.prefix_set;
        D.20741 = D.20682 & 2;
        if (D.20741 != 0) goto <D.20742>; else goto <D.20743>;
        <D.20742>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20212 = ctx.ip_offset;
          D.20744 = monoeg_g_strdup_printf ("Invalid instruction after volatile prefix at 0x%04x", D.20212);
          vinfo->info.message = D.20744;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20745 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20745;
        }
        ctx.valid = 0;
        <D.20743>:
        D.20682 = ctx.prefix_set;
        D.20746 = D.20682 & 1;
        if (D.20746 != 0) goto <D.20747>; else goto <D.20748>;
        <D.20747>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20212 = ctx.ip_offset;
          D.20749 = monoeg_g_strdup_printf ("Invalid instruction after unaligned prefix at 0x%04x", D.20212);
          vinfo->info.message = D.20749;
          vinfo->exception_type = 3;
          D.19846 = ctx.list;
          D.20750 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20750;
        }
        ctx.valid = 0;
        <D.20748>:
        prefix = 0;
        ctx.prefix_set = prefix;
        ctx.has_flags = 0;
        <D.20727>:
      }
      <D.19090>:
      if (ip < end) goto <D.20751>; else goto <D.19091>;
      <D.20751>:
      D.19877 = ctx.valid;
      if (D.19877 != 0) goto <D.19400>; else goto <D.19091>;
      <D.19091>:
      if (ip != end) goto <D.20752>; else goto <D.20754>;
      <D.20754>:
      if (start == 0) goto <D.20752>; else goto <D.20753>;
      <D.20752>:
      D.19897 = ctx.verifiable;
      if (D.19897 != 0) goto <D.20755>; else goto <D.20756>;
      <D.20755>:
      D.19846 = ctx.list;
      if (D.19846 == 0B) goto <D.20757>; else goto <D.20758>;
      <D.20757>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.20759 = monoeg_g_strdup_printf ("Run ahead of method code at 0x%04x", ip_offset);
        vinfo->info.message = D.20759;
        vinfo->exception_type = 3;
        D.19846 = ctx.list;
        D.20760 = monoeg_g_slist_prepend (D.19846, vinfo);
        ctx.list = D.20760;
      }
      ctx.valid = 0;
      <D.20758>:
      <D.20756>:
      <D.20753>:
      i = 0;
      goto <D.19407>;
      <D.19406>:
      D.19881 = ctx.code;
      i.12 = (unsigned int) i;
      D.20761 = i.12 * 12;
      D.20762 = D.19881 + D.20761;
      D.20763 = D.20762->flags;
      D.20764 = (int) D.20763;
      D.20765 = D.20764 & 2;
      if (D.20765 != 0) goto <D.20766>; else goto <D.20767>;
      <D.20766>:
      D.19881 = ctx.code;
      i.12 = (unsigned int) i;
      D.20761 = i.12 * 12;
      D.20762 = D.19881 + D.20761;
      D.20763 = D.20762->flags;
      D.20764 = (int) D.20763;
      D.20768 = D.20764 & 1;
      if (D.20768 == 0) goto <D.20769>; else goto <D.20770>;
      <D.20769>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.20771 = monoeg_g_strdup_printf ("Branch or exception block target middle of intruction at 0x%04x", i);
        vinfo->info.message = D.20771;
        vinfo->exception_type = 3;
        D.19846 = ctx.list;
        D.20772 = monoeg_g_slist_prepend (D.19846, vinfo);
        ctx.list = D.20772;
      }
      ctx.valid = 0;
      <D.20770>:
      D.19881 = ctx.code;
      i.12 = (unsigned int) i;
      D.20761 = i.12 * 12;
      D.20762 = D.19881 + D.20761;
      D.20763 = D.20762->flags;
      D.20764 = (int) D.20763;
      D.20773 = D.20764 & 16;
      if (D.20773 != 0) goto <D.20774>; else goto <D.20775>;
      <D.20774>:
      D.19897 = ctx.verifiable;
      if (D.19897 != 0) goto <D.20776>; else goto <D.20778>;
      <D.20778>:
      D.19899 = ctx.level;
      D.19900 = D.19899 & 128;
      if (D.19900 != 0) goto <D.20776>; else goto <D.20777>;
      <D.20776>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.20779 = monoeg_g_strdup_printf ("Branch to delegate code sequence at 0x%04x", i);
        vinfo->info.message = D.20779;
        vinfo->exception_type = 4;
        D.19846 = ctx.list;
        D.20780 = monoeg_g_slist_prepend (D.19846, vinfo);
        ctx.list = D.20780;
      }
      ctx.verifiable = 0;
      D.19899 = ctx.level;
      D.19903 = D.19899 & 16;
      if (D.19903 != 0) goto <D.20781>; else goto <D.20782>;
      <D.20781>:
      ctx.valid = 0;
      <D.20782>:
      <D.20777>:
      <D.20775>:
      <D.20767>:
      D.19881 = ctx.code;
      i.12 = (unsigned int) i;
      D.20761 = i.12 * 12;
      D.20762 = D.19881 + D.20761;
      D.20763 = D.20762->flags;
      D.20764 = (int) D.20763;
      D.20783 = D.20764 & 32;
      if (D.20783 != 0) goto <D.20784>; else goto <D.20785>;
      <D.20784>:
      D.20786 = ctx.has_this_store;
      if (D.20786 != 0) goto <D.20787>; else goto <D.20788>;
      <D.20787>:
      D.19897 = ctx.verifiable;
      if (D.19897 != 0) goto <D.20789>; else goto <D.20791>;
      <D.20791>:
      D.19899 = ctx.level;
      D.19900 = D.19899 & 128;
      if (D.19900 != 0) goto <D.20789>; else goto <D.20790>;
      <D.20789>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.20792 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function in method with stdarg 0 at  0x%04x", i);
        vinfo->info.message = D.20792;
        vinfo->exception_type = 4;
        D.19846 = ctx.list;
        D.20793 = monoeg_g_slist_prepend (D.19846, vinfo);
        ctx.list = D.20793;
      }
      ctx.verifiable = 0;
      D.19899 = ctx.level;
      D.19903 = D.19899 & 16;
      if (D.19903 != 0) goto <D.20794>; else goto <D.20795>;
      <D.20794>:
      ctx.valid = 0;
      <D.20795>:
      <D.20790>:
      <D.20788>:
      <D.20785>:
      D.19881 = ctx.code;
      i.12 = (unsigned int) i;
      D.20761 = i.12 * 12;
      D.20762 = D.19881 + D.20761;
      D.20763 = D.20762->flags;
      D.20764 = (int) D.20763;
      D.20796 = D.20764 & 64;
      if (D.20796 != 0) goto <D.20797>; else goto <D.20798>;
      <D.20797>:
      D.20786 = ctx.has_this_store;
      if (D.20786 != 0) goto <D.20799>; else goto <D.20800>;
      <D.20799>:
      D.19897 = ctx.verifiable;
      if (D.19897 != 0) goto <D.20801>; else goto <D.20803>;
      <D.20803>:
      D.19899 = ctx.level;
      D.19900 = D.19899 & 128;
      if (D.19900 != 0) goto <D.20801>; else goto <D.20802>;
      <D.20801>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.20804 = 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.20804;
        vinfo->exception_type = 4;
        D.19846 = ctx.list;
        D.20805 = monoeg_g_slist_prepend (D.19846, vinfo);
        ctx.list = D.20805;
      }
      ctx.verifiable = 0;
      D.19899 = ctx.level;
      D.19903 = D.19899 & 16;
      if (D.19903 != 0) goto <D.20806>; else goto <D.20807>;
      <D.20806>:
      ctx.valid = 0;
      <D.20807>:
      <D.20802>:
      <D.20800>:
      <D.20798>:
      i = i + 1;
      <D.19407>:
      D.19987 = ctx.code_size;
      if (D.19987 > i) goto <D.20808>; else goto <D.19408>;
      <D.20808>:
      i.26 = (unsigned int) i;
      if (i.26 < ip_offset) goto <D.19406>; else goto <D.19408>;
      <D.19408>:
      D.20810 = ctx.method;
      D.20811 = mono_method_is_constructor (D.20810);
      if (D.20811 != 0) goto <D.20812>; else goto <D.20813>;
      <D.20812>:
      D.20814 = ctx.super_ctor_called;
      if (D.20814 == 0) goto <D.20815>; else goto <D.20816>;
      <D.20815>:
      D.20810 = ctx.method;
      D.20817 = D.20810->klass;
      D.20818 = BIT_FIELD_REF <*D.20817, 32, 160>;
      D.20819 = D.20818 & 8;
      if (D.20819 == 0) goto <D.20820>; else goto <D.20821>;
      <D.20820>:
      D.20810 = ctx.method;
      D.20817 = D.20810->klass;
      D.20292 = mono_defaults.object_class;
      if (D.20817 != D.20292) goto <D.20822>; else goto <D.20823>;
      <D.20822>:
      {
        char * method_name;
        char * type;

        D.20810 = ctx.method;
        method_name = mono_method_full_name (D.20810, 1);
        D.20810 = ctx.method;
        D.20817 = D.20810->klass;
        type = mono_type_get_full_name (D.20817);
        D.20810 = ctx.method;
        D.20817 = D.20810->klass;
        D.20826 = D.20817->parent;
        if (D.20826 != 0B) goto <D.20827>; else goto <D.20824>;
        <D.20827>:
        D.20810 = ctx.method;
        D.20817 = D.20810->klass;
        D.20826 = D.20817->parent;
        D.20828 = D.20826->exception_type;
        if (D.20828 != 0) goto <D.20829>; else goto <D.20824>;
        <D.20829>:
        D.19897 = ctx.verifiable;
        if (D.19897 != 0) goto <D.20830>; else goto <D.20832>;
        <D.20832>:
        D.19899 = ctx.level;
        D.19900 = D.19899 & 128;
        if (D.19900 != 0) goto <D.20830>; else goto <D.20831>;
        <D.20830>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20833 = 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.20833;
          vinfo->exception_type = 4;
          D.19846 = ctx.list;
          D.20834 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20834;
        }
        ctx.verifiable = 0;
        D.19899 = ctx.level;
        D.19903 = D.19899 & 16;
        if (D.19903 != 0) goto <D.20835>; else goto <D.20836>;
        <D.20835>:
        ctx.valid = 0;
        <D.20836>:
        <D.20831>:
        goto <D.20825>;
        <D.20824>:
        D.19897 = ctx.verifiable;
        if (D.19897 != 0) goto <D.20837>; else goto <D.20839>;
        <D.20839>:
        D.19899 = ctx.level;
        D.19900 = D.19899 & 128;
        if (D.19900 != 0) goto <D.20837>; else goto <D.20838>;
        <D.20837>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20840 = monoeg_g_strdup_printf ("Constructor %s for type %s not calling base type ctor.", method_name, type);
          vinfo->info.message = D.20840;
          vinfo->exception_type = 4;
          D.19846 = ctx.list;
          D.20841 = monoeg_g_slist_prepend (D.19846, vinfo);
          ctx.list = D.20841;
        }
        ctx.verifiable = 0;
        D.19899 = ctx.level;
        D.19903 = D.19899 & 16;
        if (D.19903 != 0) goto <D.20842>; else goto <D.20843>;
        <D.20842>:
        ctx.valid = 0;
        <D.20843>:
        <D.20838>:
        <D.20825>:
        monoeg_g_free (method_name);
        monoeg_g_free (type);
      }
      <D.20823>:
      <D.20821>:
      <D.20816>:
      <D.20813>:
      cleanup:
      D.19881 = ctx.code;
      if (D.19881 != 0B) goto <D.20844>; else goto <D.20845>;
      <D.20844>:
      i = 0;
      goto <D.19414>;
      <D.19413>:
      D.19881 = ctx.code;
      i.12 = (unsigned int) i;
      D.20761 = i.12 * 12;
      D.20762 = D.19881 + D.20761;
      D.20846 = D.20762->stack;
      if (D.20846 != 0B) goto <D.20847>; else goto <D.20848>;
      <D.20847>:
      D.19881 = ctx.code;
      i.12 = (unsigned int) i;
      D.20761 = i.12 * 12;
      D.20762 = D.19881 + D.20761;
      D.20846 = D.20762->stack;
      monoeg_g_free (D.20846);
      <D.20848>:
      i = i + 1;
      <D.19414>:
      i.27 = (unsigned int) i;
      D.19864 = ctx.header;
      D.19869 = D.19864->code_size;
      if (i.27 < D.19869) goto <D.19413>; else goto <D.19415>;
      <D.19415>:
      <D.20845>:
      tmp = ctx.funptrs;
      goto <D.19417>;
      <D.19416>:
      D.20850 = tmp->data;
      monoeg_g_free (D.20850);
      tmp = tmp->next;
      <D.19417>:
      if (tmp != 0B) goto <D.19416>; else goto <D.19418>;
      <D.19418>:
      D.20851 = ctx.funptrs;
      monoeg_g_slist_free (D.20851);
      tmp = ctx.exception_types;
      goto <D.19420>;
      <D.19419>:
      D.20850 = tmp->data;
      mono_metadata_free_type (D.20850);
      tmp = tmp->next;
      <D.19420>:
      if (tmp != 0B) goto <D.19419>; else goto <D.19421>;
      <D.19421>:
      D.20852 = ctx.exception_types;
      monoeg_g_slist_free (D.20852);
      i = 0;
      goto <D.19423>;
      <D.19422>:
      D.19939 = ctx.locals;
      i.12 = (unsigned int) i;
      D.19941 = i.12 * 4;
      D.19942 = D.19939 + D.19941;
      D.19943 = *D.19942;
      if (D.19943 != 0B) goto <D.20853>; else goto <D.20854>;
      <D.20853>:
      D.19939 = ctx.locals;
      i.12 = (unsigned int) i;
      D.19941 = i.12 * 4;
      D.19942 = D.19939 + D.19941;
      D.19943 = *D.19942;
      mono_metadata_free_type (D.19943);
      <D.20854>:
      i = i + 1;
      <D.19423>:
      D.19888 = ctx.num_locals;
      if (D.19888 > i) goto <D.19422>; else goto <D.19424>;
      <D.19424>:
      i = 0;
      goto <D.19426>;
      <D.19425>:
      D.19913 = ctx.params;
      i.12 = (unsigned int) i;
      D.19941 = i.12 * 4;
      D.19955 = D.19913 + D.19941;
      D.19956 = *D.19955;
      if (D.19956 != 0B) goto <D.20855>; else goto <D.20856>;
      <D.20855>:
      D.19913 = ctx.params;
      i.12 = (unsigned int) i;
      D.19941 = i.12 * 4;
      D.19955 = D.19913 + D.19941;
      D.19956 = *D.19955;
      mono_metadata_free_type (D.19956);
      <D.20856>:
      i = i + 1;
      <D.19426>:
      D.19906 = ctx.max_args;
      if (D.19906 > i) goto <D.19425>; else goto <D.19427>;
      <D.19427>:
      D.20857 = ctx.eval.stack;
      if (D.20857 != 0B) goto <D.20858>; else goto <D.20859>;
      <D.20858>:
      D.20857 = ctx.eval.stack;
      monoeg_g_free (D.20857);
      <D.20859>:
      D.19881 = ctx.code;
      if (D.19881 != 0B) goto <D.20860>; else goto <D.20861>;
      <D.20860>:
      D.19881 = ctx.code;
      monoeg_g_free (D.19881);
      <D.20861>:
      D.19939 = ctx.locals;
      monoeg_g_free (D.19939);
      D.19913 = ctx.params;
      monoeg_g_free (D.19913);
      mono_basic_block_free (original_bb);
      D.19864 = ctx.header;
      mono_metadata_free_mh (D.19864);
      D.19840 = ctx.list;
      return D.19840;
    }
  finally
    {
      error = {CLOBBER};
      ctx = {CLOBBER};
    }
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.20868;
  int D.20873;
  void * D.20875;
  unsigned int D.20876;

  D.20868 = __builtin_constant_p (__len);
  if (D.20868 != 0) goto <D.20869>; else goto <D.20870>;
  <D.20869>:
  if (__len == 0) goto <D.20871>; else goto <D.20872>;
  <D.20871>:
  D.20873 = __builtin_constant_p (__ch);
  if (D.20873 == 0) goto <D.20866>; else goto <D.20874>;
  <D.20874>:
  if (__ch != 0) goto <D.20866>; else goto <D.20867>;
  <D.20866>:
  __warn_memset_zero_len ();
  D.20875 = __dest;
  return D.20875;
  <D.20867>:
  <D.20872>:
  <D.20870>:
  D.20876 = __builtin_object_size (__dest, 0);
  D.20875 = __builtin___memset_chk (__dest, __ch, __len, D.20876);
  return D.20875;
}


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

  D.20879 = __builtin_object_size (__dest, 0);
  D.20878 = __builtin___memcpy_chk (__dest, __src, __len, D.20879);
  return D.20878;
}


stack_init (struct VerifyContext * ctx, struct ILCodeDesc * state)
{
  short unsigned int D.20881;
  int D.20882;
  int D.20883;
  short unsigned int D.20886;
  short unsigned int D.20887;

  D.20881 = state->flags;
  D.20882 = (int) D.20881;
  D.20883 = D.20882 & 4;
  if (D.20883 != 0) goto <D.20884>; else goto <D.20885>;
  <D.20884>:
  return;
  <D.20885>:
  state->max_size = 0;
  D.20886 = state->max_size;
  state->size = D.20886;
  D.20881 = state->flags;
  D.20887 = D.20881 | 4;
  state->flags = D.20887;
}


get_stack_type (struct MonoType * type)
{
  unsigned char D.20889;
  unsigned int D.20890;
  unsigned int D.20891;
  int D.20894;
  int D.20895;
  int mask;
  int type_kind;
  void handle_enum = <<< error >>>;

  mask = 0;
  D.20889 = type->type;
  type_kind = (int) D.20889;
  D.20890 = BIT_FIELD_REF <*type, 32, 32>;
  D.20891 = D.20890 & 1073741824;
  if (D.20891 != 0) goto <D.20892>; else goto <D.20893>;
  <D.20892>:
  mask = 256;
  <D.20893>:
  handle_enum:
  switch (type_kind) <default: <D.18018>, case 2: <D.17994>, case 3: <D.17997>, case 4: <D.17992>, case 5: <D.17993>, case 6: <D.17995>, case 7: <D.17996>, case 8: <D.17998>, case 9: <D.17999>, case 10: <D.18012>, case 11: <D.18013>, case 12: <D.18014>, case 13: <D.18015>, case 14: <D.18008>, case 15: <D.18003>, case 17: <D.18017>, case 18: <D.18007>, case 19: <D.18005>, case 20: <D.18011>, case 21: <D.18016>, case 22: <D.18004>, case 24: <D.18000>, case 25: <D.18001>, case 27: <D.18002>, case 28: <D.18009>, case 29: <D.18010>, case 30: <D.18006>>
  <D.17992>:
  <D.17993>:
  <D.17994>:
  <D.17995>:
  <D.17996>:
  <D.17997>:
  <D.17998>:
  <D.17999>:
  D.20894 = mask | 1;
  return D.20894;
  <D.18000>:
  <D.18001>:
  D.20894 = mask | 3;
  return D.20894;
  <D.18002>:
  <D.18003>:
  <D.18004>:
  D.20894 = mask | 5;
  return D.20894;
  <D.18005>:
  <D.18006>:
  <D.18007>:
  <D.18008>:
  <D.18009>:
  <D.18010>:
  <D.18011>:
  D.20894 = mask | 6;
  return D.20894;
  <D.18012>:
  <D.18013>:
  D.20894 = mask | 2;
  return D.20894;
  <D.18014>:
  <D.18015>:
  D.20894 = mask | 4;
  return D.20894;
  <D.18016>:
  <D.18017>:
  D.20895 = mono_type_is_enum_type (type);
  if (D.20895 != 0) goto <D.20896>; else goto <D.20897>;
  <D.20896>:
  type = mono_type_get_underlying_type_any (type);
  if (type == 0B) goto <D.20898>; else goto <D.20899>;
  <D.20898>:
  D.20894 = 0;
  return D.20894;
  <D.20899>:
  D.20889 = type->type;
  type_kind = (int) D.20889;
  goto handle_enum;
  <D.20897>:
  D.20894 = mask | 6;
  return D.20894;
  <D.18018>:
  D.20894 = 0;
  return D.20894;
}


mono_type_is_enum_type (struct MonoType * type)
{
  unsigned char D.20901;
  struct MonoClass * D.20904;
  unsigned int D.20905;
  unsigned int D.20906;
  gboolean D.20909;
  struct MonoGenericClass * D.20912;
  struct MonoClass * D.20913;
  unsigned int D.20914;
  unsigned int D.20915;

  D.20901 = type->type;
  if (D.20901 == 17) goto <D.20902>; else goto <D.20903>;
  <D.20902>:
  D.20904 = type->data.klass;
  D.20905 = BIT_FIELD_REF <*D.20904, 32, 160>;
  D.20906 = D.20905 & 16;
  if (D.20906 != 0) goto <D.20907>; else goto <D.20908>;
  <D.20907>:
  D.20909 = 1;
  return D.20909;
  <D.20908>:
  <D.20903>:
  D.20901 = type->type;
  if (D.20901 == 21) goto <D.20910>; else goto <D.20911>;
  <D.20910>:
  D.20912 = type->data.generic_class;
  D.20913 = D.20912->container_class;
  D.20914 = BIT_FIELD_REF <*D.20913, 32, 160>;
  D.20915 = D.20914 & 16;
  if (D.20915 != 0) goto <D.20916>; else goto <D.20917>;
  <D.20916>:
  D.20909 = 1;
  return D.20909;
  <D.20917>:
  <D.20911>:
  D.20909 = 0;
  return D.20909;
}


mono_type_get_underlying_type_any (struct MonoType * type)
{
  unsigned char D.20919;
  struct MonoClass * D.20922;
  unsigned int D.20923;
  unsigned int D.20924;
  struct MonoType * D.20927;
  struct MonoGenericClass * D.20930;
  struct MonoClass * D.20931;
  unsigned int D.20932;
  unsigned int D.20933;

  D.20919 = type->type;
  if (D.20919 == 17) goto <D.20920>; else goto <D.20921>;
  <D.20920>:
  D.20922 = type->data.klass;
  D.20923 = BIT_FIELD_REF <*D.20922, 32, 160>;
  D.20924 = D.20923 & 16;
  if (D.20924 != 0) goto <D.20925>; else goto <D.20926>;
  <D.20925>:
  D.20922 = type->data.klass;
  D.20927 = mono_class_enum_basetype (D.20922);
  return D.20927;
  <D.20926>:
  <D.20921>:
  D.20919 = type->type;
  if (D.20919 == 21) goto <D.20928>; else goto <D.20929>;
  <D.20928>:
  D.20930 = type->data.generic_class;
  D.20931 = D.20930->container_class;
  D.20932 = BIT_FIELD_REF <*D.20931, 32, 160>;
  D.20933 = D.20932 & 16;
  if (D.20933 != 0) goto <D.20934>; else goto <D.20935>;
  <D.20934>:
  D.20930 = type->data.generic_class;
  D.20931 = D.20930->container_class;
  D.20927 = mono_class_enum_basetype (D.20931);
  return D.20927;
  <D.20935>:
  <D.20929>:
  D.20927 = type;
  return D.20927;
}


verify_clause_relationship (struct VerifyContext * ctx, struct MonoExceptionClause * clause, struct MonoExceptionClause * to_test)
{
  unsigned int D.20937;
  unsigned int D.20940;
  unsigned int D.20941;
  int D.20942;
  gchar * D.20945;
  struct GSList * D.20946;
  struct GSList * D.20947;
  int D.20948;
  gchar * D.20951;
  struct GSList * D.20952;
  unsigned int D.20953;
  unsigned int D.20954;
  unsigned int D.20957;
  unsigned int D.20958;
  uint32_t iftmp.28;
  unsigned int D.20962;
  unsigned int D.20966;
  unsigned int D.20967;
  unsigned int D.20968;
  int D.20969;
  gchar * D.20972;
  struct GSList * D.20973;
  gchar * D.20977;
  struct GSList * D.20978;
  unsigned int D.20981;
  int D.20982;
  uint32_t iftmp.29;
  int D.20988;
  int D.20989;
  gchar * D.20992;
  struct GSList * D.20993;

  D.20937 = to_test->flags;
  if (D.20937 == 1) goto <D.20938>; else goto <D.20939>;
  <D.20938>:
  D.20940 = to_test->data.filter_offset;
  D.20941 = to_test->handler_offset;
  D.20942 = is_clause_inside_range (clause, D.20940, D.20941);
  if (D.20942 != 0) goto <D.20943>; else goto <D.20944>;
  <D.20943>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.20945 = monoeg_g_strdup_printf ("Exception clause inside filter");
    vinfo->info.message = D.20945;
    vinfo->exception_type = 3;
    D.20946 = ctx->list;
    D.20947 = monoeg_g_slist_prepend (D.20946, vinfo);
    ctx->list = D.20947;
  }
  ctx->valid = 0;
  return;
  <D.20944>:
  <D.20939>:
  D.20948 = is_clause_nested (clause, to_test);
  if (D.20948 != 0) goto <D.20949>; else goto <D.20950>;
  <D.20949>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.20951 = monoeg_g_strdup_printf ("Nested exception clause appears after enclosing clause");
    vinfo->info.message = D.20951;
    vinfo->exception_type = 3;
    D.20946 = ctx->list;
    D.20952 = monoeg_g_slist_prepend (D.20946, vinfo);
    ctx->list = D.20952;
  }
  ctx->valid = 0;
  return;
  <D.20950>:
  D.20953 = clause->try_offset;
  D.20954 = to_test->try_offset;
  if (D.20953 == D.20954) goto <D.20955>; else goto <D.20956>;
  <D.20955>:
  D.20957 = clause->try_len;
  D.20958 = to_test->try_len;
  if (D.20957 == D.20958) goto <D.20959>; else goto <D.20960>;
  <D.20959>:
  D.20962 = clause->flags;
  if (D.20962 == 1) goto <D.20963>; else goto <D.20964>;
  <D.20963>:
  iftmp.28 = clause->data.filter_offset;
  goto <D.20965>;
  <D.20964>:
  iftmp.28 = clause->handler_offset;
  <D.20965>:
  D.20966 = clause->handler_offset;
  D.20967 = clause->handler_len;
  D.20968 = D.20966 + D.20967;
  D.20969 = is_clause_in_range (to_test, iftmp.28, D.20968);
  if (D.20969 != 0) goto <D.20970>; else goto <D.20971>;
  <D.20970>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.20972 = monoeg_g_strdup_printf ("Exception handlers overlap");
    vinfo->info.message = D.20972;
    vinfo->exception_type = 3;
    D.20946 = ctx->list;
    D.20973 = monoeg_g_slist_prepend (D.20946, vinfo);
    ctx->list = D.20973;
  }
  ctx->valid = 0;
  return;
  <D.20971>:
  D.20962 = clause->flags;
  if (D.20962 > 1) goto <D.20974>; else goto <D.20976>;
  <D.20976>:
  D.20937 = to_test->flags;
  if (D.20937 > 1) goto <D.20974>; else goto <D.20975>;
  <D.20974>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.20977 = monoeg_g_strdup_printf ("Exception clauses with shared protected block are neither catch or filter");
    vinfo->info.message = D.20977;
    vinfo->exception_type = 3;
    D.20946 = ctx->list;
    D.20978 = monoeg_g_slist_prepend (D.20946, vinfo);
    ctx->list = D.20978;
  }
  ctx->valid = 0;
  return;
  <D.20975>:
  return;
  <D.20960>:
  <D.20956>:
  D.20953 = clause->try_offset;
  D.20953 = clause->try_offset;
  D.20957 = clause->try_len;
  D.20981 = D.20953 + D.20957;
  D.20982 = is_clause_in_range (to_test, D.20953, D.20981);
  if (D.20982 != 0) goto <D.20979>; else goto <D.20983>;
  <D.20983>:
  D.20962 = clause->flags;
  if (D.20962 == 1) goto <D.20985>; else goto <D.20986>;
  <D.20985>:
  iftmp.29 = clause->data.filter_offset;
  goto <D.20987>;
  <D.20986>:
  iftmp.29 = clause->handler_offset;
  <D.20987>:
  D.20966 = clause->handler_offset;
  D.20967 = clause->handler_len;
  D.20968 = D.20966 + D.20967;
  D.20988 = is_clause_in_range (to_test, iftmp.29, D.20968);
  if (D.20988 != 0) goto <D.20979>; else goto <D.20980>;
  <D.20979>:
  D.20989 = is_clause_nested (to_test, clause);
  if (D.20989 == 0) goto <D.20990>; else goto <D.20991>;
  <D.20990>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.20992 = monoeg_g_strdup_printf ("Exception clauses overlap");
    vinfo->info.message = D.20992;
    vinfo->exception_type = 3;
    D.20946 = ctx->list;
    D.20993 = monoeg_g_slist_prepend (D.20946, vinfo);
    ctx->list = D.20993;
  }
  ctx->valid = 0;
  <D.20991>:
  <D.20980>:
}


is_clause_inside_range (struct MonoExceptionClause * clause, guint32 start, guint32 end)
{
  unsigned int D.20997;
  unsigned int D.20999;
  unsigned int D.21000;
  gboolean D.21001;
  uint32_t iftmp.30;
  unsigned int D.21005;
  unsigned int D.21010;
  unsigned int D.21011;
  unsigned int D.21012;

  D.20997 = clause->try_offset;
  if (D.20997 < start) goto <D.20995>; else goto <D.20998>;
  <D.20998>:
  D.20997 = clause->try_offset;
  D.20999 = clause->try_len;
  D.21000 = D.20997 + D.20999;
  if (D.21000 > end) goto <D.20995>; else goto <D.20996>;
  <D.20995>:
  D.21001 = 0;
  return D.21001;
  <D.20996>:
  D.21005 = clause->flags;
  if (D.21005 == 1) goto <D.21006>; else goto <D.21007>;
  <D.21006>:
  iftmp.30 = clause->data.filter_offset;
  goto <D.21008>;
  <D.21007>:
  iftmp.30 = clause->handler_offset;
  <D.21008>:
  if (iftmp.30 < start) goto <D.21002>; else goto <D.21009>;
  <D.21009>:
  D.21010 = clause->handler_offset;
  D.21011 = clause->handler_len;
  D.21012 = D.21010 + D.21011;
  if (D.21012 > end) goto <D.21002>; else goto <D.21003>;
  <D.21002>:
  D.21001 = 0;
  return D.21001;
  <D.21003>:
  D.21001 = 1;
  return D.21001;
}


is_clause_in_range (struct MonoExceptionClause * clause, guint32 start, guint32 end)
{
  unsigned int D.21014;
  gboolean D.21019;
  uint32_t iftmp.31;
  unsigned int D.21021;
  uint32_t iftmp.32;

  D.21014 = clause->try_offset;
  if (D.21014 >= start) goto <D.21015>; else goto <D.21016>;
  <D.21015>:
  D.21014 = clause->try_offset;
  if (D.21014 < end) goto <D.21017>; else goto <D.21018>;
  <D.21017>:
  D.21019 = 1;
  return D.21019;
  <D.21018>:
  <D.21016>:
  D.21021 = clause->flags;
  if (D.21021 == 1) goto <D.21022>; else goto <D.21023>;
  <D.21022>:
  iftmp.31 = clause->data.filter_offset;
  goto <D.21024>;
  <D.21023>:
  iftmp.31 = clause->handler_offset;
  <D.21024>:
  if (iftmp.31 >= start) goto <D.21025>; else goto <D.21026>;
  <D.21025>:
  D.21021 = clause->flags;
  if (D.21021 == 1) goto <D.21028>; else goto <D.21029>;
  <D.21028>:
  iftmp.32 = clause->data.filter_offset;
  goto <D.21030>;
  <D.21029>:
  iftmp.32 = clause->handler_offset;
  <D.21030>:
  if (iftmp.32 < end) goto <D.21031>; else goto <D.21032>;
  <D.21031>:
  D.21019 = 1;
  return D.21019;
  <D.21032>:
  <D.21026>:
  D.21019 = 0;
  return D.21019;
}


is_clause_nested (struct MonoExceptionClause * clause, struct MonoExceptionClause * nested)
{
  unsigned int D.21034;
  unsigned int D.21037;
  unsigned int D.21038;
  int D.21039;
  gboolean D.21042;
  int iftmp.33;
  unsigned int D.21047;
  unsigned int D.21048;
  unsigned int D.21049;
  int D.21050;
  unsigned int D.21052;
  unsigned int D.21053;
  int D.21054;

  D.21034 = clause->flags;
  if (D.21034 == 1) goto <D.21035>; else goto <D.21036>;
  <D.21035>:
  D.21037 = clause->data.filter_offset;
  D.21038 = clause->handler_offset;
  D.21039 = is_clause_inside_range (nested, D.21037, D.21038);
  if (D.21039 != 0) goto <D.21040>; else goto <D.21041>;
  <D.21040>:
  D.21042 = 1;
  return D.21042;
  <D.21041>:
  <D.21036>:
  D.21047 = clause->try_offset;
  D.21047 = clause->try_offset;
  D.21048 = clause->try_len;
  D.21049 = D.21047 + D.21048;
  D.21050 = is_clause_inside_range (nested, D.21047, D.21049);
  if (D.21050 != 0) goto <D.21044>; else goto <D.21051>;
  <D.21051>:
  D.21038 = clause->handler_offset;
  D.21038 = clause->handler_offset;
  D.21052 = clause->handler_len;
  D.21053 = D.21038 + D.21052;
  D.21054 = is_clause_inside_range (nested, D.21038, D.21053);
  if (D.21054 != 0) goto <D.21044>; else goto <D.21045>;
  <D.21044>:
  iftmp.33 = 1;
  goto <D.21046>;
  <D.21045>:
  iftmp.33 = 0;
  <D.21046>:
  D.21042 = iftmp.33;
  return D.21042;
}


mono_type_is_valid_in_context (struct VerifyContext * ctx, struct MonoType * type)
{
  unsigned int D.21058;
  gchar * D.21059;
  struct GSList * D.21060;
  struct GSList * D.21061;
  gboolean D.21062;
  int D.21063;
  const char * iftmp.34;
  char D.21067;
  const char * iftmp.35;
  unsigned char D.21071;
  const char * iftmp.36;
  gchar * D.21080;
  struct GSList * D.21081;
  struct MonoLoaderError * D.21084;
  unsigned char D.21086;
  struct MonoGenericClass * D.21089;
  int D.21091;
  const char * D.21093;
  const char * D.21094;
  gchar * D.21095;
  struct GSList * D.21096;
  gchar * D.21097;
  struct GSList * D.21098;
  struct MonoClass * D.21101;
  unsigned char D.21102;
  gchar * D.21105;
  struct GSList * D.21106;
  int D.21109;
  gchar * D.21112;
  struct GSList * D.21113;
  int D.21114;
  gchar * D.21117;
  struct GSList * D.21118;
  struct MonoClass * klass;

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

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21058 = ctx->ip_offset;
    D.21059 = monoeg_g_strdup_printf ("Invalid null type at 0x%04x", D.21058);
    vinfo->info.message = D.21059;
    vinfo->exception_type = 12;
    D.21060 = ctx->list;
    D.21061 = monoeg_g_slist_prepend (D.21060, vinfo);
    ctx->list = D.21061;
  }
  ctx->valid = 0;
  D.21062 = 0;
  return D.21062;
  <D.21057>:
  D.21063 = is_valid_type_in_context (ctx, type);
  if (D.21063 == 0) goto <D.21064>; else goto <D.21065>;
  <D.21064>:
  {
    char * str;

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

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.21067 = *str;
      if (D.21067 != 33) goto <D.21068>; else goto <D.21069>;
      <D.21068>:
      D.21071 = type->type;
      if (D.21071 == 19) goto <D.21072>; else goto <D.21073>;
      <D.21072>:
      iftmp.35 = "!";
      goto <D.21074>;
      <D.21073>:
      iftmp.35 = "!!";
      <D.21074>:
      iftmp.34 = iftmp.35;
      goto <D.21075>;
      <D.21069>:
      iftmp.34 = "";
      <D.21075>:
      D.21071 = type->type;
      if (D.21071 == 19) goto <D.21077>; else goto <D.21078>;
      <D.21077>:
      iftmp.36 = "class";
      goto <D.21079>;
      <D.21078>:
      iftmp.36 = "method";
      <D.21079>:
      D.21058 = ctx->ip_offset;
      D.21080 = monoeg_g_strdup_printf ("Invalid generic type (%s%s) (argument out of range or %s is not generic) at 0x%04x", iftmp.34, str, iftmp.36, D.21058);
      vinfo->info.message = D.21080;
      vinfo->exception_type = 12;
      D.21060 = ctx->list;
      D.21081 = monoeg_g_slist_prepend (D.21060, vinfo);
      ctx->list = D.21081;
    }
    ctx->valid = 0;
    monoeg_g_free (str);
    D.21062 = 0;
    return D.21062;
  }
  <D.21065>:
  klass = mono_class_from_mono_type (type);
  mono_class_init (klass);
  D.21084 = mono_loader_get_last_error ();
  if (D.21084 != 0B) goto <D.21082>; else goto <D.21085>;
  <D.21085>:
  D.21086 = klass->exception_type;
  if (D.21086 != 0) goto <D.21082>; else goto <D.21083>;
  <D.21082>:
  D.21089 = klass->generic_class;
  if (D.21089 != 0B) goto <D.21090>; else goto <D.21087>;
  <D.21090>:
  D.21091 = mono_class_is_valid_generic_instantiation (0B, klass);
  if (D.21091 == 0) goto <D.21092>; else goto <D.21087>;
  <D.21092>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21093 = klass->name_space;
    D.21094 = klass->name;
    D.21058 = ctx->ip_offset;
    D.21095 = monoeg_g_strdup_printf ("Invalid generic instantiation of type %s.%s at 0x%04x", D.21093, D.21094, D.21058);
    vinfo->info.message = D.21095;
    vinfo->exception_type = 7;
    D.21060 = ctx->list;
    D.21096 = monoeg_g_slist_prepend (D.21060, vinfo);
    ctx->list = D.21096;
  }
  ctx->valid = 0;
  goto <D.21088>;
  <D.21087>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21093 = klass->name_space;
    D.21094 = klass->name;
    D.21058 = ctx->ip_offset;
    D.21097 = monoeg_g_strdup_printf ("Could not load type %s.%s at 0x%04x", D.21093, D.21094, D.21058);
    vinfo->info.message = D.21097;
    vinfo->exception_type = 7;
    D.21060 = ctx->list;
    D.21098 = monoeg_g_slist_prepend (D.21060, vinfo);
    ctx->list = D.21098;
  }
  ctx->valid = 0;
  <D.21088>:
  mono_loader_clear_error ();
  D.21062 = 0;
  return D.21062;
  <D.21083>:
  D.21089 = klass->generic_class;
  if (D.21089 != 0B) goto <D.21099>; else goto <D.21100>;
  <D.21099>:
  D.21089 = klass->generic_class;
  D.21101 = D.21089->container_class;
  D.21102 = D.21101->exception_type;
  if (D.21102 != 0) goto <D.21103>; else goto <D.21104>;
  <D.21103>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21093 = klass->name_space;
    D.21094 = klass->name;
    D.21058 = ctx->ip_offset;
    D.21105 = monoeg_g_strdup_printf ("Could not load type %s.%s at 0x%04x", D.21093, D.21094, D.21058);
    vinfo->info.message = D.21105;
    vinfo->exception_type = 7;
    D.21060 = ctx->list;
    D.21106 = monoeg_g_slist_prepend (D.21060, vinfo);
    ctx->list = D.21106;
  }
  ctx->valid = 0;
  D.21062 = 0;
  return D.21062;
  <D.21104>:
  <D.21100>:
  D.21089 = klass->generic_class;
  if (D.21089 == 0B) goto <D.21107>; else goto <D.21108>;
  <D.21107>:
  D.21062 = 1;
  return D.21062;
  <D.21108>:
  D.21109 = mono_class_is_valid_generic_instantiation (ctx, klass);
  if (D.21109 == 0) goto <D.21110>; else goto <D.21111>;
  <D.21110>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21093 = klass->name_space;
    D.21094 = klass->name;
    D.21058 = ctx->ip_offset;
    D.21112 = monoeg_g_strdup_printf ("Invalid generic type instantiation of type %s.%s at 0x%04x", D.21093, D.21094, D.21058);
    vinfo->info.message = D.21112;
    vinfo->exception_type = 7;
    D.21060 = ctx->list;
    D.21113 = monoeg_g_slist_prepend (D.21060, vinfo);
    ctx->list = D.21113;
  }
  ctx->valid = 0;
  D.21062 = 0;
  return D.21062;
  <D.21111>:
  D.21114 = mono_class_repect_method_constraints (ctx, klass);
  if (D.21114 == 0) goto <D.21115>; else goto <D.21116>;
  <D.21115>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21093 = klass->name_space;
    D.21094 = klass->name;
    D.21058 = ctx->ip_offset;
    D.21117 = monoeg_g_strdup_printf ("Invalid generic type instantiation of type %s.%s (generic args don\'t respect target\'s constraints) at 0x%04x", D.21093, D.21094, D.21058);
    vinfo->info.message = D.21117;
    vinfo->exception_type = 7;
    D.21060 = ctx->list;
    D.21118 = monoeg_g_slist_prepend (D.21060, vinfo);
    ctx->list = D.21118;
  }
  ctx->valid = 0;
  D.21062 = 0;
  return D.21062;
  <D.21116>:
  D.21062 = 1;
  return D.21062;
}


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

  D.21121 = ctx->generic_context;
  D.21120 = mono_type_is_valid_type_in_context (type, D.21121);
  return D.21120;
}


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

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


mono_type_is_valid_type_in_context_full (struct MonoType * type, struct MonoGenericContext * context, gboolean check_gtd)
{
  unsigned char D.21125;
  int D.21126;
  gboolean D.21129;
  struct MonoGenericInst * iftmp.37;
  struct MonoGenericParam * D.21137;
  short unsigned int D.21138;
  int D.21139;
  <unnamed-unsigned:22> D.21140;
  int D.21141;
  struct MonoClass * D.21142;
  struct MonoType * D.21143;
  struct MonoArrayType * D.21144;
  struct MonoClass * D.21145;
  struct MonoType * D.21146;
  struct MonoType * D.21147;
  struct MonoGenericClass * D.21148;
  unsigned int D.21149;
  unsigned int D.21150;
  struct MonoType * D.21152;
  int D.21153;
  unsigned char D.21156;
  struct MonoType * D.21159;
  struct MonoGenericContainer * D.21162;
  int i;
  struct MonoGenericInst * inst;

  D.21125 = type->type;
  D.21126 = (int) D.21125;
  switch (D.21126) <default: <D.21165>, case 15: <D.17555>, case 17: <D.17561>, case 18: <D.17560>, case 19: <D.17550>, case 20: <D.17554>, case 21: <D.17556>, case 29: <D.17553>, case 30: <D.17551>>
  <D.17550>:
  <D.17551>:
  if (context == 0B) goto <D.21127>; else goto <D.21128>;
  <D.21127>:
  D.21129 = 0;
  return D.21129;
  <D.21128>:
  D.21125 = type->type;
  if (D.21125 == 19) goto <D.21131>; else goto <D.21132>;
  <D.21131>:
  iftmp.37 = context->class_inst;
  goto <D.21133>;
  <D.21132>:
  iftmp.37 = context->method_inst;
  <D.21133>:
  inst = iftmp.37;
  if (inst == 0B) goto <D.21134>; else goto <D.21136>;
  <D.21136>:
  D.21137 = type->data.generic_param;
  D.21138 = D.21137->num;
  D.21139 = (int) D.21138;
  D.21140 = inst->type_argc;
  D.21141 = (int) D.21140;
  if (D.21139 >= D.21141) goto <D.21134>; else goto <D.21135>;
  <D.21134>:
  D.21129 = 0;
  return D.21129;
  <D.21135>:
  goto <D.17552>;
  <D.17553>:
  D.21142 = type->data.klass;
  D.21143 = &D.21142->byval_arg;
  D.21129 = mono_type_is_valid_type_in_context_full (D.21143, context, check_gtd);
  return D.21129;
  <D.17554>:
  D.21144 = type->data.array;
  D.21145 = D.21144->eklass;
  D.21146 = &D.21145->byval_arg;
  D.21129 = mono_type_is_valid_type_in_context_full (D.21146, context, check_gtd);
  return D.21129;
  <D.17555>:
  D.21147 = type->data.type;
  D.21129 = mono_type_is_valid_type_in_context_full (D.21147, context, check_gtd);
  return D.21129;
  <D.17556>:
  D.21148 = type->data.generic_class;
  inst = D.21148->context.class_inst;
  D.21149 = BIT_FIELD_REF <*inst, 32, 32>;
  D.21150 = D.21149 & 4194304;
  if (D.21150 == 0) goto <D.17552>; else goto <D.21151>;
  <D.21151>:
  i = 0;
  goto <D.17558>;
  <D.17557>:
  D.21152 = inst->type_argv[i];
  D.21153 = mono_type_is_valid_type_in_context_full (D.21152, context, check_gtd);
  if (D.21153 == 0) goto <D.21154>; else goto <D.21155>;
  <D.21154>:
  D.21129 = 0;
  return D.21129;
  <D.21155>:
  i = i + 1;
  <D.17558>:
  D.21140 = inst->type_argc;
  D.21141 = (int) D.21140;
  if (D.21141 > i) goto <D.17557>; else goto <D.17559>;
  <D.17559>:
  goto <D.17552>;
  <D.17560>:
  <D.17561>:
  {
    struct MonoClass * klass;

    klass = type->data.klass;
    D.21156 = klass->byval_arg.type;
    D.21125 = type->type;
    if (D.21156 != D.21125) goto <D.21157>; else goto <D.21158>;
    <D.21157>:
    D.21159 = &klass->byval_arg;
    D.21129 = mono_type_is_valid_type_in_context_full (D.21159, context, check_gtd);
    return D.21129;
    <D.21158>:
    if (check_gtd != 0) goto <D.21160>; else goto <D.21161>;
    <D.21160>:
    D.21162 = klass->generic_container;
    if (D.21162 != 0B) goto <D.21163>; else goto <D.21164>;
    <D.21163>:
    D.21129 = 0;
    return D.21129;
    <D.21164>:
    <D.21161>:
    goto <D.17552>;
  }
  <D.21165>:
  <D.17552>:
  D.21129 = 1;
  return D.21129;
}


mono_class_is_valid_generic_instantiation (struct VerifyContext * ctx, struct MonoClass * klass)
{
  struct MonoClass * D.21167;
  int D.21170;
  gboolean D.21173;
  struct MonoGenericContext * D.21174;
  struct MonoGenericClass * gklass;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gklass = klass->generic_class;
  ginst = gklass->context.class_inst;
  D.21167 = gklass->container_class;
  gc = D.21167->generic_container;
  if (ctx != 0B) goto <D.21168>; else goto <D.21169>;
  <D.21168>:
  D.21170 = is_valid_generic_instantiation_in_context (ctx, ginst, 1);
  if (D.21170 == 0) goto <D.21171>; else goto <D.21172>;
  <D.21171>:
  D.21173 = 0;
  return D.21173;
  <D.21172>:
  <D.21169>:
  D.21174 = &gklass->context;
  D.21173 = is_valid_generic_instantiation (gc, D.21174, ginst);
  return D.21173;
}


is_valid_generic_instantiation_in_context (struct VerifyContext * ctx, struct MonoGenericInst * ginst, gboolean check_gtd)
{
  struct MonoGenericContext * D.21176;
  int D.21177;
  gboolean D.21180;
  <unnamed-unsigned:22> D.21181;
  int D.21182;
  int i;

  i = 0;
  goto <D.17646>;
  <D.17645>:
  {
    struct MonoType * type;

    type = ginst->type_argv[i];
    D.21176 = ctx->generic_context;
    D.21177 = mono_type_is_valid_type_in_context_full (type, D.21176, 1);
    if (D.21177 == 0) goto <D.21178>; else goto <D.21179>;
    <D.21178>:
    D.21180 = 0;
    return D.21180;
    <D.21179>:
  }
  i = i + 1;
  <D.17646>:
  D.21181 = ginst->type_argc;
  D.21182 = (int) D.21181;
  if (D.21182 > i) goto <D.17645>; else goto <D.17647>;
  <D.17647>:
  D.21180 = 1;
  return D.21180;
}


is_valid_generic_instantiation (struct MonoGenericContainer * gc, struct MonoGenericContext * context, struct MonoGenericInst * ginst)
{
  <unnamed-unsigned:22> D.21184;
  int D.21185;
  <unnamed-signed:31> D.21186;
  int D.21187;
  gboolean D.21190;
  struct MonoGenericParamFull * D.21191;
  unsigned int i.38;
  unsigned int D.21193;
  struct MonoGenericParamFull * D.21194;
  int D.21195;
  struct MonoGenericContainer * D.21198;
  unsigned char D.21201;
  unsigned int D.21204;
  unsigned int D.21205;
  struct MonoGenericClass * D.21208;
  unsigned int D.21211;
  unsigned int D.21212;
  int D.21215;
  struct MonoClass * * D.21218;
  short unsigned int D.21221;
  int D.21222;
  int D.21223;
  int D.21228;
  unsigned int D.21231;
  int D.21233;
  int D.21234;
  int D.21239;
  int D.21244;
  struct MonoType * D.21249;
  int D.21250;
  int D.21253;
  struct MonoClass * D.21256;
  struct MonoError error;
  int i;

  try
    {
      D.21184 = ginst->type_argc;
      D.21185 = (int) D.21184;
      D.21186 = gc->type_argc;
      D.21187 = (int) D.21186;
      if (D.21185 != D.21187) goto <D.21188>; else goto <D.21189>;
      <D.21188>:
      D.21190 = 0;
      return D.21190;
      <D.21189>:
      i = 0;
      goto <D.17592>;
      <D.17591>:
      {
        struct MonoGenericParamInfo * param_info;
        struct MonoClass * paramClass;
        struct MonoClass * * constraints;
        struct MonoType * param_type;

        D.21191 = gc->type_params;
        i.38 = (unsigned int) i;
        D.21193 = i.38 * 32;
        D.21194 = D.21191 + D.21193;
        param_info = &D.21194->info;
        param_type = ginst->type_argv[i];
        D.21195 = mono_type_is_generic_argument (param_type);
        if (D.21195 != 0) goto <D.21196>; else goto <D.21197>;
        <D.21196>:
        // predicted unlikely by continue predictor.
        goto <D.17585>;
        <D.21197>:
        paramClass = mono_class_from_mono_type (param_type);
        D.21198 = paramClass->generic_container;
        if (D.21198 != 0B) goto <D.21199>; else goto <D.21200>;
        <D.21199>:
        D.21201 = param_type->type;
        if (D.21201 != 21) goto <D.21202>; else goto <D.21203>;
        <D.21202>:
        D.21204 = BIT_FIELD_REF <*ginst, 32, 32>;
        D.21205 = D.21204 & 4194304;
        if (D.21205 == 0) goto <D.21206>; else goto <D.21207>;
        <D.21206>:
        D.21190 = 0;
        return D.21190;
        <D.21207>:
        <D.21203>:
        <D.21200>:
        D.21208 = paramClass->generic_class;
        if (D.21208 != 0B) goto <D.21209>; else goto <D.21210>;
        <D.21209>:
        D.21211 = BIT_FIELD_REF <*paramClass, 32, 160>;
        D.21212 = D.21211 & 1;
        if (D.21212 == 0) goto <D.21213>; else goto <D.21214>;
        <D.21213>:
        D.21215 = mono_class_is_valid_generic_instantiation (0B, paramClass);
        if (D.21215 == 0) goto <D.21216>; else goto <D.21217>;
        <D.21216>:
        D.21190 = 0;
        return D.21190;
        <D.21217>:
        <D.21214>:
        <D.21210>:
        D.21218 = param_info->constraints;
        if (D.21218 == 0B) goto <D.21219>; else goto <D.21220>;
        <D.21219>:
        D.21221 = param_info->flags;
        D.21222 = (int) D.21221;
        D.21223 = D.21222 & 28;
        if (D.21223 == 0) goto <D.21224>; else goto <D.21225>;
        <D.21224>:
        // predicted unlikely by continue predictor.
        goto <D.17585>;
        <D.21225>:
        <D.21220>:
        D.21221 = param_info->flags;
        D.21222 = (int) D.21221;
        D.21228 = D.21222 & 8;
        if (D.21228 != 0) goto <D.21229>; else goto <D.21230>;
        <D.21229>:
        D.21211 = BIT_FIELD_REF <*paramClass, 32, 160>;
        D.21231 = D.21211 & 8;
        if (D.21231 == 0) goto <D.21226>; else goto <D.21232>;
        <D.21232>:
        D.21233 = mono_class_is_nullable (paramClass);
        if (D.21233 != 0) goto <D.21226>; else goto <D.21227>;
        <D.21226>:
        D.21190 = 0;
        return D.21190;
        <D.21227>:
        <D.21230>:
        D.21221 = param_info->flags;
        D.21222 = (int) D.21221;
        D.21234 = D.21222 & 4;
        if (D.21234 != 0) goto <D.21235>; else goto <D.21236>;
        <D.21235>:
        D.21211 = BIT_FIELD_REF <*paramClass, 32, 160>;
        D.21231 = D.21211 & 8;
        if (D.21231 != 0) goto <D.21237>; else goto <D.21238>;
        <D.21237>:
        D.21190 = 0;
        return D.21190;
        <D.21238>:
        <D.21236>:
        D.21221 = param_info->flags;
        D.21222 = (int) D.21221;
        D.21239 = D.21222 & 16;
        if (D.21239 != 0) goto <D.21240>; else goto <D.21241>;
        <D.21240>:
        D.21211 = BIT_FIELD_REF <*paramClass, 32, 160>;
        D.21231 = D.21211 & 8;
        if (D.21231 == 0) goto <D.21242>; else goto <D.21243>;
        <D.21242>:
        D.21244 = mono_class_has_default_constructor (paramClass);
        if (D.21244 == 0) goto <D.21245>; else goto <D.21246>;
        <D.21245>:
        D.21190 = 0;
        return D.21190;
        <D.21246>:
        <D.21243>:
        <D.21241>:
        D.21218 = param_info->constraints;
        if (D.21218 == 0B) goto <D.21247>; else goto <D.21248>;
        <D.21247>:
        // predicted unlikely by continue predictor.
        goto <D.17585>;
        <D.21248>:
        constraints = param_info->constraints;
        goto <D.17589>;
        <D.17588>:
        {
          struct MonoClass * ctr;
          struct MonoType * inflated;

          ctr = *constraints;
          D.21249 = &ctr->byval_arg;
          inflated = mono_class_inflate_generic_type_checked (D.21249, context, &error);
          D.21250 = mono_error_ok (&error);
          if (D.21250 == 0) goto <D.21251>; else goto <D.21252>;
          <D.21251>:
          mono_error_cleanup (&error);
          D.21190 = 0;
          return D.21190;
          <D.21252>:
          ctr = mono_class_from_mono_type (inflated);
          mono_metadata_free_type (inflated);
          D.21253 = mono_class_is_assignable_from_slow (ctr, paramClass);
          if (D.21253 == 0) goto <D.21254>; else goto <D.21255>;
          <D.21254>:
          D.21190 = 0;
          return D.21190;
          <D.21255>:
        }
        constraints = constraints + 4;
        <D.17589>:
        D.21256 = *constraints;
        if (D.21256 != 0B) goto <D.17588>; else goto <D.17590>;
        <D.17590>:
      }
      <D.17585>:
      i = i + 1;
      <D.17592>:
      D.21186 = gc->type_argc;
      D.21187 = (int) D.21186;
      if (D.21187 > i) goto <D.17591>; else goto <D.17593>;
      <D.17593>:
      D.21190 = 1;
      return D.21190;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_type_is_generic_argument (struct MonoType * type)
{
  gboolean D.21259;
  int iftmp.39;
  unsigned char D.21264;

  D.21264 = type->type;
  if (D.21264 == 19) goto <D.21261>; else goto <D.21265>;
  <D.21265>:
  D.21264 = type->type;
  if (D.21264 == 30) goto <D.21261>; else goto <D.21262>;
  <D.21261>:
  iftmp.39 = 1;
  goto <D.21263>;
  <D.21262>:
  iftmp.39 = 0;
  <D.21263>:
  D.21259 = iftmp.39;
  return D.21259;
}


mono_class_has_default_constructor (struct MonoClass * klass)
{
  unsigned char D.21267;
  gboolean D.21270;
  struct MonoMethod * * D.21271;
  unsigned int i.40;
  unsigned int D.21273;
  struct MonoMethod * * D.21274;
  int D.21275;
  struct MonoMethodSignature * D.21278;
  struct MonoMethodSignature * D.21281;
  short unsigned int D.21282;
  short unsigned int D.21285;
  int D.21286;
  int D.21287;
  unsigned int i.41;
  unsigned int D.21291;
  struct MonoMethod * method;
  int i;

  mono_class_setup_methods (klass);
  D.21267 = klass->exception_type;
  if (D.21267 != 0) goto <D.21268>; else goto <D.21269>;
  <D.21268>:
  D.21270 = 0;
  return D.21270;
  <D.21269>:
  i = 0;
  goto <D.17541>;
  <D.17540>:
  D.21271 = klass->methods;
  i.40 = (unsigned int) i;
  D.21273 = i.40 * 4;
  D.21274 = D.21271 + D.21273;
  method = *D.21274;
  D.21275 = mono_method_is_constructor (method);
  if (D.21275 != 0) goto <D.21276>; else goto <D.21277>;
  <D.21276>:
  D.21278 = mono_method_signature (method);
  if (D.21278 != 0B) goto <D.21279>; else goto <D.21280>;
  <D.21279>:
  D.21281 = mono_method_signature (method);
  D.21282 = D.21281->param_count;
  if (D.21282 == 0) goto <D.21283>; else goto <D.21284>;
  <D.21283>:
  D.21285 = method->flags;
  D.21286 = (int) D.21285;
  D.21287 = D.21286 & 7;
  if (D.21287 == 6) goto <D.21288>; else goto <D.21289>;
  <D.21288>:
  D.21270 = 1;
  return D.21270;
  <D.21289>:
  <D.21284>:
  <D.21280>:
  <D.21277>:
  i = i + 1;
  <D.17541>:
  i.41 = (unsigned int) i;
  D.21291 = klass->method.count;
  if (i.41 < D.21291) goto <D.17540>; else goto <D.17542>;
  <D.17542>:
  D.21270 = 0;
  return D.21270;
}


mono_class_repect_method_constraints (struct VerifyContext * ctx, struct MonoClass * klass)
{
  struct MonoClass * D.21293;
  gboolean D.21294;
  int iftmp.42;
  struct MonoGenericContext * D.21300;
  int D.21301;
  struct MonoGenericClass * gklass;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gklass = klass->generic_class;
  ginst = gklass->context.class_inst;
  D.21293 = gklass->container_class;
  gc = D.21293->generic_container;
  if (gc == 0B) goto <D.21296>; else goto <D.21299>;
  <D.21299>:
  D.21300 = &gklass->context;
  D.21301 = generic_arguments_respect_constraints (ctx, gc, D.21300, ginst);
  if (D.21301 != 0) goto <D.21296>; else goto <D.21297>;
  <D.21296>:
  iftmp.42 = 1;
  goto <D.21298>;
  <D.21297>:
  iftmp.42 = 0;
  <D.21298>:
  D.21294 = iftmp.42;
  return D.21294;
}


generic_arguments_respect_constraints (struct VerifyContext * ctx, struct MonoGenericContainer * gc, struct MonoGenericContext * context, struct MonoGenericInst * ginst)
{
  struct MonoGenericParamFull * D.21303;
  unsigned int i.43;
  unsigned int D.21305;
  int D.21306;
  int D.21309;
  gboolean D.21312;
  int D.21313;
  <unnamed-unsigned:22> D.21316;
  int D.21317;
  int i;

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

    type = ginst->type_argv[i];
    D.21303 = gc->type_params;
    i.43 = (unsigned int) i;
    D.21305 = i.43 * 32;
    target = D.21303 + D.21305;
    D.21306 = mono_type_is_generic_argument (type);
    if (D.21306 == 0) goto <D.21307>; else goto <D.21308>;
    <D.21307>:
    // predicted unlikely by continue predictor.
    goto <D.17659>;
    <D.21308>:
    D.21309 = is_valid_type_in_context (ctx, type);
    if (D.21309 == 0) goto <D.21310>; else goto <D.21311>;
    <D.21310>:
    D.21312 = 0;
    return D.21312;
    <D.21311>:
    candidate = verifier_get_generic_param_from_type (ctx, type);
    candidate_class = mono_class_from_mono_type (type);
    D.21313 = mono_generic_param_is_constraint_compatible (ctx, target, candidate, candidate_class, context);
    if (D.21313 == 0) goto <D.21314>; else goto <D.21315>;
    <D.21314>:
    D.21312 = 0;
    return D.21312;
    <D.21315>:
  }
  <D.17659>:
  i = i + 1;
  <D.17661>:
  D.21316 = ginst->type_argc;
  D.21317 = (int) D.21316;
  if (D.21317 > i) goto <D.17660>; else goto <D.17662>;
  <D.17662>:
  D.21312 = 1;
  return D.21312;
}


verifier_get_generic_param_from_type (struct VerifyContext * ctx, struct MonoType * type)
{
  struct MonoGenericParam * D.21319;
  short unsigned int D.21320;
  unsigned char D.21321;
  struct MonoGenericClass * D.21324;
  unsigned int D.21328;
  unsigned int D.21329;
  struct MonoGenericParam * D.21334;
  struct MonoGenericParamFull * D.21335;
  unsigned int num.44;
  unsigned int D.21337;
  struct MonoGenericContainer * gc;
  struct MonoMethod * method;
  int num;

  method = ctx->method;
  D.21319 = type->data.generic_param;
  D.21320 = D.21319->num;
  num = (int) D.21320;
  D.21321 = type->type;
  if (D.21321 == 19) goto <D.21322>; else goto <D.21323>;
  <D.21322>:
  {
    struct MonoClass * gtd;

    gtd = method->klass;
    D.21324 = gtd->generic_class;
    if (D.21324 != 0B) goto <D.21325>; else goto <D.21326>;
    <D.21325>:
    D.21324 = gtd->generic_class;
    gtd = D.21324->container_class;
    <D.21326>:
    gc = gtd->generic_container;
  }
  goto <D.21327>;
  <D.21323>:
  {
    struct MonoMethod * gmd;

    gmd = method;
    D.21328 = BIT_FIELD_REF <*method, 32, 160>;
    D.21329 = D.21328 & 4096;
    if (D.21329 != 0) goto <D.21330>; else goto <D.21331>;
    <D.21330>:
    gmd = MEM[(struct MonoMethodInflated *)method].declaring;
    <D.21331>:
    gc = mono_method_get_generic_container (gmd);
  }
  <D.21327>:
  if (gc == 0B) goto <D.21332>; else goto <D.21333>;
  <D.21332>:
  D.21334 = 0B;
  return D.21334;
  <D.21333>:
  D.21335 = gc->type_params;
  num.44 = (unsigned int) num;
  D.21337 = num.44 * 32;
  D.21334 = D.21335 + D.21337;
  return D.21334;
}


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.45;
  struct MonoGenericContainer * D.21340;
  struct MonoGenericParamInfo * iftmp.46;
  struct MonoGenericContainer * D.21345;
  short unsigned int D.21349;
  int D.21350;
  short unsigned int D.21351;
  int D.21352;
  struct MonoClass * * D.21353;
  struct MonoClass * D.21356;
  struct MonoType * D.21357;
  struct MonoGenericContext * D.21358;
  gboolean D.21361;
  struct MonoType * D.21364;
  int D.21365;
  unsigned int D.21367;
  unsigned int D.21368;
  unsigned char D.21370;
  int D.21373;
  int D.21382;
  _Bool D.21383;
  int D.21384;
  int D.21385;
  _Bool D.21386;
  int D.21387;
  int D.21388;
  int D.21393;
  int D.21398;
  int D.21401;
  struct MonoClass * * D.21406;
  struct MonoClass * D.21409;
  struct MonoType * D.21410;
  struct MonoType * D.21413;
  struct MonoType * D.21414;
  int D.21415;
  int D.21422;
  struct MonoType * D.21424;
  int D.21425;
  int D.21428;
  struct MonoGenericParamInfo * tinfo;
  struct MonoGenericParamInfo * cinfo;
  struct MonoClass * * candidate_class;
  gboolean class_constraint_satisfied;
  gboolean valuetype_constraint_satisfied;
  int tmask;
  int cmask;

  D.21340 = target->owner;
  if (D.21340 != 0B) goto <D.21341>; else goto <D.21342>;
  <D.21341>:
  iftmp.45 = &MEM[(struct MonoGenericParamFull *)target].info;
  goto <D.21343>;
  <D.21342>:
  iftmp.45 = 0B;
  <D.21343>:
  tinfo = iftmp.45;
  D.21345 = candidate->owner;
  if (D.21345 != 0B) goto <D.21346>; else goto <D.21347>;
  <D.21346>:
  iftmp.46 = &MEM[(struct MonoGenericParamFull *)candidate].info;
  goto <D.21348>;
  <D.21347>:
  iftmp.46 = 0B;
  <D.21348>:
  cinfo = iftmp.46;
  class_constraint_satisfied = 0;
  valuetype_constraint_satisfied = 0;
  D.21349 = tinfo->flags;
  D.21350 = (int) D.21349;
  tmask = D.21350 & 28;
  D.21351 = cinfo->flags;
  D.21352 = (int) D.21351;
  cmask = D.21352 & 28;
  D.21353 = cinfo->constraints;
  if (D.21353 != 0B) goto <D.21354>; else goto <D.21355>;
  <D.21354>:
  candidate_class = cinfo->constraints;
  goto <D.17611>;
  <D.17610>:
  {
    struct MonoClass * cc;
    struct MonoType * inflated;

    D.21356 = *candidate_class;
    D.21357 = &D.21356->byval_arg;
    D.21358 = ctx->generic_context;
    inflated = verifier_inflate_type (ctx, D.21357, D.21358);
    if (inflated == 0B) goto <D.21359>; else goto <D.21360>;
    <D.21359>:
    D.21361 = 0;
    return D.21361;
    <D.21360>:
    cc = mono_class_from_mono_type (inflated);
    mono_metadata_free_type (inflated);
    D.21364 = &cc->byval_arg;
    D.21365 = mono_type_is_reference (D.21364);
    if (D.21365 != 0) goto <D.21366>; else goto <D.21362>;
    <D.21366>:
    D.21367 = cc->flags;
    D.21368 = D.21367 & 32;
    if (D.21368 == 0) goto <D.21369>; else goto <D.21362>;
    <D.21369>:
    D.21370 = cc->byval_arg.type;
    if (D.21370 != 19) goto <D.21371>; else goto <D.21362>;
    <D.21371>:
    D.21370 = cc->byval_arg.type;
    if (D.21370 != 30) goto <D.21372>; else goto <D.21362>;
    <D.21372>:
    class_constraint_satisfied = 1;
    goto <D.21363>;
    <D.21362>:
    D.21364 = &cc->byval_arg;
    D.21373 = mono_type_is_reference (D.21364);
    if (D.21373 == 0) goto <D.21374>; else goto <D.21375>;
    <D.21374>:
    D.21367 = cc->flags;
    D.21368 = D.21367 & 32;
    if (D.21368 == 0) goto <D.21376>; else goto <D.21377>;
    <D.21376>:
    D.21370 = cc->byval_arg.type;
    if (D.21370 != 19) goto <D.21378>; else goto <D.21379>;
    <D.21378>:
    D.21370 = cc->byval_arg.type;
    if (D.21370 != 30) goto <D.21380>; else goto <D.21381>;
    <D.21380>:
    valuetype_constraint_satisfied = 1;
    <D.21381>:
    <D.21379>:
    <D.21377>:
    <D.21375>:
    <D.21363>:
  }
  candidate_class = candidate_class + 4;
  <D.17611>:
  D.21356 = *candidate_class;
  if (D.21356 != 0B) goto <D.17610>; else goto <D.17612>;
  <D.17612>:
  <D.21355>:
  D.21382 = cmask & 4;
  D.21383 = D.21382 != 0;
  D.21384 = (int) D.21383;
  class_constraint_satisfied = D.21384 | class_constraint_satisfied;
  D.21385 = cmask & 8;
  D.21386 = D.21385 != 0;
  D.21387 = (int) D.21386;
  valuetype_constraint_satisfied = D.21387 | valuetype_constraint_satisfied;
  D.21388 = tmask & 4;
  if (D.21388 != 0) goto <D.21389>; else goto <D.21390>;
  <D.21389>:
  if (class_constraint_satisfied == 0) goto <D.21391>; else goto <D.21392>;
  <D.21391>:
  D.21361 = 0;
  return D.21361;
  <D.21392>:
  <D.21390>:
  D.21393 = tmask & 8;
  if (D.21393 != 0) goto <D.21394>; else goto <D.21395>;
  <D.21394>:
  if (valuetype_constraint_satisfied == 0) goto <D.21396>; else goto <D.21397>;
  <D.21396>:
  D.21361 = 0;
  return D.21361;
  <D.21397>:
  <D.21395>:
  D.21398 = tmask & 16;
  if (D.21398 != 0) goto <D.21399>; else goto <D.21400>;
  <D.21399>:
  D.21401 = cmask & 16;
  if (D.21401 == 0) goto <D.21402>; else goto <D.21403>;
  <D.21402>:
  if (valuetype_constraint_satisfied == 0) goto <D.21404>; else goto <D.21405>;
  <D.21404>:
  D.21361 = 0;
  return D.21361;
  <D.21405>:
  <D.21403>:
  <D.21400>:
  D.21406 = tinfo->constraints;
  if (D.21406 != 0B) goto <D.21407>; else goto <D.21408>;
  <D.21407>:
  {
    struct MonoClass * * target_class;

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

      D.21409 = *target_class;
      D.21410 = &D.21409->byval_arg;
      inflated = verifier_inflate_type (ctx, D.21410, context);
      if (inflated == 0B) goto <D.21411>; else goto <D.21412>;
      <D.21411>:
      D.21361 = 0;
      return D.21361;
      <D.21412>:
      tc = mono_class_from_mono_type (inflated);
      mono_metadata_free_type (inflated);
      D.21413 = &tc->byval_arg;
      D.21414 = &candidate_param_class->byval_arg;
      D.21415 = mono_metadata_type_equal (D.21413, D.21414);
      if (D.21415 != 0) goto <D.21416>; else goto <D.21417>;
      <D.21416>:
      // predicted unlikely by continue predictor.
      goto <D.17616>;
      <D.21417>:
      D.21353 = cinfo->constraints;
      if (D.21353 == 0B) goto <D.21418>; else goto <D.21419>;
      <D.21418>:
      D.21361 = 0;
      return D.21361;
      <D.21419>:
      candidate_class = cinfo->constraints;
      goto <D.17621>;
      <D.17620>:
      {
        struct MonoClass * cc;

        D.21356 = *candidate_class;
        D.21357 = &D.21356->byval_arg;
        D.21358 = ctx->generic_context;
        inflated = verifier_inflate_type (ctx, D.21357, D.21358);
        if (inflated == 0B) goto <D.21420>; else goto <D.21421>;
        <D.21420>:
        D.21361 = 0;
        return D.21361;
        <D.21421>:
        cc = mono_class_from_mono_type (inflated);
        mono_metadata_free_type (inflated);
        D.21422 = verifier_class_is_assignable_from (tc, cc);
        if (D.21422 != 0) goto <D.17618>; else goto <D.21423>;
        <D.21423>:
        D.21424 = &cc->byval_arg;
        D.21425 = mono_type_is_generic_argument (D.21424);
        if (D.21425 != 0) goto <D.21426>; else goto <D.21427>;
        <D.21426>:
        {
          struct MonoGenericParam * other_candidate;

          D.21424 = &cc->byval_arg;
          other_candidate = verifier_get_generic_param_from_type (ctx, D.21424);
          D.21428 = mono_generic_param_is_constraint_compatible (ctx, target, other_candidate, cc, context);
          if (D.21428 != 0) goto <D.17618>; else goto <D.21429>;
          <D.21429>:
        }
        <D.21427>:
      }
      candidate_class = candidate_class + 4;
      <D.17621>:
      D.21356 = *candidate_class;
      if (D.21356 != 0B) goto <D.17620>; else goto <D.17618>;
      <D.17618>:
      D.21356 = *candidate_class;
      if (D.21356 == 0B) goto <D.21430>; else goto <D.21431>;
      <D.21430>:
      D.21361 = 0;
      return D.21361;
      <D.21431>:
    }
    <D.17616>:
    target_class = target_class + 4;
    <D.17623>:
    D.21409 = *target_class;
    if (D.21409 != 0B) goto <D.17622>; else goto <D.17624>;
    <D.17624>:
  }
  <D.21408>:
  D.21361 = 1;
  return D.21361;
}


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

  try
    {
      result = mono_class_inflate_generic_type_checked (type, context, &error);
      D.21433 = mono_error_ok (&error);
      if (D.21433 == 0) goto <D.21434>; else goto <D.21435>;
      <D.21434>:
      mono_error_cleanup (&error);
      D.21436 = 0B;
      return D.21436;
      <D.21435>:
      D.21436 = result;
      return D.21436;
    }
  finally
    {
      error = {CLOBBER};
    }
}


init_stack_with_value_at_exception_boundary (struct VerifyContext * ctx, struct ILCodeDesc * code, struct MonoClass * klass)
{
  struct MonoType * D.21439;
  struct MonoGenericContext * D.21440;
  int D.21441;
  gchar * D.21444;
  struct GSList * D.21445;
  struct GSList * D.21446;
  int D.21447;
  unsigned int D.21450;
  gchar * D.21451;
  struct GSList * D.21452;
  struct ILStackDesc * D.21453;
  struct GSList * D.21454;
  struct GSList * D.21455;
  short unsigned int D.21456;
  short unsigned int D.21457;
  int D.21458;
  int D.21461;
  int D.21462;
  struct MonoError error;
  struct MonoType * type;

  try
    {
      D.21439 = &klass->byval_arg;
      D.21440 = ctx->generic_context;
      type = mono_class_inflate_generic_type_checked (D.21439, D.21440, &error);
      D.21441 = mono_error_ok (&error);
      if (D.21441 == 0) goto <D.21442>; else goto <D.21443>;
      <D.21442>:
      {
        char * name;

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

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.21444 = monoeg_g_strdup_printf ("Invalid class %s used for exception", name);
          vinfo->info.message = D.21444;
          vinfo->exception_type = 3;
          D.21445 = ctx->list;
          D.21446 = monoeg_g_slist_prepend (D.21445, vinfo);
          ctx->list = D.21446;
        }
        ctx->valid = 0;
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        return;
      }
      <D.21443>:
      D.21447 = ctx->max_stack;
      if (D.21447 == 0) goto <D.21448>; else goto <D.21449>;
      <D.21448>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.21450 = ctx->ip_offset;
        D.21451 = monoeg_g_strdup_printf ("Stack overflow at 0x%04x", D.21450);
        vinfo->info.message = D.21451;
        vinfo->exception_type = 3;
        D.21445 = ctx->list;
        D.21452 = monoeg_g_slist_prepend (D.21445, vinfo);
        ctx->list = D.21452;
      }
      ctx->valid = 0;
      return;
      <D.21449>:
      stack_init (ctx, code);
      ensure_stack_size (code, 1);
      D.21453 = code->stack;
      set_stack_value (ctx, D.21453, type, 0);
      D.21454 = ctx->exception_types;
      D.21455 = monoeg_g_slist_prepend (D.21454, type);
      ctx->exception_types = D.21455;
      code->size = 1;
      D.21456 = code->flags;
      D.21457 = D.21456 | 2;
      code->flags = D.21457;
      D.21458 = mono_type_is_generic_argument (type);
      if (D.21458 != 0) goto <D.21459>; else goto <D.21460>;
      <D.21459>:
      D.21453 = code->stack;
      D.21453 = code->stack;
      D.21461 = D.21453->stype;
      D.21462 = D.21461 | 4096;
      D.21453->stype = D.21462;
      <D.21460>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


ensure_stack_size (struct ILCodeDesc * stack, int required)
{
  short unsigned int D.21466;
  int D.21467;
  int D.21470;
  int D.21471;
  short unsigned int D.21472;
  int D.21473;
  _Bool D.21474;
  long int D.21475;
  long int D.21476;
  _Bool D.21479;
  long int D.21480;
  long int D.21481;
  unsigned int new_size.47;
  unsigned int D.21485;
  struct ILStackDesc * D.21486;
  unsigned int D.21491;
  unsigned int D.21492;
  short unsigned int D.21493;
  int new_size;
  struct ILStackDesc * tmp;

  new_size = 8;
  D.21466 = stack->max_size;
  D.21467 = (int) D.21466;
  if (D.21467 > required) goto <D.21468>; else goto <D.21469>;
  <D.21468>:
  return;
  <D.21469>:
  D.21466 = stack->max_size;
  D.21467 = (int) D.21466;
  D.21470 = D.21467 * 2;
  D.21471 = MAX_EXPR <D.21470, required>;
  new_size = MAX_EXPR <D.21471, 8>;
  D.21472 = stack->size;
  D.21473 = (int) D.21472;
  D.21474 = D.21473 > new_size;
  D.21475 = (long int) D.21474;
  D.21476 = __builtin_expect (D.21475, 0);
  if (D.21476 != 0) goto <D.21477>; else goto <D.21478>;
  <D.21477>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1499, "new_size >= stack->size");
  <D.21478>:
  D.21479 = new_size < required;
  D.21480 = (long int) D.21479;
  D.21481 = __builtin_expect (D.21480, 0);
  if (D.21481 != 0) goto <D.21482>; else goto <D.21483>;
  <D.21482>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1500, "new_size >= required");
  <D.21483>:
  new_size.47 = (unsigned int) new_size;
  D.21485 = new_size.47 * 12;
  tmp = monoeg_malloc0 (D.21485);
  D.21486 = stack->stack;
  if (D.21486 != 0B) goto <D.21487>; else goto <D.21488>;
  <D.21487>:
  D.21472 = stack->size;
  if (D.21472 != 0) goto <D.21489>; else goto <D.21490>;
  <D.21489>:
  D.21486 = stack->stack;
  D.21472 = stack->size;
  D.21491 = (unsigned int) D.21472;
  D.21492 = D.21491 * 12;
  memcpy (tmp, D.21486, D.21492);
  <D.21490>:
  D.21486 = stack->stack;
  monoeg_g_free (D.21486);
  <D.21488>:
  stack->stack = tmp;
  D.21493 = (short unsigned int) new_size;
  stack->max_size = D.21493;
}


mono_opcode_is_prefix (int op)
{
  gboolean D.21495;

  switch (op) <default: <D.21496>, case 274: <D.19004>, case 275: <D.19005>, case 276: <D.19006>, case 278: <D.19007>, case 286: <D.19008>>
  <D.19004>:
  <D.19005>:
  <D.19006>:
  <D.19007>:
  <D.19008>:
  D.21495 = 1;
  return D.21495;
  <D.21496>:
  D.21495 = 0;
  return D.21495;
}


merge_stacks (struct VerifyContext * ctx, struct ILCodeDesc * from, struct ILCodeDesc * to, gboolean start, gboolean external)
{
  short unsigned int D.21500;
  struct ILCodeDesc * D.21504;
  int D.21505;
  int D.21506;
  short unsigned int D.21509;
  short unsigned int D.21510;
  int D.21513;
  int D.21514;
  unsigned int D.21515;
  gchar * D.21516;
  struct GSList * D.21517;
  struct GSList * D.21518;
  struct ILStackDesc * D.21519;
  unsigned int i.48;
  unsigned int D.21521;
  struct ILStackDesc * D.21522;
  int D.21523;
  int D.21526;
  int D.21529;
  int D.21532;
  int D.21535;
  int D.21540;
  int D.21542;
  int D.21545;
  int D.21547;
  int D.21548;
  gchar * D.21549;
  struct GSList * D.21550;
  int D.21551;
  struct MonoClass * D.21555;
  unsigned int D.21556;
  unsigned int D.21557;
  struct MonoClass * D.21559;
  unsigned int D.21560;
  unsigned int D.21561;
  int D.21563;
  int D.21565;
  short unsigned int D.21567;
  short unsigned int D.21568;
  short unsigned int D.21569;
  int D.21570;
  struct MonoClass * * D.21571;
  unsigned int j.49;
  unsigned int D.21573;
  struct MonoClass * * D.21574;
  struct MonoClass * D.21575;
  struct MonoType * D.21576;
  struct MonoClass * * D.21577;
  struct MonoClass * * D.21578;
  struct MonoClass * D.21579;
  struct MonoType * D.21580;
  int D.21581;
  int D.21584;
  const char * D.21590;
  gchar * D.21591;
  struct GSList * D.21592;
  int D.21595;
  const char * D.21601;
  gchar * D.21602;
  struct GSList * D.21603;
  unsigned int D.21606;
  unsigned int D.21607;
  int D.21610;
  struct MonoClass * * D.21613;
  struct MonoClass * * D.21614;
  struct MonoClass * D.21615;
  int D.21616;
  short unsigned int D.21619;
  int D.21620;
  unsigned int D.21621;
  unsigned int D.21622;
  int D.21625;
  struct MonoClass * * D.21628;
  struct MonoClass * * D.21629;
  struct MonoClass * D.21630;
  int D.21631;
  short unsigned int D.21634;
  int D.21635;
  int D.21638;
  int D.21640;
  gchar * D.21644;
  struct GSList * D.21645;
  struct MonoType * D.21648;
  int D.21649;
  _Bool D.21650;
  long int D.21651;
  long int D.21652;
  struct MonoType * D.21655;
  int D.21656;
  int D.21657;
  short unsigned int D.21660;
  short unsigned int D.21661;
  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.21498>; else goto <D.21499>;
      <D.21498>:
      D.21500 = to->flags;
      if (D.21500 == 0) goto <D.21501>; else goto <D.21502>;
      <D.21501>:
      from->size = 0;
      goto <D.21503>;
      <D.21502>:
      D.21504 = &ctx->eval;
      stack_copy (D.21504, to);
      <D.21503>:
      goto end_verify;
      <D.21499>:
      D.21500 = to->flags;
      D.21505 = (int) D.21500;
      D.21506 = D.21505 & 8;
      if (D.21506 == 0) goto <D.21507>; else goto <D.21508>;
      <D.21507>:
      D.21504 = &ctx->eval;
      stack_copy (to, D.21504);
      goto end_verify;
      <D.21508>:
      D.21509 = from->size;
      D.21510 = to->size;
      if (D.21509 != D.21510) goto <D.21511>; else goto <D.21512>;
      <D.21511>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.21509 = from->size;
        D.21513 = (int) D.21509;
        D.21510 = to->size;
        D.21514 = (int) D.21510;
        D.21515 = ctx->ip_offset;
        D.21516 = monoeg_g_strdup_printf ("Could not merge stacks, different sizes (%d x %d) at 0x%04x", D.21513, D.21514, D.21515);
        vinfo->info.message = D.21516;
        vinfo->exception_type = 3;
        D.21517 = ctx->list;
        D.21518 = monoeg_g_slist_prepend (D.21517, vinfo);
        ctx->list = D.21518;
      }
      ctx->valid = 0;
      goto end_verify;
      <D.21512>:
      i = 0;
      goto <D.18975>;
      <D.18974>:
      {
        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.21519 = from->stack;
        i.48 = (unsigned int) i;
        D.21521 = i.48 * 12;
        new_slot = D.21519 + D.21521;
        D.21522 = to->stack;
        i.48 = (unsigned int) i;
        D.21521 = i.48 * 12;
        old_slot = D.21522 + D.21521;
        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.21523 = verify_stack_type_compatibility (ctx, old_type, new_slot);
        if (D.21523 != 0) goto <D.21524>; else goto <D.21525>;
        <D.21524>:
        copy_stack_value (new_slot, old_slot);
        // predicted unlikely by continue predictor.
        goto <D.18955>;
        <D.21525>:
        D.21526 = verify_stack_type_compatibility (ctx, new_type, old_slot);
        if (D.21526 != 0) goto <D.21527>; else goto <D.21528>;
        <D.21527>:
        copy_stack_value (old_slot, new_slot);
        // predicted unlikely by continue predictor.
        goto <D.18955>;
        <D.21528>:
        D.21529 = stack_slot_is_boxed_value (old_slot);
        if (D.21529 != 0) goto <D.21530>; else goto <D.21531>;
        <D.21530>:
        D.21532 = stack_slot_is_boxed_value (new_slot);
        if (D.21532 != 0) goto <D.21533>; else goto <D.21534>;
        <D.21533>:
        D.21535 = mono_metadata_type_equal (old_type, new_type);
        if (D.21535 != 0) goto <D.21536>; else goto <D.21537>;
        <D.21536>:
        copy_stack_value (new_slot, old_slot);
        // predicted unlikely by continue predictor.
        goto <D.18955>;
        <D.21537>:
        <D.21534>:
        <D.21531>:
        D.21540 = mono_type_is_generic_argument (old_type);
        if (D.21540 != 0) goto <D.21538>; else goto <D.21541>;
        <D.21541>:
        D.21542 = mono_type_is_generic_argument (new_type);
        if (D.21542 != 0) goto <D.21538>; else goto <D.21539>;
        <D.21538>:
        {
          char * old_name;
          char * new_name;

          old_name = stack_slot_full_name (old_slot);
          new_name = stack_slot_full_name (new_slot);
          D.21545 = ctx->verifiable;
          if (D.21545 != 0) goto <D.21543>; else goto <D.21546>;
          <D.21546>:
          D.21547 = ctx->level;
          D.21548 = D.21547 & 128;
          if (D.21548 != 0) goto <D.21543>; else goto <D.21544>;
          <D.21543>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.21515 = ctx->ip_offset;
            D.21549 = 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.21515);
            vinfo->info.message = D.21549;
            vinfo->exception_type = 4;
            D.21517 = ctx->list;
            D.21550 = monoeg_g_slist_prepend (D.21517, vinfo);
            ctx->list = D.21550;
          }
          ctx->verifiable = 0;
          D.21547 = ctx->level;
          D.21551 = D.21547 & 16;
          if (D.21551 != 0) goto <D.21552>; else goto <D.21553>;
          <D.21552>:
          ctx->valid = 0;
          <D.21553>:
          <D.21544>:
          monoeg_g_free (old_name);
          monoeg_g_free (new_name);
          goto end_verify;
        }
        <D.21539>:
        D.21555 = mono_class_from_mono_type (old_type);
        D.21556 = BIT_FIELD_REF <*D.21555, 32, 160>;
        D.21557 = D.21556 & 8;
        if (D.21557 == 0) goto <D.21558>; else goto <D.21554>;
        <D.21558>:
        D.21559 = mono_class_from_mono_type (new_type);
        D.21560 = BIT_FIELD_REF <*D.21559, 32, 160>;
        D.21561 = D.21560 & 8;
        if (D.21561 == 0) goto <D.21562>; else goto <D.21554>;
        <D.21562>:
        D.21563 = stack_slot_is_managed_pointer (old_slot);
        if (D.21563 == 0) goto <D.21564>; else goto <D.21554>;
        <D.21564>:
        D.21565 = stack_slot_is_managed_pointer (new_slot);
        if (D.21565 == 0) goto <D.21566>; else goto <D.21554>;
        <D.21566>:
        mono_class_setup_supertypes (old_class);
        mono_class_setup_supertypes (new_class);
        D.21567 = new_class->idepth;
        D.21568 = old_class->idepth;
        D.21569 = MIN_EXPR <D.21567, D.21568>;
        D.21570 = (int) D.21569;
        j = D.21570 + -1;
        goto <D.18961>;
        <D.18960>:
        D.21571 = old_class->supertypes;
        j.49 = (unsigned int) j;
        D.21573 = j.49 * 4;
        D.21574 = D.21571 + D.21573;
        D.21575 = *D.21574;
        D.21576 = &D.21575->byval_arg;
        D.21577 = new_class->supertypes;
        j.49 = (unsigned int) j;
        D.21573 = j.49 * 4;
        D.21578 = D.21577 + D.21573;
        D.21579 = *D.21578;
        D.21580 = &D.21579->byval_arg;
        D.21581 = mono_metadata_type_equal (D.21576, D.21580);
        if (D.21581 != 0) goto <D.21582>; else goto <D.21583>;
        <D.21582>:
        D.21571 = old_class->supertypes;
        j.49 = (unsigned int) j;
        D.21573 = j.49 * 4;
        D.21574 = D.21571 + D.21573;
        match_class = *D.21574;
        goto match_found;
        <D.21583>:
        j = j + -1;
        <D.18961>:
        if (j > 0) goto <D.18960>; else goto <D.18962>;
        <D.18962>:
        mono_class_setup_interfaces (old_class, &error);
        D.21584 = mono_error_ok (&error);
        if (D.21584 == 0) goto <D.21585>; else goto <D.21586>;
        <D.21585>:
        D.21545 = ctx->verifiable;
        if (D.21545 != 0) goto <D.21587>; else goto <D.21589>;
        <D.21589>:
        D.21547 = ctx->level;
        D.21548 = D.21547 & 128;
        if (D.21548 != 0) goto <D.21587>; else goto <D.21588>;
        <D.21587>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.21590 = mono_error_get_message (&error);
          D.21515 = ctx->ip_offset;
          D.21591 = monoeg_g_strdup_printf ("Cannot merge stacks due to a TypeLoadException %s at 0x%04x", D.21590, D.21515);
          vinfo->info.message = D.21591;
          vinfo->exception_type = 4;
          D.21517 = ctx->list;
          D.21592 = monoeg_g_slist_prepend (D.21517, vinfo);
          ctx->list = D.21592;
        }
        ctx->verifiable = 0;
        D.21547 = ctx->level;
        D.21551 = D.21547 & 16;
        if (D.21551 != 0) goto <D.21593>; else goto <D.21594>;
        <D.21593>:
        ctx->valid = 0;
        <D.21594>:
        <D.21588>:
        mono_error_cleanup (&error);
        goto end_verify;
        <D.21586>:
        mono_class_setup_interfaces (new_class, &error);
        D.21595 = mono_error_ok (&error);
        if (D.21595 == 0) goto <D.21596>; else goto <D.21597>;
        <D.21596>:
        D.21545 = ctx->verifiable;
        if (D.21545 != 0) goto <D.21598>; else goto <D.21600>;
        <D.21600>:
        D.21547 = ctx->level;
        D.21548 = D.21547 & 128;
        if (D.21548 != 0) goto <D.21598>; else goto <D.21599>;
        <D.21598>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.21601 = mono_error_get_message (&error);
          D.21515 = ctx->ip_offset;
          D.21602 = monoeg_g_strdup_printf ("Cannot merge stacks due to a TypeLoadException %s at 0x%04x", D.21601, D.21515);
          vinfo->info.message = D.21602;
          vinfo->exception_type = 4;
          D.21517 = ctx->list;
          D.21603 = monoeg_g_slist_prepend (D.21517, vinfo);
          ctx->list = D.21603;
        }
        ctx->verifiable = 0;
        D.21547 = ctx->level;
        D.21551 = D.21547 & 16;
        if (D.21551 != 0) goto <D.21604>; else goto <D.21605>;
        <D.21604>:
        ctx->valid = 0;
        <D.21605>:
        <D.21599>:
        mono_error_cleanup (&error);
        goto end_verify;
        <D.21597>:
        D.21606 = old_class->flags;
        D.21607 = D.21606 & 32;
        if (D.21607 != 0) goto <D.21608>; else goto <D.21609>;
        <D.21608>:
        D.21610 = verifier_class_is_assignable_from (old_class, new_class);
        if (D.21610 != 0) goto <D.21611>; else goto <D.21612>;
        <D.21611>:
        match_class = old_class;
        goto match_found;
        <D.21612>:
        j = 0;
        goto <D.18966>;
        <D.18965>:
        D.21613 = old_class->interfaces;
        j.49 = (unsigned int) j;
        D.21573 = j.49 * 4;
        D.21614 = D.21613 + D.21573;
        D.21615 = *D.21614;
        D.21616 = verifier_class_is_assignable_from (D.21615, new_class);
        if (D.21616 != 0) goto <D.21617>; else goto <D.21618>;
        <D.21617>:
        D.21613 = old_class->interfaces;
        j.49 = (unsigned int) j;
        D.21573 = j.49 * 4;
        D.21614 = D.21613 + D.21573;
        match_class = *D.21614;
        goto match_found;
        <D.21618>:
        j = j + 1;
        <D.18966>:
        D.21619 = old_class->interface_count;
        D.21620 = (int) D.21619;
        if (D.21620 > j) goto <D.18965>; else goto <D.18967>;
        <D.18967>:
        <D.21609>:
        D.21621 = new_class->flags;
        D.21622 = D.21621 & 32;
        if (D.21622 != 0) goto <D.21623>; else goto <D.21624>;
        <D.21623>:
        D.21625 = verifier_class_is_assignable_from (new_class, old_class);
        if (D.21625 != 0) goto <D.21626>; else goto <D.21627>;
        <D.21626>:
        match_class = new_class;
        goto match_found;
        <D.21627>:
        j = 0;
        goto <D.18969>;
        <D.18968>:
        D.21628 = new_class->interfaces;
        j.49 = (unsigned int) j;
        D.21573 = j.49 * 4;
        D.21629 = D.21628 + D.21573;
        D.21630 = *D.21629;
        D.21631 = verifier_class_is_assignable_from (D.21630, old_class);
        if (D.21631 != 0) goto <D.21632>; else goto <D.21633>;
        <D.21632>:
        D.21628 = new_class->interfaces;
        j.49 = (unsigned int) j;
        D.21573 = j.49 * 4;
        D.21629 = D.21628 + D.21573;
        match_class = *D.21629;
        goto match_found;
        <D.21633>:
        j = j + 1;
        <D.18969>:
        D.21634 = new_class->interface_count;
        D.21635 = (int) D.21634;
        if (D.21635 > j) goto <D.18968>; else goto <D.18970>;
        <D.18970>:
        <D.21624>:
        match_class = mono_defaults.object_class;
        goto match_found;
        <D.21554>:
        D.21638 = is_compatible_boxed_valuetype (ctx, old_type, new_type, new_slot, 0);
        if (D.21638 != 0) goto <D.21636>; else goto <D.21639>;
        <D.21639>:
        D.21640 = is_compatible_boxed_valuetype (ctx, new_type, old_type, old_slot, 0);
        if (D.21640 != 0) goto <D.21636>; else goto <D.21637>;
        <D.21636>:
        match_class = mono_defaults.object_class;
        goto match_found;
        <D.21637>:
        {
          char * old_name;
          char * new_name;

          old_name = stack_slot_full_name (old_slot);
          new_name = stack_slot_full_name (new_slot);
          D.21545 = ctx->verifiable;
          if (D.21545 != 0) goto <D.21641>; else goto <D.21643>;
          <D.21643>:
          D.21547 = ctx->level;
          D.21548 = D.21547 & 128;
          if (D.21548 != 0) goto <D.21641>; else goto <D.21642>;
          <D.21641>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.21515 = ctx->ip_offset;
            D.21644 = 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.21515);
            vinfo->info.message = D.21644;
            vinfo->exception_type = 4;
            D.21517 = ctx->list;
            D.21645 = monoeg_g_slist_prepend (D.21517, vinfo);
            ctx->list = D.21645;
          }
          ctx->verifiable = 0;
          D.21547 = ctx->level;
          D.21551 = D.21547 & 16;
          if (D.21551 != 0) goto <D.21646>; else goto <D.21647>;
          <D.21646>:
          ctx->valid = 0;
          <D.21647>:
          <D.21642>:
          monoeg_g_free (old_name);
          monoeg_g_free (new_name);
        }
        D.21648 = &new_class->byval_arg;
        D.21649 = stack_slot_is_managed_pointer (old_slot);
        set_stack_value (ctx, old_slot, D.21648, D.21649);
        goto end_verify;
        match_found:
        D.21650 = match_class == 0B;
        D.21651 = (long int) D.21650;
        D.21652 = __builtin_expect (D.21651, 0);
        if (D.21652 != 0) goto <D.21653>; else goto <D.21654>;
        <D.21653>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 4668, "match_class");
        <D.21654>:
        D.21655 = &match_class->byval_arg;
        D.21656 = stack_slot_is_managed_pointer (old_slot);
        set_stack_value (ctx, old_slot, D.21655, D.21656);
        D.21655 = &match_class->byval_arg;
        D.21657 = stack_slot_is_managed_pointer (old_slot);
        set_stack_value (ctx, new_slot, D.21655, D.21657);
        // predicted unlikely by continue predictor.
        goto <D.18955>;
      }
      <D.18955>:
      i = i + 1;
      <D.18975>:
      D.21509 = from->size;
      D.21513 = (int) D.21509;
      if (D.21513 > i) goto <D.18974>; else goto <D.18976>;
      <D.18976>:
      end_verify:
      if (external != 0) goto <D.21658>; else goto <D.21659>;
      <D.21658>:
      D.21500 = to->flags;
      D.21660 = D.21500 | 2;
      to->flags = D.21660;
      <D.21659>:
      D.21500 = to->flags;
      D.21661 = D.21500 | 8;
      to->flags = D.21661;
    }
  finally
    {
      error = {CLOBBER};
    }
}


stack_copy (struct ILCodeDesc * to, struct ILCodeDesc * from)
{
  short unsigned int D.21662;
  int D.21663;
  struct ILStackDesc * D.21666;
  struct ILStackDesc * D.21667;
  unsigned int D.21668;
  unsigned int D.21669;

  D.21662 = from->size;
  D.21663 = (int) D.21662;
  ensure_stack_size (to, D.21663);
  D.21662 = from->size;
  to->size = D.21662;
  D.21662 = from->size;
  if (D.21662 != 0) goto <D.21664>; else goto <D.21665>;
  <D.21664>:
  D.21666 = to->stack;
  D.21667 = from->stack;
  D.21662 = from->size;
  D.21668 = (unsigned int) D.21662;
  D.21669 = D.21668 * 12;
  memcpy (D.21666, D.21667, D.21669);
  <D.21665>:
}


mono_type_from_stack_slot (struct ILStackDesc * slot)
{
  int D.21670;
  struct MonoType * D.21673;
  struct MonoType * D.21674;

  D.21670 = stack_slot_is_managed_pointer (slot);
  if (D.21670 != 0) goto <D.21671>; else goto <D.21672>;
  <D.21671>:
  D.21674 = slot->type;
  D.21673 = mono_type_get_type_byref (D.21674);
  return D.21673;
  <D.21672>:
  D.21673 = slot->type;
  return D.21673;
}


mono_type_get_type_byref (struct MonoType * type)
{
  unsigned int D.21676;
  unsigned int D.21677;
  struct MonoType * D.21680;
  struct MonoClass * D.21681;

  D.21676 = BIT_FIELD_REF <*type, 32, 32>;
  D.21677 = D.21676 & 1073741824;
  if (D.21677 != 0) goto <D.21678>; else goto <D.21679>;
  <D.21678>:
  D.21680 = type;
  return D.21680;
  <D.21679>:
  D.21681 = mono_class_from_mono_type (type);
  D.21680 = &D.21681->this_arg;
  return D.21680;
}


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

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


verify_stack_type_compatibility_full (struct VerifyContext * ctx, struct MonoType * type, struct ILStackDesc * stack, gboolean drop_byref, gboolean valuetype_must_be_boxed)
{
  int D.21685;
  unsigned int D.21688;
  unsigned int D.21689;
  int D.21692;
  int D.21695;
  int D.21696;
  int D.21701;
  int D.21704;
  int D.21709;
  struct MonoType * D.21714;
  struct MonoType * candidate;

  candidate = mono_type_from_stack_slot (stack);
  D.21685 = mono_type_is_reference (type);
  if (D.21685 != 0) goto <D.21686>; else goto <D.21687>;
  <D.21686>:
  D.21688 = BIT_FIELD_REF <*type, 32, 32>;
  D.21689 = D.21688 & 1073741824;
  if (D.21689 == 0) goto <D.21690>; else goto <D.21691>;
  <D.21690>:
  D.21692 = stack_slot_is_null_literal (stack);
  if (D.21692 != 0) goto <D.21693>; else goto <D.21694>;
  <D.21693>:
  D.21695 = 1;
  return D.21695;
  <D.21694>:
  <D.21691>:
  <D.21687>:
  D.21696 = is_compatible_boxed_valuetype (ctx, type, candidate, stack, 1);
  if (D.21696 != 0) goto <D.21697>; else goto <D.21698>;
  <D.21697>:
  D.21695 = 1;
  return D.21695;
  <D.21698>:
  if (valuetype_must_be_boxed != 0) goto <D.21699>; else goto <D.21700>;
  <D.21699>:
  D.21701 = stack_slot_is_boxed_value (stack);
  if (D.21701 == 0) goto <D.21702>; else goto <D.21703>;
  <D.21702>:
  D.21704 = mono_type_is_reference (candidate);
  if (D.21704 == 0) goto <D.21705>; else goto <D.21706>;
  <D.21705>:
  D.21695 = 0;
  return D.21695;
  <D.21706>:
  <D.21703>:
  <D.21700>:
  if (valuetype_must_be_boxed == 0) goto <D.21707>; else goto <D.21708>;
  <D.21707>:
  D.21709 = stack_slot_is_boxed_value (stack);
  if (D.21709 != 0) goto <D.21710>; else goto <D.21711>;
  <D.21710>:
  D.21695 = 0;
  return D.21695;
  <D.21711>:
  <D.21708>:
  if (drop_byref != 0) goto <D.21712>; else goto <D.21713>;
  <D.21712>:
  D.21714 = mono_type_get_type_byval (candidate);
  D.21695 = verify_type_compatibility_full (ctx, type, D.21714, 0);
  return D.21695;
  <D.21713>:
  D.21695 = verify_type_compatibility_full (ctx, type, candidate, 0);
  return D.21695;
}


stack_slot_is_null_literal (struct ILStackDesc * value)
{
  gboolean D.21716;
  int D.21717;
  int D.21718;
  _Bool D.21719;

  D.21717 = value->stype;
  D.21718 = D.21717 & 1024;
  D.21719 = D.21718 != 0;
  D.21716 = (gboolean) D.21719;
  return D.21716;
}


mono_type_get_type_byval (struct MonoType * type)
{
  unsigned int D.21721;
  unsigned int D.21722;
  struct MonoType * D.21725;
  struct MonoClass * D.21726;

  D.21721 = BIT_FIELD_REF <*type, 32, 32>;
  D.21722 = D.21721 & 1073741824;
  if (D.21722 == 0) goto <D.21723>; else goto <D.21724>;
  <D.21723>:
  D.21725 = type;
  return D.21725;
  <D.21724>:
  D.21726 = mono_class_from_mono_type (type);
  D.21725 = &D.21726->byval_arg;
  return D.21725;
}


verify_type_compatibility_full (struct VerifyContext * ctx, struct MonoType * target, struct MonoType * candidate, gboolean strict)
{
  unsigned int D.21728;
  unsigned int D.21729;
  unsigned int D.21730;
  unsigned int D.21731;
  int D.21734;
  unsigned int D.21737;
  int D.21742;
  int D.21744;
  int D.21745;
  unsigned int D.21746;
  gchar * D.21747;
  struct GSList * D.21748;
  struct GSList * D.21749;
  int D.21750;
  gboolean D.21753;
  <unnamed-unsigned:1> D.21754;
  int D.21755;
  unsigned char D.21756;
  int D.21757;
  unsigned char D.21758;
  _Bool D.21759;
  int iftmp.50;
  unsigned char D.21766;
  int iftmp.51;
  unsigned char D.21774;
  unsigned char D.21776;
  _Bool D.21777;
  unsigned char D.21778;
  _Bool D.21779;
  int iftmp.52;
  int iftmp.53;
  int D.21792;
  unsigned char D.21793;
  _Bool D.21794;
  _Bool D.21797;
  unsigned char D.21798;
  _Bool D.21799;
  int iftmp.54;
  int iftmp.55;
  int D.21812;
  struct MonoType * D.21815;
  struct MonoType * D.21816;
  int iftmp.56;
  int D.21822;
  unsigned int D.21824;
  unsigned int D.21825;
  unsigned int D.21826;
  unsigned int D.21827;
  int D.21829;
  int D.21834;
  int D.21837;
  int D.21840;
  _Bool D.21843;
  _Bool D.21844;
  int D.21845;
  struct MonoClass * D.21850;
  struct MonoClass * D.21851;
  _Bool D.21856;
  int D.21861;
  struct MonoGenericParam * D.21868;
  short unsigned int D.21869;
  struct MonoGenericParam * D.21870;
  short unsigned int D.21871;
  _Bool D.21872;
  struct MonoType * original_candidate;
  void handle_enum = <<< error >>>;

  original_candidate = candidate;
  D.21728 = BIT_FIELD_REF <*candidate, 32, 32>;
  D.21729 = BIT_FIELD_REF <*target, 32, 32>;
  D.21730 = D.21728 ^ D.21729;
  D.21731 = D.21730 & 1073741824;
  if (D.21731 != 0) goto <D.21732>; else goto <D.21733>;
  <D.21732>:
  D.21734 = get_stack_type (candidate);
  if (D.21734 == 3) goto <D.21735>; else goto <D.21736>;
  <D.21735>:
  D.21729 = BIT_FIELD_REF <*target, 32, 32>;
  D.21737 = D.21729 & 1073741824;
  if (D.21737 != 0) goto <D.21738>; else goto <D.21739>;
  <D.21738>:
  D.21742 = ctx->verifiable;
  if (D.21742 != 0) goto <D.21740>; else goto <D.21743>;
  <D.21743>:
  D.21744 = ctx->level;
  D.21745 = D.21744 & 128;
  if (D.21745 != 0) goto <D.21740>; else goto <D.21741>;
  <D.21740>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.21746 = ctx->ip_offset;
    D.21747 = monoeg_g_strdup_printf ("using byref native int at 0x%04x", D.21746);
    vinfo->info.message = D.21747;
    vinfo->exception_type = 4;
    D.21748 = ctx->list;
    D.21749 = monoeg_g_slist_prepend (D.21748, vinfo);
    ctx->list = D.21749;
  }
  ctx->verifiable = 0;
  D.21744 = ctx->level;
  D.21750 = D.21744 & 16;
  if (D.21750 != 0) goto <D.21751>; else goto <D.21752>;
  <D.21751>:
  ctx->valid = 0;
  <D.21752>:
  <D.21741>:
  D.21753 = 1;
  return D.21753;
  <D.21739>:
  <D.21736>:
  D.21753 = 0;
  return D.21753;
  <D.21733>:
  D.21754 = target->byref;
  D.21755 = (int) D.21754;
  strict = D.21755 | strict;
  candidate = mono_type_get_underlying_type_any (candidate);
  handle_enum:
  D.21756 = target->type;
  D.21757 = (int) D.21756;
  switch (D.21757) <default: <D.18162>, case 1: <D.18123>, case 2: <D.18126>, case 3: <D.18129>, case 4: <D.18124>, case 5: <D.18125>, case 6: <D.18127>, case 7: <D.18128>, case 8: <D.18130>, case 9: <D.18131>, case 10: <D.18134>, case 11: <D.18135>, case 12: <D.18136>, case 13: <D.18137>, case 14: <D.18149>, case 15: <D.18142>, case 17: <D.18157>, case 18: <D.18150>, case 19: <D.18160>, case 20: <D.18155>, case 21: <D.18146>, case 22: <D.18156>, case 24: <D.18138>, case 25: <D.18139>, case 27: <D.18143>, case 28: <D.18151>, case 29: <D.18152>, case 30: <D.18161>>
  <D.18123>:
  D.21758 = candidate->type;
  D.21759 = D.21758 == 1;
  D.21753 = (gboolean) D.21759;
  return D.21753;
  <D.18124>:
  <D.18125>:
  <D.18126>:
  if (strict != 0) goto <D.21760>; else goto <D.21761>;
  <D.21760>:
  D.21758 = candidate->type;
  D.21766 = D.21758 + 252;
  if (D.21766 <= 1) goto <D.21763>; else goto <D.21767>;
  <D.21767>:
  D.21758 = candidate->type;
  if (D.21758 == 2) goto <D.21763>; else goto <D.21764>;
  <D.21763>:
  iftmp.50 = 1;
  goto <D.21765>;
  <D.21764>:
  iftmp.50 = 0;
  <D.21765>:
  D.21753 = iftmp.50;
  return D.21753;
  <D.21761>:
  <D.18127>:
  <D.18128>:
  <D.18129>:
  if (strict != 0) goto <D.21768>; else goto <D.21769>;
  <D.21768>:
  D.21758 = candidate->type;
  D.21774 = D.21758 + 250;
  if (D.21774 <= 1) goto <D.21771>; else goto <D.21775>;
  <D.21775>:
  D.21758 = candidate->type;
  if (D.21758 == 3) goto <D.21771>; else goto <D.21772>;
  <D.21771>:
  iftmp.51 = 1;
  goto <D.21773>;
  <D.21772>:
  iftmp.51 = 0;
  <D.21773>:
  D.21753 = iftmp.51;
  return D.21753;
  <D.21769>:
  <D.18130>:
  <D.18131>:
  {
    gboolean is_native_int;
    gboolean is_int4;

    D.21758 = candidate->type;
    D.21776 = D.21758 + 232;
    D.21777 = D.21776 <= 1;
    is_native_int = (gboolean) D.21777;
    D.21758 = candidate->type;
    D.21778 = D.21758 + 248;
    D.21779 = D.21778 <= 1;
    is_int4 = (gboolean) D.21779;
    if (strict != 0) goto <D.21780>; else goto <D.21781>;
    <D.21780>:
    if (is_native_int != 0) goto <D.21783>; else goto <D.21786>;
    <D.21786>:
    if (is_int4 != 0) goto <D.21783>; else goto <D.21784>;
    <D.21783>:
    iftmp.52 = 1;
    goto <D.21785>;
    <D.21784>:
    iftmp.52 = 0;
    <D.21785>:
    D.21753 = iftmp.52;
    return D.21753;
    <D.21781>:
    if (is_native_int != 0) goto <D.21788>; else goto <D.21791>;
    <D.21791>:
    D.21792 = get_stack_type (candidate);
    if (D.21792 == 1) goto <D.21788>; else goto <D.21789>;
    <D.21788>:
    iftmp.53 = 1;
    goto <D.21790>;
    <D.21789>:
    iftmp.53 = 0;
    <D.21790>:
    D.21753 = iftmp.53;
    return D.21753;
  }
  <D.18134>:
  <D.18135>:
  D.21758 = candidate->type;
  D.21793 = D.21758 + 246;
  D.21794 = D.21793 <= 1;
  D.21753 = (gboolean) D.21794;
  return D.21753;
  <D.18136>:
  <D.18137>:
  if (strict != 0) goto <D.21795>; else goto <D.21796>;
  <D.21795>:
  D.21758 = candidate->type;
  D.21756 = target->type;
  D.21797 = D.21758 == D.21756;
  D.21753 = (gboolean) D.21797;
  return D.21753;
  <D.21796>:
  D.21758 = candidate->type;
  D.21798 = D.21758 + 244;
  D.21799 = D.21798 <= 1;
  D.21753 = (gboolean) D.21799;
  return D.21753;
  <D.18138>:
  <D.18139>:
  {
    gboolean is_native_int;
    gboolean is_int4;

    D.21758 = candidate->type;
    D.21776 = D.21758 + 232;
    D.21777 = D.21776 <= 1;
    is_native_int = (gboolean) D.21777;
    D.21758 = candidate->type;
    D.21778 = D.21758 + 248;
    D.21779 = D.21778 <= 1;
    is_int4 = (gboolean) D.21779;
    if (strict != 0) goto <D.21800>; else goto <D.21801>;
    <D.21800>:
    if (is_native_int != 0) goto <D.21803>; else goto <D.21806>;
    <D.21806>:
    if (is_int4 != 0) goto <D.21803>; else goto <D.21804>;
    <D.21803>:
    iftmp.54 = 1;
    goto <D.21805>;
    <D.21804>:
    iftmp.54 = 0;
    <D.21805>:
    D.21753 = iftmp.54;
    return D.21753;
    <D.21801>:
    if (is_native_int != 0) goto <D.21808>; else goto <D.21811>;
    <D.21811>:
    D.21812 = get_stack_type (candidate);
    if (D.21812 == 1) goto <D.21808>; else goto <D.21809>;
    <D.21808>:
    iftmp.55 = 1;
    goto <D.21810>;
    <D.21809>:
    iftmp.55 = 0;
    <D.21810>:
    D.21753 = iftmp.55;
    return D.21753;
  }
  <D.18142>:
  D.21758 = candidate->type;
  if (D.21758 != 15) goto <D.21813>; else goto <D.21814>;
  <D.21813>:
  D.21753 = 0;
  return D.21753;
  <D.21814>:
  D.21815 = target->data.type;
  D.21816 = candidate->data.type;
  D.21753 = verify_type_compatibility_full (ctx, D.21815, D.21816, 1);
  return D.21753;
  <D.18143>:
  {
    struct MonoMethodSignature * left;
    struct MonoMethodSignature * right;

    D.21758 = candidate->type;
    if (D.21758 != 27) goto <D.21817>; else goto <D.21818>;
    <D.21817>:
    D.21753 = 0;
    return D.21753;
    <D.21818>:
    left = mono_type_get_signature (target);
    right = mono_type_get_signature (candidate);
    D.21822 = mono_metadata_signature_equal (left, right);
    if (D.21822 != 0) goto <D.21823>; else goto <D.21820>;
    <D.21823>:
    D.21824 = BIT_FIELD_REF <*left, 32, 64>;
    D.21825 = BIT_FIELD_REF <*right, 32, 64>;
    D.21826 = D.21824 ^ D.21825;
    D.21827 = D.21826 & 4128768;
    if (D.21827 == 0) goto <D.21828>; else goto <D.21820>;
    <D.21828>:
    iftmp.56 = 1;
    goto <D.21821>;
    <D.21820>:
    iftmp.56 = 0;
    <D.21821>:
    D.21753 = iftmp.56;
    return D.21753;
  }
  <D.18146>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    D.21829 = mono_type_is_enum_type (target);
    if (D.21829 != 0) goto <D.21830>; else goto <D.21831>;
    <D.21830>:
    target = mono_type_get_underlying_type_any (target);
    if (target == 0B) goto <D.21832>; else goto <D.21833>;
    <D.21832>:
    D.21753 = 0;
    return D.21753;
    <D.21833>:
    goto handle_enum;
    <D.21831>:
    D.21834 = mono_type_is_generic_argument (original_candidate);
    if (D.21834 != 0) goto <D.21835>; else goto <D.21836>;
    <D.21835>:
    D.21753 = 0;
    return D.21753;
    <D.21836>:
    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    D.21837 = mono_class_is_nullable (target_klass);
    if (D.21837 != 0) goto <D.21838>; else goto <D.21839>;
    <D.21838>:
    D.21840 = mono_class_is_nullable (candidate_klass);
    if (D.21840 == 0) goto <D.21841>; else goto <D.21842>;
    <D.21841>:
    D.21753 = 0;
    return D.21753;
    <D.21842>:
    D.21843 = target_klass == candidate_klass;
    D.21753 = (gboolean) D.21843;
    return D.21753;
    <D.21839>:
    D.21753 = verifier_class_is_assignable_from (target_klass, candidate_klass);
    return D.21753;
  }
  <D.18149>:
  D.21758 = candidate->type;
  D.21844 = D.21758 == 14;
  D.21753 = (gboolean) D.21844;
  return D.21753;
  <D.18150>:
  D.21845 = mono_type_is_generic_argument (original_candidate);
  if (D.21845 != 0) goto <D.21846>; else goto <D.21847>;
  <D.21846>:
  D.21753 = 0;
  return D.21753;
  <D.21847>:
  D.21758 = candidate->type;
  if (D.21758 == 17) goto <D.21848>; else goto <D.21849>;
  <D.21848>:
  D.21753 = 0;
  return D.21753;
  <D.21849>:
  D.21850 = target->data.klass;
  D.21851 = mono_class_from_mono_type (original_candidate);
  D.21753 = verifier_class_is_assignable_from (D.21850, D.21851);
  return D.21753;
  <D.18151>:
  D.21753 = mono_type_is_reference (candidate);
  return D.21753;
  <D.18152>:
  {
    struct MonoClass * left;
    struct MonoClass * right;

    D.21758 = candidate->type;
    if (D.21758 != 29) goto <D.21852>; else goto <D.21853>;
    <D.21852>:
    D.21753 = 0;
    return D.21753;
    <D.21853>:
    left = mono_class_from_mono_type (target);
    right = mono_class_from_mono_type (candidate);
    D.21753 = verifier_class_is_assignable_from (left, right);
    return D.21753;
  }
  <D.18155>:
  D.21758 = candidate->type;
  if (D.21758 != 20) goto <D.21854>; else goto <D.21855>;
  <D.21854>:
  D.21753 = 0;
  return D.21753;
  <D.21855>:
  D.21753 = is_array_type_compatible (target, candidate);
  return D.21753;
  <D.18156>:
  D.21758 = candidate->type;
  D.21856 = D.21758 == 22;
  D.21753 = (gboolean) D.21856;
  return D.21753;
  <D.18157>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    D.21758 = candidate->type;
    if (D.21758 == 18) goto <D.21857>; else goto <D.21858>;
    <D.21857>:
    D.21753 = 0;
    return D.21753;
    <D.21858>:
    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    if (target_klass == candidate_klass) goto <D.21859>; else goto <D.21860>;
    <D.21859>:
    D.21753 = 1;
    return D.21753;
    <D.21860>:
    D.21861 = mono_type_is_enum_type (target);
    if (D.21861 != 0) goto <D.21862>; else goto <D.21863>;
    <D.21862>:
    target = mono_type_get_underlying_type_any (target);
    if (target == 0B) goto <D.21864>; else goto <D.21865>;
    <D.21864>:
    D.21753 = 0;
    return D.21753;
    <D.21865>:
    goto handle_enum;
    <D.21863>:
    D.21753 = 0;
    return D.21753;
  }
  <D.18160>:
  D.21758 = candidate->type;
  if (D.21758 != 19) goto <D.21866>; else goto <D.21867>;
  <D.21866>:
  D.21753 = 0;
  return D.21753;
  <D.21867>:
  D.21868 = candidate->data.generic_param;
  D.21869 = D.21868->num;
  D.21870 = target->data.generic_param;
  D.21871 = D.21870->num;
  D.21872 = D.21869 == D.21871;
  D.21753 = (gboolean) D.21872;
  return D.21753;
  <D.18161>:
  D.21758 = candidate->type;
  if (D.21758 != 30) goto <D.21873>; else goto <D.21874>;
  <D.21873>:
  D.21753 = 0;
  return D.21753;
  <D.21874>:
  D.21868 = candidate->data.generic_param;
  D.21869 = D.21868->num;
  D.21870 = target->data.generic_param;
  D.21871 = D.21870->num;
  D.21872 = D.21869 == D.21871;
  D.21753 = (gboolean) D.21872;
  return D.21753;
  <D.18162>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "verify.c", 2389);
  D.21753 = 0;
  return D.21753;
  D.21753 = 1;
  return D.21753;
}


stack_slot_is_boxed_value (struct ILStackDesc * value)
{
  gboolean D.21876;
  int D.21877;
  int D.21878;
  _Bool D.21879;

  D.21877 = value->stype;
  D.21878 = D.21877 & 4096;
  D.21879 = D.21878 != 0;
  D.21876 = (gboolean) D.21879;
  return D.21876;
}


is_compatible_boxed_valuetype (struct VerifyContext * ctx, struct MonoType * type, struct MonoType * candidate, struct ILStackDesc * stack, gboolean strict)
{
  int D.21881;
  gboolean D.21884;
  unsigned int D.21887;
  unsigned int D.21888;
  unsigned int D.21890;
  unsigned int D.21891;
  int D.21892;
  struct MonoGenericParamInfo * iftmp.57;
  struct MonoGenericContainer * D.21898;
  struct MonoClass * D.21902;
  int D.21903;
  int D.21907;
  int iftmp.58;
  int D.21915;
  struct MonoClass * D.21917;
  struct MonoClass * D.21918;
  int D.21919;

  D.21881 = stack_slot_is_boxed_value (stack);
  if (D.21881 == 0) goto <D.21882>; else goto <D.21883>;
  <D.21882>:
  D.21884 = 0;
  return D.21884;
  <D.21883>:
  D.21887 = BIT_FIELD_REF <*type, 32, 32>;
  D.21888 = D.21887 & 1073741824;
  if (D.21888 != 0) goto <D.21885>; else goto <D.21889>;
  <D.21889>:
  D.21890 = BIT_FIELD_REF <*candidate, 32, 32>;
  D.21891 = D.21890 & 1073741824;
  if (D.21891 != 0) goto <D.21885>; else goto <D.21886>;
  <D.21885>:
  D.21884 = 0;
  return D.21884;
  <D.21886>:
  D.21892 = mono_type_is_generic_argument (candidate);
  if (D.21892 != 0) goto <D.21893>; else goto <D.21894>;
  <D.21893>:
  {
    struct MonoGenericParam * param;
    struct MonoClass * * class;

    param = get_generic_param (ctx, candidate);
    if (param == 0B) goto <D.21895>; else goto <D.21896>;
    <D.21895>:
    D.21884 = 0;
    return D.21884;
    <D.21896>:
    D.21898 = param->owner;
    if (D.21898 != 0B) goto <D.21899>; else goto <D.21900>;
    <D.21899>:
    iftmp.57 = &MEM[(struct MonoGenericParamFull *)param].info;
    goto <D.21901>;
    <D.21900>:
    iftmp.57 = 0B;
    <D.21901>:
    class = iftmp.57->constraints;
    goto <D.18197>;
    <D.18196>:
    D.21902 = *class;
    D.21903 = recursive_boxed_constraint_type_check (ctx, type, D.21902, 256);
    if (D.21903 != 0) goto <D.21904>; else goto <D.21905>;
    <D.21904>:
    D.21884 = 1;
    return D.21884;
    <D.21905>:
    class = class + 4;
    <D.18197>:
    if (class != 0B) goto <D.21906>; else goto <D.18198>;
    <D.21906>:
    D.21902 = *class;
    if (D.21902 != 0B) goto <D.18196>; else goto <D.18198>;
    <D.18198>:
  }
  <D.21894>:
  D.21907 = mono_type_is_generic_argument (type);
  if (D.21907 != 0) goto <D.21908>; else goto <D.21909>;
  <D.21908>:
  D.21884 = 0;
  return D.21884;
  <D.21909>:
  if (strict == 0) goto <D.21910>; else goto <D.21911>;
  <D.21910>:
  D.21884 = 1;
  return D.21884;
  <D.21911>:
  D.21915 = mono_type_is_reference (type);
  if (D.21915 != 0) goto <D.21916>; else goto <D.21913>;
  <D.21916>:
  D.21917 = mono_class_from_mono_type (type);
  D.21918 = mono_class_from_mono_type (candidate);
  D.21919 = verifier_class_is_assignable_from (D.21917, D.21918);
  if (D.21919 != 0) goto <D.21920>; else goto <D.21913>;
  <D.21920>:
  iftmp.58 = 1;
  goto <D.21914>;
  <D.21913>:
  iftmp.58 = 0;
  <D.21914>:
  D.21884 = iftmp.58;
  return D.21884;
}


get_generic_param (struct VerifyContext * ctx, struct MonoType * param)
{
  struct MonoGenericParam * D.21922;
  unsigned char D.21923;
  struct MonoGenericContext * D.21928;
  struct MonoGenericInst * D.21929;
  <unnamed-unsigned:22> D.21931;
  int D.21932;
  int D.21933;
  gchar * D.21934;
  struct GSList * D.21935;
  struct GSList * D.21936;
  struct MonoGenericParam * D.21937;
  struct MonoType * D.21938;
  struct MonoGenericInst * D.21941;
  <unnamed-unsigned:22> D.21943;
  int D.21944;
  gchar * D.21945;
  struct GSList * D.21946;
  struct MonoType * D.21947;
  guint16 param_num;

  D.21922 = param->data.generic_param;
  param_num = D.21922->num;
  D.21923 = param->type;
  if (D.21923 == 19) goto <D.21924>; else goto <D.21925>;
  <D.21924>:
  D.21928 = ctx->generic_context;
  D.21929 = D.21928->class_inst;
  if (D.21929 == 0B) goto <D.21926>; else goto <D.21930>;
  <D.21930>:
  D.21928 = ctx->generic_context;
  D.21929 = D.21928->class_inst;
  D.21931 = D.21929->type_argc;
  D.21932 = (int) D.21931;
  D.21933 = (int) param_num;
  if (D.21932 <= D.21933) goto <D.21926>; else goto <D.21927>;
  <D.21926>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21933 = (int) param_num;
    D.21934 = monoeg_g_strdup_printf ("Invalid generic type argument %d", D.21933);
    vinfo->info.message = D.21934;
    vinfo->exception_type = 3;
    D.21935 = ctx->list;
    D.21936 = monoeg_g_slist_prepend (D.21935, vinfo);
    ctx->list = D.21936;
  }
  ctx->valid = 0;
  D.21937 = 0B;
  return D.21937;
  <D.21927>:
  D.21928 = ctx->generic_context;
  D.21929 = D.21928->class_inst;
  D.21933 = (int) param_num;
  D.21938 = D.21929->type_argv[D.21933];
  D.21937 = D.21938->data.generic_param;
  return D.21937;
  <D.21925>:
  D.21928 = ctx->generic_context;
  D.21941 = D.21928->method_inst;
  if (D.21941 == 0B) goto <D.21939>; else goto <D.21942>;
  <D.21942>:
  D.21928 = ctx->generic_context;
  D.21941 = D.21928->method_inst;
  D.21943 = D.21941->type_argc;
  D.21944 = (int) D.21943;
  D.21933 = (int) param_num;
  if (D.21944 <= D.21933) goto <D.21939>; else goto <D.21940>;
  <D.21939>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21933 = (int) param_num;
    D.21945 = monoeg_g_strdup_printf ("Invalid generic method argument %d", D.21933);
    vinfo->info.message = D.21945;
    vinfo->exception_type = 3;
    D.21935 = ctx->list;
    D.21946 = monoeg_g_slist_prepend (D.21935, vinfo);
    ctx->list = D.21946;
  }
  ctx->valid = 0;
  D.21937 = 0B;
  return D.21937;
  <D.21940>:
  D.21928 = ctx->generic_context;
  D.21941 = D.21928->method_inst;
  D.21933 = (int) param_num;
  D.21947 = D.21941->type_argv[D.21933];
  D.21937 = D.21947->data.generic_param;
  return D.21937;
}


recursive_boxed_constraint_type_check (struct VerifyContext * ctx, struct MonoType * type, struct MonoClass * constraint_class, int recursion_level)
{
  gboolean D.21951;
  struct MonoType * D.21952;
  int D.21953;
  int D.21956;
  struct MonoGenericParamInfo * iftmp.59;
  struct MonoGenericContainer * D.21962;
  struct MonoClass * D.21966;
  int D.21967;
  int D.21968;
  struct MonoType * constraint_type;

  constraint_type = &constraint_class->byval_arg;
  if (recursion_level <= 0) goto <D.21949>; else goto <D.21950>;
  <D.21949>:
  D.21951 = 0;
  return D.21951;
  <D.21950>:
  D.21952 = mono_type_get_type_byval (constraint_type);
  D.21953 = verify_type_compatibility_full (ctx, type, D.21952, 0);
  if (D.21953 != 0) goto <D.21954>; else goto <D.21955>;
  <D.21954>:
  D.21951 = 1;
  return D.21951;
  <D.21955>:
  D.21956 = mono_type_is_generic_argument (constraint_type);
  if (D.21956 != 0) goto <D.21957>; else goto <D.21958>;
  <D.21957>:
  {
    struct MonoGenericParam * param;
    struct MonoClass * * class;

    param = get_generic_param (ctx, constraint_type);
    if (param == 0B) goto <D.21959>; else goto <D.21960>;
    <D.21959>:
    D.21951 = 0;
    return D.21951;
    <D.21960>:
    D.21962 = param->owner;
    if (D.21962 != 0B) goto <D.21963>; else goto <D.21964>;
    <D.21963>:
    iftmp.59 = &MEM[(struct MonoGenericParamFull *)param].info;
    goto <D.21965>;
    <D.21964>:
    iftmp.59 = 0B;
    <D.21965>:
    class = iftmp.59->constraints;
    goto <D.18185>;
    <D.18184>:
    D.21966 = *class;
    D.21967 = recursion_level + -1;
    D.21968 = recursive_boxed_constraint_type_check (ctx, type, D.21966, D.21967);
    if (D.21968 != 0) goto <D.21969>; else goto <D.21970>;
    <D.21969>:
    D.21951 = 1;
    return D.21951;
    <D.21970>:
    class = class + 4;
    <D.18185>:
    if (class != 0B) goto <D.21971>; else goto <D.18186>;
    <D.21971>:
    D.21966 = *class;
    if (D.21966 != 0B) goto <D.18184>; else goto <D.18186>;
    <D.18186>:
  }
  <D.21958>:
  D.21951 = 0;
  return D.21951;
}


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

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


stack_slot_stack_type_full_name (struct ILStackDesc * value)
{
  int D.21976;
  int D.21977;
  int D.21980;
  int D.21985;
  int D.21990;
  int D.21995;
  int D.22000;
  struct MonoType * D.22005;
  int D.22006;
  int D.22009;
  const char * D.22018;
  char * D.22019;
  struct GString * str;
  char * result;
  gboolean has_pred;
  gboolean first;

  str = monoeg_g_string_new ("");
  has_pred = 0;
  first = 1;
  D.21976 = value->stype;
  D.21977 = D.21976 & 15;
  D.21976 = value->stype;
  if (D.21977 != D.21976) goto <D.21978>; else goto <D.21979>;
  <D.21978>:
  monoeg_g_string_append (str, "[");
  D.21980 = stack_slot_is_this_pointer (value);
  if (D.21980 != 0) goto <D.21981>; else goto <D.21982>;
  <D.21981>:
  if (first == 0) goto <D.21983>; else goto <D.21984>;
  <D.21983>:
  monoeg_g_string_append (str, ", ");
  <D.21984>:
  monoeg_g_string_append (str, "this");
  first = 0;
  <D.21982>:
  D.21985 = stack_slot_is_boxed_value (value);
  if (D.21985 != 0) goto <D.21986>; else goto <D.21987>;
  <D.21986>:
  if (first == 0) goto <D.21988>; else goto <D.21989>;
  <D.21988>:
  monoeg_g_string_append (str, ", ");
  <D.21989>:
  monoeg_g_string_append (str, "boxed");
  first = 0;
  <D.21987>:
  D.21990 = stack_slot_is_null_literal (value);
  if (D.21990 != 0) goto <D.21991>; else goto <D.21992>;
  <D.21991>:
  if (first == 0) goto <D.21993>; else goto <D.21994>;
  <D.21993>:
  monoeg_g_string_append (str, ", ");
  <D.21994>:
  monoeg_g_string_append (str, "null");
  first = 0;
  <D.21992>:
  D.21995 = stack_slot_is_managed_mutability_pointer (value);
  if (D.21995 != 0) goto <D.21996>; else goto <D.21997>;
  <D.21996>:
  if (first == 0) goto <D.21998>; else goto <D.21999>;
  <D.21998>:
  monoeg_g_string_append (str, ", ");
  <D.21999>:
  monoeg_g_string_append (str, "cmmp");
  first = 0;
  <D.21997>:
  D.22000 = stack_slot_is_managed_pointer (value);
  if (D.22000 != 0) goto <D.22001>; else goto <D.22002>;
  <D.22001>:
  if (first == 0) goto <D.22003>; else goto <D.22004>;
  <D.22003>:
  monoeg_g_string_append (str, ", ");
  <D.22004>:
  monoeg_g_string_append (str, "mp");
  first = 0;
  <D.22002>:
  has_pred = 1;
  <D.21979>:
  D.22005 = value->type;
  D.22006 = mono_type_is_generic_argument (D.22005);
  if (D.22006 != 0) goto <D.22007>; else goto <D.22008>;
  <D.22007>:
  D.22009 = stack_slot_is_boxed_value (value);
  if (D.22009 == 0) goto <D.22010>; else goto <D.22011>;
  <D.22010>:
  if (has_pred == 0) goto <D.22012>; else goto <D.22013>;
  <D.22012>:
  monoeg_g_string_append (str, "[");
  <D.22013>:
  if (first == 0) goto <D.22014>; else goto <D.22015>;
  <D.22014>:
  monoeg_g_string_append (str, ", ");
  <D.22015>:
  monoeg_g_string_append (str, "unboxed");
  has_pred = 1;
  <D.22011>:
  <D.22008>:
  if (has_pred != 0) goto <D.22016>; else goto <D.22017>;
  <D.22016>:
  monoeg_g_string_append (str, "] ");
  <D.22017>:
  D.22018 = stack_slot_get_name (value);
  monoeg_g_string_append (str, D.22018);
  result = str->str;
  monoeg_g_string_free (str, 0);
  D.22019 = result;
  return D.22019;
}


stack_slot_is_this_pointer (struct ILStackDesc * value)
{
  gboolean D.22021;
  int D.22022;
  int D.22023;
  _Bool D.22024;

  D.22022 = value->stype;
  D.22023 = D.22022 & 2048;
  D.22024 = D.22023 != 0;
  D.22021 = (gboolean) D.22024;
  return D.22021;
}


stack_slot_is_managed_mutability_pointer (struct ILStackDesc * value)
{
  gboolean D.22026;
  int D.22027;
  int D.22028;
  _Bool D.22029;

  D.22027 = value->stype;
  D.22028 = D.22027 & 512;
  D.22029 = D.22028 != 0;
  D.22026 = (gboolean) D.22029;
  return D.22026;
}


stack_slot_get_name (struct ILStackDesc * value)
{
  const char * D.22031;
  int D.22032;
  int D.22033;

  D.22032 = value->stype;
  D.22033 = D.22032 & 15;
  D.22031 = type_names[D.22033];
  return D.22031;
}


stack_slot_is_managed_pointer (struct ILStackDesc * value)
{
  gboolean D.22035;
  int D.22036;
  int D.22037;
  _Bool D.22038;

  D.22036 = value->stype;
  D.22037 = D.22036 & 256;
  D.22038 = D.22037 != 0;
  D.22035 = (gboolean) D.22038;
  return D.22035;
}


do_binop (struct VerifyContext * ctx, unsigned int opcode, const unsigned char[6] * table)
{
  int D.22040;
  int D.22043;
  int D.22046;
  unsigned int idxa.60;
  unsigned int D.22050;
  const unsigned char[6] * D.22051;
  int D.22056;
  int D.22058;
  int D.22059;
  const char * D.22060;
  const char * D.22061;
  gchar * D.22062;
  struct GSList * D.22063;
  struct GSList * D.22064;
  int D.22065;
  signed char res.61;
  const char * D.22074;
  const char * D.22075;
  gchar * D.22076;
  struct GSList * D.22077;
  int D.22089;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  struct ILStackDesc * top;
  int idxa;
  int idxb;
  int complexMerge;
  unsigned char res;

  complexMerge = 0;
  D.22040 = check_underflow (ctx, 2);
  if (D.22040 == 0) goto <D.22041>; else goto <D.22042>;
  <D.22041>:
  return;
  <D.22042>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  idxa = stack_slot_get_underlying_type (a);
  D.22043 = stack_slot_is_managed_pointer (a);
  if (D.22043 != 0) goto <D.22044>; else goto <D.22045>;
  <D.22044>:
  idxa = 5;
  complexMerge = 1;
  <D.22045>:
  idxb = stack_slot_get_underlying_type (b);
  D.22046 = stack_slot_is_managed_pointer (b);
  if (D.22046 != 0) goto <D.22047>; else goto <D.22048>;
  <D.22047>:
  idxb = 5;
  complexMerge = 2;
  <D.22048>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  idxa.60 = (unsigned int) idxa;
  D.22050 = idxa.60 * 6;
  D.22051 = table + D.22050;
  res = *D.22051[idxb];
  top = stack_push (ctx);
  if (res == 0) goto <D.22052>; else goto <D.22053>;
  <D.22052>:
  D.22056 = ctx->verifiable;
  if (D.22056 != 0) goto <D.22054>; else goto <D.22057>;
  <D.22057>:
  D.22058 = ctx->level;
  D.22059 = D.22058 & 128;
  if (D.22059 != 0) goto <D.22054>; else goto <D.22055>;
  <D.22054>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22060 = stack_slot_get_name (a);
    D.22061 = stack_slot_get_name (b);
    D.22062 = monoeg_g_strdup_printf ("Binary instruction applyed to ill formed stack (%s x %s)", D.22060, D.22061);
    vinfo->info.message = D.22062;
    vinfo->exception_type = 4;
    D.22063 = ctx->list;
    D.22064 = monoeg_g_slist_prepend (D.22063, vinfo);
    ctx->list = D.22064;
  }
  ctx->verifiable = 0;
  D.22058 = ctx->level;
  D.22065 = D.22058 & 16;
  if (D.22065 != 0) goto <D.22066>; else goto <D.22067>;
  <D.22066>:
  ctx->valid = 0;
  <D.22067>:
  <D.22055>:
  copy_stack_value (top, a);
  return;
  <D.22053>:
  res.61 = (signed char) res;
  if (res.61 < 0) goto <D.22069>; else goto <D.22070>;
  <D.22069>:
  D.22056 = ctx->verifiable;
  if (D.22056 != 0) goto <D.22071>; else goto <D.22073>;
  <D.22073>:
  D.22058 = ctx->level;
  D.22059 = D.22058 & 128;
  if (D.22059 != 0) goto <D.22071>; else goto <D.22072>;
  <D.22071>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22074 = stack_slot_get_name (a);
    D.22075 = stack_slot_get_name (b);
    D.22076 = monoeg_g_strdup_printf ("Binary instruction is not verifiable (%s x %s)", D.22074, D.22075);
    vinfo->info.message = D.22076;
    vinfo->exception_type = 4;
    D.22063 = ctx->list;
    D.22077 = monoeg_g_slist_prepend (D.22063, vinfo);
    ctx->list = D.22077;
  }
  ctx->verifiable = 0;
  D.22058 = ctx->level;
  D.22065 = D.22058 & 16;
  if (D.22065 != 0) goto <D.22078>; else goto <D.22079>;
  <D.22078>:
  ctx->valid = 0;
  <D.22079>:
  <D.22072>:
  res = res & 127;
  <D.22070>:
  if (complexMerge != 0) goto <D.22082>; else goto <D.22080>;
  <D.22082>:
  if (res == 5) goto <D.22083>; else goto <D.22080>;
  <D.22083>:
  if (complexMerge == 1) goto <D.22084>; else goto <D.22085>;
  <D.22084>:
  copy_stack_value (top, a);
  goto <D.22086>;
  <D.22085>:
  if (complexMerge == 2) goto <D.22087>; else goto <D.22088>;
  <D.22087>:
  copy_stack_value (top, b);
  <D.22088>:
  <D.22086>:
  goto <D.22081>;
  <D.22080>:
  D.22089 = (int) res;
  top->stype = D.22089;
  <D.22081>:
}


stack_pop (struct VerifyContext * ctx)
{
  short unsigned int D.22091;
  _Bool D.22092;
  long int D.22093;
  long int D.22094;
  struct ILStackDesc * D.22097;
  short unsigned int D.22098;
  unsigned int D.22099;
  unsigned int D.22100;
  int D.22101;
  int D.22102;
  int D.22107;
  int D.22109;
  int D.22110;
  unsigned int D.22111;
  gchar * D.22112;
  struct GSList * D.22113;
  struct GSList * D.22114;
  int D.22115;
  struct ILStackDesc * D.22118;
  struct ILStackDesc * ret;

  D.22091 = ctx->eval.size;
  D.22092 = D.22091 == 0;
  D.22093 = (long int) D.22092;
  D.22094 = __builtin_expect (D.22093, 0);
  if (D.22094 != 0) goto <D.22095>; else goto <D.22096>;
  <D.22095>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1610, "ctx->eval.size > 0");
  <D.22096>:
  D.22097 = ctx->eval.stack;
  D.22091 = ctx->eval.size;
  D.22098 = D.22091 + 65535;
  ctx->eval.size = D.22098;
  D.22091 = ctx->eval.size;
  D.22099 = (unsigned int) D.22091;
  D.22100 = D.22099 * 12;
  ret = D.22097 + D.22100;
  D.22101 = ret->stype;
  D.22102 = D.22101 & 8192;
  if (D.22102 != 0) goto <D.22103>; else goto <D.22104>;
  <D.22103>:
  D.22107 = ctx->verifiable;
  if (D.22107 != 0) goto <D.22105>; else goto <D.22108>;
  <D.22108>:
  D.22109 = ctx->level;
  D.22110 = D.22109 & 128;
  if (D.22110 != 0) goto <D.22105>; else goto <D.22106>;
  <D.22105>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22111 = ctx->ip_offset;
    D.22112 = monoeg_g_strdup_printf ("Found use of uninitialized \'this ptr\' ref at 0x%04x", D.22111);
    vinfo->info.message = D.22112;
    vinfo->exception_type = 4;
    D.22113 = ctx->list;
    D.22114 = monoeg_g_slist_prepend (D.22113, vinfo);
    ctx->list = D.22114;
  }
  ctx->verifiable = 0;
  D.22109 = ctx->level;
  D.22115 = D.22109 & 16;
  if (D.22115 != 0) goto <D.22116>; else goto <D.22117>;
  <D.22116>:
  ctx->valid = 0;
  <D.22117>:
  <D.22106>:
  <D.22104>:
  D.22118 = ret;
  return D.22118;
}


stack_slot_get_underlying_type (struct ILStackDesc * value)
{
  gint32 D.22120;
  int D.22121;

  D.22121 = value->stype;
  D.22120 = D.22121 & 15;
  return D.22120;
}


stack_pop_safe (struct VerifyContext * ctx)
{
  short unsigned int D.22123;
  _Bool D.22124;
  long int D.22125;
  long int D.22126;
  struct ILStackDesc * D.22129;
  struct ILStackDesc * D.22130;
  short unsigned int D.22131;
  unsigned int D.22132;
  unsigned int D.22133;

  D.22123 = ctx->eval.size;
  D.22124 = D.22123 == 0;
  D.22125 = (long int) D.22124;
  D.22126 = __builtin_expect (D.22125, 0);
  if (D.22126 != 0) goto <D.22127>; else goto <D.22128>;
  <D.22127>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1623, "ctx->eval.size > 0");
  <D.22128>:
  D.22130 = ctx->eval.stack;
  D.22123 = ctx->eval.size;
  D.22131 = D.22123 + 65535;
  ctx->eval.size = D.22131;
  D.22123 = ctx->eval.size;
  D.22132 = (unsigned int) D.22123;
  D.22133 = D.22132 * 12;
  D.22129 = D.22130 + D.22133;
  return D.22129;
}


do_ret (struct VerifyContext * ctx)
{
  struct MonoMethodSignature * D.22135;
  unsigned char D.22136;
  int D.22139;
  struct MonoType * D.22142;
  int D.22143;
  int D.22148;
  int D.22150;
  int D.22151;
  unsigned int D.22152;
  gchar * D.22153;
  struct GSList * D.22154;
  struct GSList * D.22155;
  int D.22156;
  unsigned int D.22161;
  unsigned int D.22162;
  int D.22165;
  int D.22167;
  gchar * D.22171;
  struct GSList * D.22172;
  short unsigned int D.22175;
  int D.22181;
  gchar * D.22182;
  struct GSList * D.22183;
  struct MonoMethodHeader * D.22186;
  int D.22187;
  gchar * D.22193;
  struct GSList * D.22194;
  struct MonoType * ret;

  D.22135 = ctx->signature;
  ret = D.22135->ret;
  D.22136 = ret->type;
  if (D.22136 != 1) goto <D.22137>; else goto <D.22138>;
  <D.22137>:
  {
    struct ILStackDesc * top;

    D.22139 = check_underflow (ctx, 1);
    if (D.22139 == 0) goto <D.22140>; else goto <D.22141>;
    <D.22140>:
    return;
    <D.22141>:
    top = stack_pop (ctx);
    D.22135 = ctx->signature;
    D.22142 = D.22135->ret;
    D.22143 = verify_stack_type_compatibility (ctx, D.22142, top);
    if (D.22143 == 0) goto <D.22144>; else goto <D.22145>;
    <D.22144>:
    {
      char * ret_type;
      char * stack_type;

      D.22135 = ctx->signature;
      D.22142 = D.22135->ret;
      ret_type = mono_type_full_name (D.22142);
      stack_type = stack_slot_full_name (top);
      D.22148 = ctx->verifiable;
      if (D.22148 != 0) goto <D.22146>; else goto <D.22149>;
      <D.22149>:
      D.22150 = ctx->level;
      D.22151 = D.22150 & 128;
      if (D.22151 != 0) goto <D.22146>; else goto <D.22147>;
      <D.22146>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.22152 = ctx->ip_offset;
        D.22153 = 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.22152);
        vinfo->info.message = D.22153;
        vinfo->exception_type = 4;
        D.22154 = ctx->list;
        D.22155 = monoeg_g_slist_prepend (D.22154, vinfo);
        ctx->list = D.22155;
      }
      ctx->verifiable = 0;
      D.22150 = ctx->level;
      D.22156 = D.22150 & 16;
      if (D.22156 != 0) goto <D.22157>; else goto <D.22158>;
      <D.22157>:
      ctx->valid = 0;
      <D.22158>:
      <D.22147>:
      monoeg_g_free (stack_type);
      monoeg_g_free (ret_type);
      return;
    }
    <D.22145>:
    D.22161 = BIT_FIELD_REF <*ret, 32, 32>;
    D.22162 = D.22161 & 1073741824;
    if (D.22162 != 0) goto <D.22159>; else goto <D.22163>;
    <D.22163>:
    D.22136 = ret->type;
    if (D.22136 == 22) goto <D.22159>; else goto <D.22164>;
    <D.22164>:
    D.22165 = mono_type_is_value_type (ret, "System", "ArgIterator");
    if (D.22165 != 0) goto <D.22159>; else goto <D.22166>;
    <D.22166>:
    D.22167 = mono_type_is_value_type (ret, "System", "RuntimeArgumentHandle");
    if (D.22167 != 0) goto <D.22159>; else goto <D.22160>;
    <D.22159>:
    D.22148 = ctx->verifiable;
    if (D.22148 != 0) goto <D.22168>; else goto <D.22170>;
    <D.22170>:
    D.22150 = ctx->level;
    D.22151 = D.22150 & 128;
    if (D.22151 != 0) goto <D.22168>; else goto <D.22169>;
    <D.22168>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.22152 = ctx->ip_offset;
      D.22171 = monoeg_g_strdup_printf ("Method returns byref, TypedReference, ArgIterator or RuntimeArgumentHandle at 0x%04x", D.22152);
      vinfo->info.message = D.22171;
      vinfo->exception_type = 4;
      D.22154 = ctx->list;
      D.22172 = monoeg_g_slist_prepend (D.22154, vinfo);
      ctx->list = D.22172;
    }
    ctx->verifiable = 0;
    D.22150 = ctx->level;
    D.22156 = D.22150 & 16;
    if (D.22156 != 0) goto <D.22173>; else goto <D.22174>;
    <D.22173>:
    ctx->valid = 0;
    <D.22174>:
    <D.22169>:
    <D.22160>:
  }
  <D.22138>:
  D.22175 = ctx->eval.size;
  if (D.22175 != 0) goto <D.22176>; else goto <D.22177>;
  <D.22176>:
  D.22148 = ctx->verifiable;
  if (D.22148 != 0) goto <D.22178>; else goto <D.22180>;
  <D.22180>:
  D.22150 = ctx->level;
  D.22151 = D.22150 & 128;
  if (D.22151 != 0) goto <D.22178>; else goto <D.22179>;
  <D.22178>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22175 = ctx->eval.size;
    D.22181 = (int) D.22175;
    D.22152 = ctx->ip_offset;
    D.22182 = monoeg_g_strdup_printf ("Stack not empty (%d) after ret at 0x%04x", D.22181, D.22152);
    vinfo->info.message = D.22182;
    vinfo->exception_type = 4;
    D.22154 = ctx->list;
    D.22183 = monoeg_g_slist_prepend (D.22154, vinfo);
    ctx->list = D.22183;
  }
  ctx->verifiable = 0;
  D.22150 = ctx->level;
  D.22156 = D.22150 & 16;
  if (D.22156 != 0) goto <D.22184>; else goto <D.22185>;
  <D.22184>:
  ctx->valid = 0;
  <D.22185>:
  <D.22179>:
  <D.22177>:
  D.22186 = ctx->header;
  D.22152 = ctx->ip_offset;
  D.22187 = in_any_block (D.22186, D.22152);
  if (D.22187 != 0) goto <D.22188>; else goto <D.22189>;
  <D.22188>:
  D.22148 = ctx->verifiable;
  if (D.22148 != 0) goto <D.22190>; else goto <D.22192>;
  <D.22192>:
  D.22150 = ctx->level;
  D.22151 = D.22150 & 128;
  if (D.22151 != 0) goto <D.22190>; else goto <D.22191>;
  <D.22190>:
  {
    struct MonoVerifyInfoExtended * vinfo;

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


mono_type_is_value_type (struct MonoType * type, const char * namespace, const char * name)
{
  gboolean D.22198;
  int iftmp.62;
  unsigned char D.22202;
  int D.17504;
  struct MonoClass * D.22204;
  const char * D.22205;
  int D.17513;
  const char * D.22207;

  D.22202 = type->type;
  if (D.22202 == 17) goto <D.22203>; else goto <D.22200>;
  <D.22203>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.22204 = type->data.klass;
    D.22205 = D.22204->name_space;
    D.17504 = __builtin_strcmp (namespace, D.22205);
  }
  if (D.17504 == 0) goto <D.22206>; else goto <D.22200>;
  <D.22206>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.22204 = type->data.klass;
    D.22207 = D.22204->name;
    D.17513 = __builtin_strcmp (name, D.22207);
  }
  if (D.17513 == 0) goto <D.22208>; else goto <D.22200>;
  <D.22208>:
  iftmp.62 = 1;
  goto <D.22201>;
  <D.22200>:
  iftmp.62 = 0;
  <D.22201>:
  D.22198 = iftmp.62;
  return D.22198;
}


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

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


do_branch_op (struct VerifyContext * ctx, int delta, const unsigned char[6] * table)
{
  unsigned int D.22212;
  unsigned int delta.63;
  unsigned int D.22214;
  int D.22218;
  gchar * D.22219;
  struct GSList * D.22220;
  struct GSList * D.22221;
  struct MonoMethodHeader * D.22222;
  unsigned int target.64;
  int D.22224;
  int D.22227;
  int D.22229;
  int D.22230;
  gchar * D.22231;
  struct GSList * D.22232;
  int D.22233;
  gchar * D.22236;
  struct GSList * D.22237;
  int D.22239;
  int D.22242;
  int D.22245;
  int D.22251;
  int D.22253;
  unsigned int idxa.65;
  unsigned int D.22255;
  const unsigned char[6] * D.22256;
  const char * D.22262;
  const char * D.22263;
  gchar * D.22264;
  struct GSList * D.22265;
  signed char res.66;
  const char * D.22275;
  const char * D.22276;
  gchar * D.22277;
  struct GSList * D.22278;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  int idxa;
  int idxb;
  unsigned char res;
  int target;

  D.22212 = ctx->ip_offset;
  delta.63 = (unsigned int) delta;
  D.22214 = D.22212 + delta.63;
  target = (int) D.22214;
  if (target < 0) goto <D.22215>; else goto <D.22217>;
  <D.22217>:
  D.22218 = ctx->code_size;
  if (D.22218 <= target) goto <D.22215>; else goto <D.22216>;
  <D.22215>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22212 = ctx->ip_offset;
    D.22219 = monoeg_g_strdup_printf ("Branch target out of code at 0x%04x", D.22212);
    vinfo->info.message = D.22219;
    vinfo->exception_type = 3;
    D.22220 = ctx->list;
    D.22221 = monoeg_g_slist_prepend (D.22220, vinfo);
    ctx->list = D.22221;
  }
  ctx->valid = 0;
  return;
  <D.22216>:
  D.22222 = ctx->header;
  D.22212 = ctx->ip_offset;
  target.64 = (unsigned int) target;
  D.22224 = is_valid_cmp_branch_instruction (D.22222, D.22212, target.64);
  switch (D.22224) <default: <D.22238>, case 1: <D.18380>, case 2: <D.18383>>
  <D.18380>:
  D.22227 = ctx->verifiable;
  if (D.22227 != 0) goto <D.22225>; else goto <D.22228>;
  <D.22228>:
  D.22229 = ctx->level;
  D.22230 = D.22229 & 128;
  if (D.22230 != 0) goto <D.22225>; else goto <D.22226>;
  <D.22225>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22212 = ctx->ip_offset;
    D.22231 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22212);
    vinfo->info.message = D.22231;
    vinfo->exception_type = 4;
    D.22220 = ctx->list;
    D.22232 = monoeg_g_slist_prepend (D.22220, vinfo);
    ctx->list = D.22232;
  }
  ctx->verifiable = 0;
  D.22229 = ctx->level;
  D.22233 = D.22229 & 16;
  if (D.22233 != 0) goto <D.22234>; else goto <D.22235>;
  <D.22234>:
  ctx->valid = 0;
  <D.22235>:
  <D.22226>:
  goto <D.18382>;
  <D.18383>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22212 = ctx->ip_offset;
    D.22236 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22212);
    vinfo->info.message = D.22236;
    vinfo->exception_type = 3;
    D.22220 = ctx->list;
    D.22237 = monoeg_g_slist_prepend (D.22220, vinfo);
    ctx->list = D.22237;
  }
  ctx->valid = 0;
  return;
  <D.22238>:
  <D.18382>:
  ctx->target = target;
  D.22239 = check_underflow (ctx, 2);
  if (D.22239 == 0) goto <D.22240>; else goto <D.22241>;
  <D.22240>:
  return;
  <D.22241>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  idxa = stack_slot_get_underlying_type (a);
  D.22242 = stack_slot_is_managed_pointer (a);
  if (D.22242 != 0) goto <D.22243>; else goto <D.22244>;
  <D.22243>:
  idxa = 5;
  <D.22244>:
  idxb = stack_slot_get_underlying_type (b);
  D.22245 = stack_slot_is_managed_pointer (b);
  if (D.22245 != 0) goto <D.22246>; else goto <D.22247>;
  <D.22246>:
  idxb = 5;
  <D.22247>:
  D.22251 = stack_slot_is_complex_type_not_reference_type (a);
  if (D.22251 != 0) goto <D.22248>; else goto <D.22252>;
  <D.22252>:
  D.22253 = stack_slot_is_complex_type_not_reference_type (b);
  if (D.22253 != 0) goto <D.22248>; else goto <D.22249>;
  <D.22248>:
  res = 0;
  goto <D.22250>;
  <D.22249>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  idxa.65 = (unsigned int) idxa;
  D.22255 = idxa.65 * 6;
  D.22256 = table + D.22255;
  res = *D.22256[idxb];
  <D.22250>:
  if (res == 0) goto <D.22257>; else goto <D.22258>;
  <D.22257>:
  D.22227 = ctx->verifiable;
  if (D.22227 != 0) goto <D.22259>; else goto <D.22261>;
  <D.22261>:
  D.22229 = ctx->level;
  D.22230 = D.22229 & 128;
  if (D.22230 != 0) goto <D.22259>; else goto <D.22260>;
  <D.22259>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22262 = stack_slot_get_name (a);
    D.22263 = stack_slot_get_name (b);
    D.22212 = ctx->ip_offset;
    D.22264 = monoeg_g_strdup_printf ("Compare and Branch instruction applyed to ill formed stack (%s x %s) at 0x%04x", D.22262, D.22263, D.22212);
    vinfo->info.message = D.22264;
    vinfo->exception_type = 4;
    D.22220 = ctx->list;
    D.22265 = monoeg_g_slist_prepend (D.22220, vinfo);
    ctx->list = D.22265;
  }
  ctx->verifiable = 0;
  D.22229 = ctx->level;
  D.22233 = D.22229 & 16;
  if (D.22233 != 0) goto <D.22266>; else goto <D.22267>;
  <D.22266>:
  ctx->valid = 0;
  <D.22267>:
  <D.22260>:
  goto <D.22268>;
  <D.22258>:
  res.66 = (signed char) res;
  if (res.66 < 0) goto <D.22270>; else goto <D.22271>;
  <D.22270>:
  D.22227 = ctx->verifiable;
  if (D.22227 != 0) goto <D.22272>; else goto <D.22274>;
  <D.22274>:
  D.22229 = ctx->level;
  D.22230 = D.22229 & 128;
  if (D.22230 != 0) goto <D.22272>; else goto <D.22273>;
  <D.22272>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22275 = stack_slot_get_name (a);
    D.22276 = stack_slot_get_name (b);
    D.22212 = ctx->ip_offset;
    D.22277 = monoeg_g_strdup_printf ("Compare and Branch instruction is not verifiable (%s x %s) at 0x%04x", D.22275, D.22276, D.22212);
    vinfo->info.message = D.22277;
    vinfo->exception_type = 4;
    D.22220 = ctx->list;
    D.22278 = monoeg_g_slist_prepend (D.22220, vinfo);
    ctx->list = D.22278;
  }
  ctx->verifiable = 0;
  D.22229 = ctx->level;
  D.22233 = D.22229 & 16;
  if (D.22233 != 0) goto <D.22279>; else goto <D.22280>;
  <D.22279>:
  ctx->valid = 0;
  <D.22280>:
  <D.22273>:
  res = res & 127;
  <D.22271>:
  <D.22268>:
}


is_valid_cmp_branch_instruction (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.22282;
  unsigned int i.67;
  unsigned int D.22284;
  unsigned int D.22287;
  unsigned int D.22290;
  unsigned int D.22293;
  unsigned int D.22294;
  int D.22298;
  unsigned int D.22299;
  int iftmp.68;
  unsigned int D.22306;
  unsigned int D.22307;
  _Bool D.22309;
  int iftmp.69;
  _Bool D.22315;
  _Bool D.22316;
  int iftmp.70;
  _Bool D.22324;
  int iftmp.71;
  _Bool D.22330;
  _Bool D.22331;
  int iftmp.72;
  unsigned int D.22338;
  _Bool D.22341;
  int iftmp.73;
  _Bool D.22348;
  _Bool D.22349;
  <unnamed-unsigned:15> D.22352;
  int D.22353;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17820>;
  <D.17819>:
  D.22282 = header->clauses;
  i.67 = (unsigned int) i;
  D.22284 = i.67 * 24;
  clause = D.22282 + D.22284;
  D.22287 = clause->flags;
  if (D.22287 != 0) goto <D.22288>; else goto <D.22289>;
  <D.22288>:
  D.22290 = clause->handler_offset;
  if (D.22290 <= offset) goto <D.22291>; else goto <D.22292>;
  <D.22291>:
  D.22290 = clause->handler_offset;
  D.22293 = clause->handler_len;
  D.22294 = D.22290 + D.22293;
  if (D.22294 > offset) goto <D.22295>; else goto <D.22296>;
  <D.22295>:
  D.22290 = clause->handler_offset;
  if (D.22290 > target) goto <D.22285>; else goto <D.22297>;
  <D.22297>:
  D.22290 = clause->handler_offset;
  D.22293 = clause->handler_len;
  D.22294 = D.22290 + D.22293;
  if (D.22294 <= target) goto <D.22285>; else goto <D.22286>;
  <D.22285>:
  D.22298 = 1;
  return D.22298;
  <D.22286>:
  <D.22296>:
  <D.22292>:
  <D.22289>:
  D.22299 = clause->try_offset;
  if (D.22299 != target) goto <D.22300>; else goto <D.22301>;
  <D.22300>:
  D.22299 = clause->try_offset;
  if (D.22299 <= offset) goto <D.22305>; else goto <D.22303>;
  <D.22305>:
  D.22299 = clause->try_offset;
  D.22306 = clause->try_len;
  D.22307 = D.22299 + D.22306;
  if (D.22307 > offset) goto <D.22308>; else goto <D.22303>;
  <D.22308>:
  iftmp.68 = 1;
  goto <D.22304>;
  <D.22303>:
  iftmp.68 = 0;
  <D.22304>:
  D.22309 = (_Bool) iftmp.68;
  D.22299 = clause->try_offset;
  if (D.22299 <= target) goto <D.22313>; else goto <D.22311>;
  <D.22313>:
  D.22299 = clause->try_offset;
  D.22306 = clause->try_len;
  D.22307 = D.22299 + D.22306;
  if (D.22307 > target) goto <D.22314>; else goto <D.22311>;
  <D.22314>:
  iftmp.69 = 1;
  goto <D.22312>;
  <D.22311>:
  iftmp.69 = 0;
  <D.22312>:
  D.22315 = (_Bool) iftmp.69;
  D.22316 = D.22309 ^ D.22315;
  if (D.22316 != 0) goto <D.22317>; else goto <D.22318>;
  <D.22317>:
  D.22298 = 2;
  return D.22298;
  <D.22318>:
  <D.22301>:
  D.22290 = clause->handler_offset;
  if (D.22290 <= offset) goto <D.22322>; else goto <D.22320>;
  <D.22322>:
  D.22290 = clause->handler_offset;
  D.22293 = clause->handler_len;
  D.22294 = D.22290 + D.22293;
  if (D.22294 > offset) goto <D.22323>; else goto <D.22320>;
  <D.22323>:
  iftmp.70 = 1;
  goto <D.22321>;
  <D.22320>:
  iftmp.70 = 0;
  <D.22321>:
  D.22324 = (_Bool) iftmp.70;
  D.22290 = clause->handler_offset;
  if (D.22290 <= target) goto <D.22328>; else goto <D.22326>;
  <D.22328>:
  D.22290 = clause->handler_offset;
  D.22293 = clause->handler_len;
  D.22294 = D.22290 + D.22293;
  if (D.22294 > target) goto <D.22329>; else goto <D.22326>;
  <D.22329>:
  iftmp.71 = 1;
  goto <D.22327>;
  <D.22326>:
  iftmp.71 = 0;
  <D.22327>:
  D.22330 = (_Bool) iftmp.71;
  D.22331 = D.22324 ^ D.22330;
  if (D.22331 != 0) goto <D.22332>; else goto <D.22333>;
  <D.22332>:
  D.22298 = 2;
  return D.22298;
  <D.22333>:
  D.22287 = clause->flags;
  if (D.22287 == 1) goto <D.22337>; else goto <D.22335>;
  <D.22337>:
  D.22338 = clause->data.filter_offset;
  if (D.22338 <= offset) goto <D.22339>; else goto <D.22335>;
  <D.22339>:
  D.22290 = clause->handler_offset;
  if (D.22290 > offset) goto <D.22340>; else goto <D.22335>;
  <D.22340>:
  iftmp.72 = 1;
  goto <D.22336>;
  <D.22335>:
  iftmp.72 = 0;
  <D.22336>:
  D.22341 = (_Bool) iftmp.72;
  D.22287 = clause->flags;
  if (D.22287 == 1) goto <D.22345>; else goto <D.22343>;
  <D.22345>:
  D.22338 = clause->data.filter_offset;
  if (D.22338 <= target) goto <D.22346>; else goto <D.22343>;
  <D.22346>:
  D.22290 = clause->handler_offset;
  if (D.22290 > target) goto <D.22347>; else goto <D.22343>;
  <D.22347>:
  iftmp.73 = 1;
  goto <D.22344>;
  <D.22343>:
  iftmp.73 = 0;
  <D.22344>:
  D.22348 = (_Bool) iftmp.73;
  D.22349 = D.22341 ^ D.22348;
  if (D.22349 != 0) goto <D.22350>; else goto <D.22351>;
  <D.22350>:
  D.22298 = 2;
  return D.22298;
  <D.22351>:
  i = i + 1;
  <D.17820>:
  D.22352 = header->num_clauses;
  D.22353 = (int) D.22352;
  if (D.22353 > i) goto <D.17819>; else goto <D.17821>;
  <D.17821>:
  D.22298 = 0;
  return D.22298;
}


stack_slot_is_complex_type_not_reference_type (struct ILStackDesc * slot)
{
  gboolean D.22355;
  int iftmp.74;
  int D.22359;
  struct MonoType * D.22361;
  int D.22362;
  int D.22364;

  D.22359 = stack_slot_get_type (slot);
  if (D.22359 == 6) goto <D.22360>; else goto <D.22357>;
  <D.22360>:
  D.22361 = slot->type;
  D.22362 = mono_type_is_reference (D.22361);
  if (D.22362 == 0) goto <D.22363>; else goto <D.22357>;
  <D.22363>:
  D.22364 = stack_slot_is_boxed_value (slot);
  if (D.22364 == 0) goto <D.22365>; else goto <D.22357>;
  <D.22365>:
  iftmp.74 = 1;
  goto <D.22358>;
  <D.22357>:
  iftmp.74 = 0;
  <D.22358>:
  D.22355 = iftmp.74;
  return D.22355;
}


stack_slot_get_type (struct ILStackDesc * value)
{
  gint32 D.22367;
  int D.22368;

  D.22368 = value->stype;
  D.22367 = D.22368 & 271;
  return D.22367;
}


stack_peek (struct VerifyContext * ctx, int distance)
{
  short unsigned int D.22370;
  int D.22371;
  int D.22372;
  _Bool D.22373;
  long int D.22374;
  long int D.22375;
  struct ILStackDesc * D.22378;
  struct ILStackDesc * D.22379;
  int D.22380;
  int D.22381;
  unsigned int D.22382;
  unsigned int D.22383;

  D.22370 = ctx->eval.size;
  D.22371 = (int) D.22370;
  D.22372 = D.22371 - distance;
  D.22373 = D.22372 <= 0;
  D.22374 = (long int) D.22373;
  D.22375 = __builtin_expect (D.22374, 0);
  if (D.22375 != 0) goto <D.22376>; else goto <D.22377>;
  <D.22376>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1631, "ctx->eval.size - distance > 0");
  <D.22377>:
  D.22379 = ctx->eval.stack;
  D.22370 = ctx->eval.size;
  D.22371 = (int) D.22370;
  D.22380 = D.22371 + -1;
  D.22381 = D.22380 - distance;
  D.22382 = (unsigned int) D.22381;
  D.22383 = D.22382 * 12;
  D.22378 = D.22379 + D.22383;
  return D.22378;
}


copy_stack_value (struct ILStackDesc * to, struct ILStackDesc * from)
{
  int D.22385;
  struct MonoType * D.22386;
  struct MonoMethod * D.22387;

  D.22385 = from->stype;
  to->stype = D.22385;
  D.22386 = from->type;
  to->type = D.22386;
  D.22387 = from->method;
  to->method = D.22387;
}


in_any_block (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.22388;
  unsigned int i.75;
  unsigned int D.22390;
  unsigned int D.22391;
  unsigned int D.22394;
  unsigned int D.22395;
  int D.22398;
  unsigned int D.22399;
  unsigned int D.22402;
  unsigned int D.22403;
  unsigned int D.22406;
  unsigned int D.22409;
  <unnamed-unsigned:15> D.22414;
  int D.22415;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17791>;
  <D.17790>:
  D.22388 = header->clauses;
  i.75 = (unsigned int) i;
  D.22390 = i.75 * 24;
  clause = D.22388 + D.22390;
  D.22391 = clause->try_offset;
  if (D.22391 <= offset) goto <D.22392>; else goto <D.22393>;
  <D.22392>:
  D.22391 = clause->try_offset;
  D.22394 = clause->try_len;
  D.22395 = D.22391 + D.22394;
  if (D.22395 > offset) goto <D.22396>; else goto <D.22397>;
  <D.22396>:
  D.22398 = 1;
  return D.22398;
  <D.22397>:
  <D.22393>:
  D.22399 = clause->handler_offset;
  if (D.22399 <= offset) goto <D.22400>; else goto <D.22401>;
  <D.22400>:
  D.22399 = clause->handler_offset;
  D.22402 = clause->handler_len;
  D.22403 = D.22399 + D.22402;
  if (D.22403 > offset) goto <D.22404>; else goto <D.22405>;
  <D.22404>:
  D.22398 = 1;
  return D.22398;
  <D.22405>:
  <D.22401>:
  D.22406 = clause->flags;
  if (D.22406 == 1) goto <D.22407>; else goto <D.22408>;
  <D.22407>:
  D.22409 = clause->data.filter_offset;
  if (D.22409 <= offset) goto <D.22410>; else goto <D.22411>;
  <D.22410>:
  D.22399 = clause->handler_offset;
  if (D.22399 > offset) goto <D.22412>; else goto <D.22413>;
  <D.22412>:
  D.22398 = 1;
  return D.22398;
  <D.22413>:
  <D.22411>:
  <D.22408>:
  i = i + 1;
  <D.17791>:
  D.22414 = header->num_clauses;
  D.22415 = (int) D.22414;
  if (D.22415 > i) goto <D.17790>; else goto <D.17792>;
  <D.17792>:
  D.22398 = 0;
  return D.22398;
}


do_invoke_method (struct VerifyContext * ctx, int method_token, gboolean virtual)
{
  unsigned int D.22417;
  int D.22418;
  const char * iftmp.76;
  unsigned int D.22427;
  struct MonoClass * D.22428;
  unsigned int D.22429;
  unsigned int D.22430;
  int D.22435;
  int D.22437;
  int D.22438;
  unsigned int D.22439;
  gchar * D.22440;
  struct GSList * D.22441;
  struct GSList * D.22442;
  int D.22443;
  short unsigned int D.22446;
  int D.22447;
  int D.22448;
  gchar * D.22454;
  struct GSList * D.22455;
  int D.22459;
  gchar * D.22465;
  struct GSList * D.22466;
  unsigned int D.22469;
  unsigned int D.22470;
  unsigned int D.22473;
  unsigned int D.22474;
  struct ILCodeDesc * D.22477;
  unsigned int D.22478;
  struct ILCodeDesc * D.22479;
  short unsigned int D.22480;
  short unsigned int D.22481;
  struct MonoImage * D.22482;
  unsigned int method_token.77;
  struct MonoGenericContext * D.22484;
  const char * D.22489;
  gchar * D.22490;
  struct GSList * D.22491;
  short unsigned int D.22492;
  int D.22493;
  <unnamed-unsigned:1> D.22494;
  int D.22495;
  int D.22496;
  struct MonoType * D.22499;
  int D.22500;
  gchar * D.22506;
  struct GSList * D.22507;
  int D.22510;
  const char * iftmp.78;
  gchar * D.22520;
  struct GSList * D.22521;
  unsigned int D.22524;
  int D.22527;
  const char * iftmp.79;
  gchar * D.22534;
  struct GSList * D.22535;
  unsigned int D.22536;
  unsigned int D.22537;
  int D.22542;
  int D.22545;
  struct MonoMethod * D.22548;
  int D.22549;
  gchar * D.22555;
  struct GSList * D.22556;
  struct MonoClass * D.22561;
  struct MonoClass * D.22562;
  gchar * D.22570;
  struct GSList * D.22571;
  int D.22576;
  int D.22577;
  gchar * D.22583;
  struct GSList * D.22584;
  struct MonoType * D.22587;
  struct MonoType * D.22588;
  int D.22589;
  int D.22590;
  int D.22593;
  int D.22598;
  gchar * D.22604;
  struct GSList * D.22605;
  int D.22612;
  gchar * D.22618;
  struct GSList * D.22619;
  struct MonoType * D.22622;
  struct MonoType * D.22623;
  struct MonoType * D.22624;
  int D.22625;
  gchar * D.22631;
  struct GSList * D.22632;
  int D.22635;
  int D.22636;
  struct MonoClass * D.22639;
  unsigned int D.22640;
  unsigned int D.22641;
  gchar * D.22647;
  struct GSList * D.22648;
  struct MonoClass * D.22653;
  unsigned int D.22654;
  unsigned int D.22655;
  int D.22660;
  gchar * D.22666;
  struct GSList * D.22667;
  struct MonoClass * D.22672;
  unsigned int D.22673;
  unsigned int D.22674;
  int D.22677;
  gchar * D.22683;
  struct GSList * D.22684;
  int D.22691;
  int D.22693;
  gchar * D.22697;
  struct GSList * D.22698;
  int D.22701;
  gchar * D.22707;
  struct GSList * D.22708;
  int D.22711;
  struct MonoClass * D.22714;
  int D.22715;
  gchar * D.22721;
  struct GSList * D.22722;
  int D.22728;
  gchar * D.22734;
  struct GSList * D.22735;
  struct MonoType * D.22738;
  unsigned char D.22739;
  int D.22742;
  int D.22745;
  unsigned int D.22748;
  unsigned char D.22751;
  int D.18463;
  int iftmp.80;
  int D.18462;
  const char[8] * D.22757;
  unsigned char D.22758;
  int D.22759;
  unsigned char D.22760;
  int D.22761;
  const unsigned char * D.22766;
  unsigned char D.22767;
  int D.22768;
  const unsigned char * D.22769;
  unsigned char D.22770;
  int D.22771;
  const unsigned char * D.22776;
  unsigned char D.22777;
  int D.22778;
  const unsigned char * D.22779;
  unsigned char D.22780;
  int D.22781;
  const unsigned char * D.22786;
  unsigned char D.22787;
  int D.22788;
  const unsigned char * D.22789;
  unsigned char D.22790;
  int D.22791;
  unsigned int D.22795;
  int D.22796;
  struct MonoMethodSignature * D.22799;
  struct MonoType * D.22800;
  int D.22801;
  gchar * D.22807;
  struct GSList * D.22808;
  struct MonoMethodHeader * D.22811;
  const unsigned char * D.22812;
  sizetype D.22813;
  const unsigned char * D.22814;
  unsigned char D.22815;
  gchar * D.22821;
  struct GSList * D.22822;
  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.22417 = ctx->prefix_set;
  D.22418 = (int) D.22417;
  constrained = D.22418 & 8;
  if (virtual != 0) goto <D.22420>; else goto <D.22421>;
  <D.22420>:
  iftmp.76 = "callvirt";
  goto <D.22422>;
  <D.22421>:
  iftmp.76 = "call";
  <D.22422>:
  method = verifier_load_method (ctx, method_token, iftmp.76);
  if (method == 0B) goto <D.22423>; else goto <D.22424>;
  <D.22423>:
  return;
  <D.22424>:
  if (virtual != 0) goto <D.22425>; else goto <D.22426>;
  <D.22425>:
  D.22417 = ctx->prefix_set;
  D.22427 = D.22417 & 4294967287;
  ctx->prefix_set = D.22427;
  D.22428 = method->klass;
  D.22429 = BIT_FIELD_REF <*D.22428, 32, 160>;
  D.22430 = D.22429 & 8;
  if (D.22430 != 0) goto <D.22431>; else goto <D.22432>;
  <D.22431>:
  D.22435 = ctx->verifiable;
  if (D.22435 != 0) goto <D.22433>; else goto <D.22436>;
  <D.22436>:
  D.22437 = ctx->level;
  D.22438 = D.22437 & 128;
  if (D.22438 != 0) goto <D.22433>; else goto <D.22434>;
  <D.22433>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22439 = ctx->ip_offset;
    D.22440 = monoeg_g_strdup_printf ("Cannot use callvirtual with valuetype method at 0x%04x", D.22439);
    vinfo->info.message = D.22440;
    vinfo->exception_type = 4;
    D.22441 = ctx->list;
    D.22442 = monoeg_g_slist_prepend (D.22441, vinfo);
    ctx->list = D.22442;
  }
  ctx->verifiable = 0;
  D.22437 = ctx->level;
  D.22443 = D.22437 & 16;
  if (D.22443 != 0) goto <D.22444>; else goto <D.22445>;
  <D.22444>:
  ctx->valid = 0;
  <D.22445>:
  <D.22434>:
  <D.22432>:
  D.22446 = method->flags;
  D.22447 = (int) D.22446;
  D.22448 = D.22447 & 16;
  if (D.22448 != 0) goto <D.22449>; else goto <D.22450>;
  <D.22449>:
  D.22435 = ctx->verifiable;
  if (D.22435 != 0) goto <D.22451>; else goto <D.22453>;
  <D.22453>:
  D.22437 = ctx->level;
  D.22438 = D.22437 & 128;
  if (D.22438 != 0) goto <D.22451>; else goto <D.22452>;
  <D.22451>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22439 = ctx->ip_offset;
    D.22454 = monoeg_g_strdup_printf ("Cannot use callvirtual with static method at 0x%04x", D.22439);
    vinfo->info.message = D.22454;
    vinfo->exception_type = 4;
    D.22441 = ctx->list;
    D.22455 = monoeg_g_slist_prepend (D.22441, vinfo);
    ctx->list = D.22455;
  }
  ctx->verifiable = 0;
  D.22437 = ctx->level;
  D.22443 = D.22437 & 16;
  if (D.22443 != 0) goto <D.22456>; else goto <D.22457>;
  <D.22456>:
  ctx->valid = 0;
  <D.22457>:
  <D.22452>:
  <D.22450>:
  goto <D.22458>;
  <D.22426>:
  D.22446 = method->flags;
  D.22447 = (int) D.22446;
  D.22459 = D.22447 & 1024;
  if (D.22459 != 0) goto <D.22460>; else goto <D.22461>;
  <D.22460>:
  D.22435 = ctx->verifiable;
  if (D.22435 != 0) goto <D.22462>; else goto <D.22464>;
  <D.22464>:
  D.22437 = ctx->level;
  D.22438 = D.22437 & 128;
  if (D.22438 != 0) goto <D.22462>; else goto <D.22463>;
  <D.22462>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22439 = ctx->ip_offset;
    D.22465 = monoeg_g_strdup_printf ("Cannot use call with an abstract method at 0x%04x", D.22439);
    vinfo->info.message = D.22465;
    vinfo->exception_type = 4;
    D.22441 = ctx->list;
    D.22466 = monoeg_g_slist_prepend (D.22441, vinfo);
    ctx->list = D.22466;
  }
  ctx->verifiable = 0;
  D.22437 = ctx->level;
  D.22443 = D.22437 & 16;
  if (D.22443 != 0) goto <D.22467>; else goto <D.22468>;
  <D.22467>:
  ctx->valid = 0;
  <D.22468>:
  <D.22463>:
  <D.22461>:
  D.22446 = method->flags;
  D.22469 = (unsigned int) D.22446;
  D.22470 = D.22469 & 96;
  if (D.22470 == 64) goto <D.22471>; else goto <D.22472>;
  <D.22471>:
  D.22428 = method->klass;
  D.22473 = D.22428->flags;
  D.22474 = D.22473 & 256;
  if (D.22474 == 0) goto <D.22475>; else goto <D.22476>;
  <D.22475>:
  virt_check_this = 1;
  D.22477 = ctx->code;
  D.22439 = ctx->ip_offset;
  D.22478 = D.22439 * 12;
  D.22479 = D.22477 + D.22478;
  D.22477 = ctx->code;
  D.22439 = ctx->ip_offset;
  D.22478 = D.22439 * 12;
  D.22479 = D.22477 + D.22478;
  D.22480 = D.22479->flags;
  D.22481 = D.22480 | 64;
  D.22479->flags = D.22481;
  <D.22476>:
  <D.22472>:
  <D.22458>:
  D.22482 = ctx->image;
  method_token.77 = (unsigned int) method_token;
  D.22484 = ctx->generic_context;
  sig = mono_method_get_signature_full (method, D.22482, method_token.77, D.22484);
  if (sig == 0B) goto <D.22485>; else goto <D.22486>;
  <D.22485>:
  D.22482 = ctx->image;
  method_token.77 = (unsigned int) method_token;
  sig = mono_method_get_signature (method, D.22482, method_token.77);
  <D.22486>:
  if (sig == 0B) goto <D.22487>; else goto <D.22488>;
  <D.22487>:
  {
    char * name;

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

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.22489 = method->name;
      D.22439 = ctx->ip_offset;
      D.22490 = monoeg_g_strdup_printf ("Could not resolve signature of %s:%s at 0x%04x", name, D.22489, D.22439);
      vinfo->info.message = D.22490;
      vinfo->exception_type = 3;
      D.22441 = ctx->list;
      D.22491 = monoeg_g_slist_prepend (D.22441, vinfo);
      ctx->list = D.22491;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.22488>:
  D.22492 = sig->param_count;
  D.22493 = (int) D.22492;
  D.22494 = sig->hasthis;
  D.22495 = (int) D.22494;
  param_count = D.22493 + D.22495;
  D.22496 = check_underflow (ctx, param_count);
  if (D.22496 == 0) goto <D.22497>; else goto <D.22498>;
  <D.22497>:
  return;
  <D.22498>:
  D.22492 = sig->param_count;
  D.22493 = (int) D.22492;
  i = D.22493 + -1;
  goto <D.18433>;
  <D.18432>:
  value = stack_pop (ctx);
  D.22499 = sig->params[i];
  D.22500 = verify_stack_type_compatibility (ctx, D.22499, value);
  if (D.22500 == 0) goto <D.22501>; else goto <D.22502>;
  <D.22501>:
  {
    char * stack_name;
    char * sig_name;

    stack_name = stack_slot_full_name (value);
    D.22499 = sig->params[i];
    sig_name = mono_type_full_name (D.22499);
    D.22435 = ctx->verifiable;
    if (D.22435 != 0) goto <D.22503>; else goto <D.22505>;
    <D.22505>:
    D.22437 = ctx->level;
    D.22438 = D.22437 & 128;
    if (D.22438 != 0) goto <D.22503>; else goto <D.22504>;
    <D.22503>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.22439 = ctx->ip_offset;
      D.22506 = 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.22439);
      vinfo->info.message = D.22506;
      vinfo->exception_type = 4;
      D.22441 = ctx->list;
      D.22507 = monoeg_g_slist_prepend (D.22441, vinfo);
      ctx->list = D.22507;
    }
    ctx->verifiable = 0;
    D.22437 = ctx->level;
    D.22443 = D.22437 & 16;
    if (D.22443 != 0) goto <D.22508>; else goto <D.22509>;
    <D.22508>:
    ctx->valid = 0;
    <D.22509>:
    <D.22504>:
    monoeg_g_free (stack_name);
    monoeg_g_free (sig_name);
  }
  <D.22502>:
  D.22510 = stack_slot_is_managed_mutability_pointer (value);
  if (D.22510 != 0) goto <D.22511>; else goto <D.22512>;
  <D.22511>:
  D.22435 = ctx->verifiable;
  if (D.22435 != 0) goto <D.22513>; else goto <D.22515>;
  <D.22515>:
  D.22437 = ctx->level;
  D.22438 = D.22437 & 128;
  if (D.22438 != 0) goto <D.22513>; else goto <D.22514>;
  <D.22513>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    if (virtual != 0) goto <D.22517>; else goto <D.22518>;
    <D.22517>:
    iftmp.78 = "callvirt";
    goto <D.22519>;
    <D.22518>:
    iftmp.78 = "call";
    <D.22519>:
    D.22439 = ctx->ip_offset;
    D.22520 = monoeg_g_strdup_printf ("Cannot use a readonly pointer as argument of %s at 0x%04x", iftmp.78, D.22439);
    vinfo->info.message = D.22520;
    vinfo->exception_type = 4;
    D.22441 = ctx->list;
    D.22521 = monoeg_g_slist_prepend (D.22441, vinfo);
    ctx->list = D.22521;
  }
  ctx->verifiable = 0;
  D.22437 = ctx->level;
  D.22443 = D.22437 & 16;
  if (D.22443 != 0) goto <D.22522>; else goto <D.22523>;
  <D.22522>:
  ctx->valid = 0;
  <D.22523>:
  <D.22514>:
  <D.22512>:
  D.22417 = ctx->prefix_set;
  D.22524 = D.22417 & 4;
  if (D.22524 != 0) goto <D.22525>; else goto <D.22526>;
  <D.22525>:
  D.22527 = stack_slot_is_managed_pointer (value);
  if (D.22527 != 0) goto <D.22528>; else goto <D.22529>;
  <D.22528>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    if (virtual != 0) goto <D.22531>; else goto <D.22532>;
    <D.22531>:
    iftmp.79 = "callvirt";
    goto <D.22533>;
    <D.22532>:
    iftmp.79 = "call";
    <D.22533>:
    D.22439 = ctx->ip_offset;
    D.22534 = monoeg_g_strdup_printf ("Cannot  pass a byref argument to a tail %s at 0x%04x", iftmp.79, D.22439);
    vinfo->info.message = D.22534;
    vinfo->exception_type = 3;
    D.22441 = ctx->list;
    D.22535 = monoeg_g_slist_prepend (D.22441, vinfo);
    ctx->list = D.22535;
  }
  ctx->valid = 0;
  return;
  <D.22529>:
  <D.22526>:
  i = i + -1;
  <D.18433>:
  if (i >= 0) goto <D.18432>; else goto <D.18434>;
  <D.18434>:
  D.22536 = BIT_FIELD_REF <*sig, 32, 64>;
  D.22537 = D.22536 & 4194304;
  if (D.22537 != 0) goto <D.22538>; else goto <D.22539>;
  <D.22538>:
  {
    struct MonoType * type;
    struct ILStackDesc copy;

    try
      {
        D.22428 = method->klass;
        type = &D.22428->byval_arg;
        D.22542 = mono_method_is_constructor (method);
        if (D.22542 != 0) goto <D.22543>; else goto <D.22540>;
        <D.22543>:
        D.22428 = method->klass;
        D.22429 = BIT_FIELD_REF <*D.22428, 32, 160>;
        D.22430 = D.22429 & 8;
        if (D.22430 == 0) goto <D.22544>; else goto <D.22540>;
        <D.22544>:
        D.22437 = ctx->level;
        D.22545 = D.22437 & 32;
        if (D.22545 == 0) goto <D.22546>; else goto <D.22547>;
        <D.22546>:
        D.22548 = ctx->method;
        D.22549 = mono_method_is_constructor (D.22548);
        if (D.22549 == 0) goto <D.22550>; else goto <D.22551>;
        <D.22550>:
        D.22435 = ctx->verifiable;
        if (D.22435 != 0) goto <D.22552>; else goto <D.22554>;
        <D.22554>:
        D.22437 = ctx->level;
        D.22438 = D.22437 & 128;
        if (D.22438 != 0) goto <D.22552>; else goto <D.22553>;
        <D.22552>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22439 = ctx->ip_offset;
          D.22555 = monoeg_g_strdup_printf ("Cannot call a constructor outside one at 0x%04x", D.22439);
          vinfo->info.message = D.22555;
          vinfo->exception_type = 4;
          D.22441 = ctx->list;
          D.22556 = monoeg_g_slist_prepend (D.22441, vinfo);
          ctx->list = D.22556;
        }
        ctx->verifiable = 0;
        D.22437 = ctx->level;
        D.22443 = D.22437 & 16;
        if (D.22443 != 0) goto <D.22557>; else goto <D.22558>;
        <D.22557>:
        ctx->valid = 0;
        <D.22558>:
        <D.22553>:
        <D.22551>:
        <D.22547>:
        D.22437 = ctx->level;
        D.22545 = D.22437 & 32;
        if (D.22545 == 0) goto <D.22559>; else goto <D.22560>;
        <D.22559>:
        D.22428 = method->klass;
        D.22548 = ctx->method;
        D.22561 = D.22548->klass;
        D.22562 = D.22561->parent;
        if (D.22428 != D.22562) goto <D.22563>; else goto <D.22564>;
        <D.22563>:
        D.22428 = method->klass;
        D.22548 = ctx->method;
        D.22561 = D.22548->klass;
        if (D.22428 != D.22561) goto <D.22565>; else goto <D.22566>;
        <D.22565>:
        D.22435 = ctx->verifiable;
        if (D.22435 != 0) goto <D.22567>; else goto <D.22569>;
        <D.22569>:
        D.22437 = ctx->level;
        D.22438 = D.22437 & 128;
        if (D.22438 != 0) goto <D.22567>; else goto <D.22568>;
        <D.22567>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22439 = ctx->ip_offset;
          D.22570 = monoeg_g_strdup_printf ("Cannot call a constructor of a type different from this or super at 0x%04x", D.22439);
          vinfo->info.message = D.22570;
          vinfo->exception_type = 4;
          D.22441 = ctx->list;
          D.22571 = monoeg_g_slist_prepend (D.22441, vinfo);
          ctx->list = D.22571;
        }
        ctx->verifiable = 0;
        D.22437 = ctx->level;
        D.22443 = D.22437 & 16;
        if (D.22443 != 0) goto <D.22572>; else goto <D.22573>;
        <D.22572>:
        ctx->valid = 0;
        <D.22573>:
        <D.22568>:
        <D.22566>:
        <D.22564>:
        <D.22560>:
        ctx->super_ctor_called = 1;
        value = stack_pop_safe (ctx);
        D.22437 = ctx->level;
        D.22545 = D.22437 & 32;
        if (D.22545 == 0) goto <D.22574>; else goto <D.22575>;
        <D.22574>:
        D.22576 = value->stype;
        D.22577 = D.22576 & 2048;
        if (D.22577 == 0) goto <D.22578>; else goto <D.22579>;
        <D.22578>:
        D.22435 = ctx->verifiable;
        if (D.22435 != 0) goto <D.22580>; else goto <D.22582>;
        <D.22582>:
        D.22437 = ctx->level;
        D.22438 = D.22437 & 128;
        if (D.22438 != 0) goto <D.22580>; else goto <D.22581>;
        <D.22580>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22439 = ctx->ip_offset;
          D.22583 = monoeg_g_strdup_printf ("Invalid \'this ptr\' argument for constructor at 0x%04x", D.22439);
          vinfo->info.message = D.22583;
          vinfo->exception_type = 4;
          D.22441 = ctx->list;
          D.22584 = monoeg_g_slist_prepend (D.22441, vinfo);
          ctx->list = D.22584;
        }
        ctx->verifiable = 0;
        D.22437 = ctx->level;
        D.22443 = D.22437 & 16;
        if (D.22443 != 0) goto <D.22585>; else goto <D.22586>;
        <D.22585>:
        ctx->valid = 0;
        <D.22586>:
        <D.22581>:
        <D.22579>:
        <D.22575>:
        goto <D.22541>;
        <D.22540>:
        value = stack_pop (ctx);
        <D.22541>:
        copy_stack_value (&copy, value);
        D.22587 = copy.type;
        D.22588 = mono_type_get_type_byval (D.22587);
        copy.type = D.22588;
        D.22589 = copy.stype;
        D.22590 = D.22589 & -257;
        copy.stype = D.22590;
        if (virt_check_this != 0) goto <D.22591>; else goto <D.22592>;
        <D.22591>:
        D.22593 = stack_slot_is_this_pointer (value);
        if (D.22593 == 0) goto <D.22594>; else goto <D.22595>;
        <D.22594>:
        D.22428 = method->klass;
        D.22429 = BIT_FIELD_REF <*D.22428, 32, 160>;
        D.22430 = D.22429 & 8;
        if (D.22430 == 0) goto <D.22596>; else goto <D.22597>;
        <D.22596>:
        D.22598 = stack_slot_is_boxed_value (value);
        if (D.22598 == 0) goto <D.22599>; else goto <D.22600>;
        <D.22599>:
        D.22435 = ctx->verifiable;
        if (D.22435 != 0) goto <D.22601>; else goto <D.22603>;
        <D.22603>:
        D.22437 = ctx->level;
        D.22438 = D.22437 & 128;
        if (D.22438 != 0) goto <D.22601>; else goto <D.22602>;
        <D.22601>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22439 = ctx->ip_offset;
          D.22604 = 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.22439);
          vinfo->info.message = D.22604;
          vinfo->exception_type = 4;
          D.22441 = ctx->list;
          D.22605 = monoeg_g_slist_prepend (D.22441, vinfo);
          ctx->list = D.22605;
        }
        ctx->verifiable = 0;
        D.22437 = ctx->level;
        D.22443 = D.22437 & 16;
        if (D.22443 != 0) goto <D.22606>; else goto <D.22607>;
        <D.22606>:
        ctx->valid = 0;
        <D.22607>:
        <D.22602>:
        <D.22600>:
        <D.22597>:
        <D.22595>:
        <D.22592>:
        if (constrained != 0) goto <D.22610>; else goto <D.22608>;
        <D.22610>:
        if (virtual != 0) goto <D.22611>; else goto <D.22608>;
        <D.22611>:
        D.22612 = stack_slot_is_managed_pointer (value);
        if (D.22612 == 0) goto <D.22613>; else goto <D.22614>;
        <D.22613>:
        D.22435 = ctx->verifiable;
        if (D.22435 != 0) goto <D.22615>; else goto <D.22617>;
        <D.22617>:
        D.22437 = ctx->level;
        D.22438 = D.22437 & 128;
        if (D.22438 != 0) goto <D.22615>; else goto <D.22616>;
        <D.22615>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22439 = ctx->ip_offset;
          D.22618 = monoeg_g_strdup_printf ("Object is not a managed pointer for a constrained call at 0x%04x", D.22439);
          vinfo->info.message = D.22618;
          vinfo->exception_type = 4;
          D.22441 = ctx->list;
          D.22619 = monoeg_g_slist_prepend (D.22441, vinfo);
          ctx->list = D.22619;
        }
        ctx->verifiable = 0;
        D.22437 = ctx->level;
        D.22443 = D.22437 & 16;
        if (D.22443 != 0) goto <D.22620>; else goto <D.22621>;
        <D.22620>:
        ctx->valid = 0;
        <D.22621>:
        <D.22616>:
        <D.22614>:
        D.22622 = value->type;
        D.22623 = mono_type_get_type_byval (D.22622);
        D.22624 = ctx->constrained_type;
        D.22625 = mono_metadata_type_equal_full (D.22623, D.22624, 1);
        if (D.22625 == 0) goto <D.22626>; else goto <D.22627>;
        <D.22626>:
        D.22435 = ctx->verifiable;
        if (D.22435 != 0) goto <D.22628>; else goto <D.22630>;
        <D.22630>:
        D.22437 = ctx->level;
        D.22438 = D.22437 & 128;
        if (D.22438 != 0) goto <D.22628>; else goto <D.22629>;
        <D.22628>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22439 = ctx->ip_offset;
          D.22631 = monoeg_g_strdup_printf ("Object not compatible with constrained type at 0x%04x", D.22439);
          vinfo->info.message = D.22631;
          vinfo->exception_type = 4;
          D.22441 = ctx->list;
          D.22632 = monoeg_g_slist_prepend (D.22441, vinfo);
          ctx->list = D.22632;
        }
        ctx->verifiable = 0;
        D.22437 = ctx->level;
        D.22443 = D.22437 & 16;
        if (D.22443 != 0) goto <D.22633>; else goto <D.22634>;
        <D.22633>:
        ctx->valid = 0;
        <D.22634>:
        <D.22629>:
        <D.22627>:
        D.22589 = copy.stype;
        D.22635 = D.22589 | 4096;
        copy.stype = D.22635;
        goto <D.22609>;
        <D.22608>:
        D.22636 = stack_slot_is_managed_pointer (value);
        if (D.22636 != 0) goto <D.22637>; else goto <D.22638>;
        <D.22637>:
        D.22622 = value->type;
        D.22639 = mono_class_from_mono_type (D.22622);
        D.22640 = BIT_FIELD_REF <*D.22639, 32, 160>;
        D.22641 = D.22640 & 8;
        if (D.22641 == 0) goto <D.22642>; else goto <D.22643>;
        <D.22642>:
        D.22435 = ctx->verifiable;
        if (D.22435 != 0) goto <D.22644>; else goto <D.22646>;
        <D.22646>:
        D.22437 = ctx->level;
        D.22438 = D.22437 & 128;
        if (D.22438 != 0) goto <D.22644>; else goto <D.22645>;
        <D.22644>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22439 = ctx->ip_offset;
          D.22647 = monoeg_g_strdup_printf ("Cannot call a reference type using a managed pointer to the this arg at 0x%04x", D.22439);
          vinfo->info.message = D.22647;
          vinfo->exception_type = 4;
          D.22441 = ctx->list;
          D.22648 = monoeg_g_slist_prepend (D.22441, vinfo);
          ctx->list = D.22648;
        }
        ctx->verifiable = 0;
        D.22437 = ctx->level;
        D.22443 = D.22437 & 16;
        if (D.22443 != 0) goto <D.22649>; else goto <D.22650>;
        <D.22649>:
        ctx->valid = 0;
        <D.22650>:
        <D.22645>:
        <D.22643>:
        <D.22638>:
        if (virtual == 0) goto <D.22651>; else goto <D.22652>;
        <D.22651>:
        D.22622 = value->type;
        D.22653 = mono_class_from_mono_type (D.22622);
        D.22654 = BIT_FIELD_REF <*D.22653, 32, 160>;
        D.22655 = D.22654 & 8;
        if (D.22655 != 0) goto <D.22656>; else goto <D.22657>;
        <D.22656>:
        D.22428 = method->klass;
        D.22429 = BIT_FIELD_REF <*D.22428, 32, 160>;
        D.22430 = D.22429 & 8;
        if (D.22430 == 0) goto <D.22658>; else goto <D.22659>;
        <D.22658>:
        D.22660 = stack_slot_is_boxed_value (value);
        if (D.22660 == 0) goto <D.22661>; else goto <D.22662>;
        <D.22661>:
        D.22435 = ctx->verifiable;
        if (D.22435 != 0) goto <D.22663>; else goto <D.22665>;
        <D.22665>:
        D.22437 = ctx->level;
        D.22438 = D.22437 & 128;
        if (D.22438 != 0) goto <D.22663>; else goto <D.22664>;
        <D.22663>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22439 = ctx->ip_offset;
          D.22666 = monoeg_g_strdup_printf ("Cannot call a valuetype baseclass at 0x%04x", D.22439);
          vinfo->info.message = D.22666;
          vinfo->exception_type = 4;
          D.22441 = ctx->list;
          D.22667 = monoeg_g_slist_prepend (D.22441, vinfo);
          ctx->list = D.22667;
        }
        ctx->verifiable = 0;
        D.22437 = ctx->level;
        D.22443 = D.22437 & 16;
        if (D.22443 != 0) goto <D.22668>; else goto <D.22669>;
        <D.22668>:
        ctx->valid = 0;
        <D.22669>:
        <D.22664>:
        <D.22662>:
        <D.22659>:
        <D.22657>:
        <D.22652>:
        if (virtual != 0) goto <D.22670>; else goto <D.22671>;
        <D.22670>:
        D.22622 = value->type;
        D.22672 = mono_class_from_mono_type (D.22622);
        D.22673 = BIT_FIELD_REF <*D.22672, 32, 160>;
        D.22674 = D.22673 & 8;
        if (D.22674 != 0) goto <D.22675>; else goto <D.22676>;
        <D.22675>:
        D.22677 = stack_slot_is_boxed_value (value);
        if (D.22677 == 0) goto <D.22678>; else goto <D.22679>;
        <D.22678>:
        D.22435 = ctx->verifiable;
        if (D.22435 != 0) goto <D.22680>; else goto <D.22682>;
        <D.22682>:
        D.22437 = ctx->level;
        D.22438 = D.22437 & 128;
        if (D.22438 != 0) goto <D.22680>; else goto <D.22681>;
        <D.22680>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22439 = ctx->ip_offset;
          D.22683 = monoeg_g_strdup_printf ("Cannot use a valuetype with callvirt at 0x%04x", D.22439);
          vinfo->info.message = D.22683;
          vinfo->exception_type = 4;
          D.22441 = ctx->list;
          D.22684 = monoeg_g_slist_prepend (D.22441, vinfo);
          ctx->list = D.22684;
        }
        ctx->verifiable = 0;
        D.22437 = ctx->level;
        D.22443 = D.22437 & 16;
        if (D.22443 != 0) goto <D.22685>; else goto <D.22686>;
        <D.22685>:
        ctx->valid = 0;
        <D.22686>:
        <D.22681>:
        <D.22679>:
        <D.22676>:
        <D.22671>:
        D.22428 = method->klass;
        D.22429 = BIT_FIELD_REF <*D.22428, 32, 160>;
        D.22430 = D.22429 & 8;
        if (D.22430 != 0) goto <D.22689>; else goto <D.22690>;
        <D.22689>:
        D.22691 = stack_slot_is_boxed_value (value);
        if (D.22691 != 0) goto <D.22687>; else goto <D.22692>;
        <D.22692>:
        D.22693 = stack_slot_is_managed_pointer (value);
        if (D.22693 == 0) goto <D.22687>; else goto <D.22688>;
        <D.22687>:
        D.22435 = ctx->verifiable;
        if (D.22435 != 0) goto <D.22694>; else goto <D.22696>;
        <D.22696>:
        D.22437 = ctx->level;
        D.22438 = D.22437 & 128;
        if (D.22438 != 0) goto <D.22694>; else goto <D.22695>;
        <D.22694>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22439 = ctx->ip_offset;
          D.22697 = monoeg_g_strdup_printf ("Cannot use a boxed or literal valuetype to call a valuetype method at 0x%04x", D.22439);
          vinfo->info.message = D.22697;
          vinfo->exception_type = 4;
          D.22441 = ctx->list;
          D.22698 = monoeg_g_slist_prepend (D.22441, vinfo);
          ctx->list = D.22698;
        }
        ctx->verifiable = 0;
        D.22437 = ctx->level;
        D.22443 = D.22437 & 16;
        if (D.22443 != 0) goto <D.22699>; else goto <D.22700>;
        <D.22699>:
        ctx->valid = 0;
        <D.22700>:
        <D.22695>:
        <D.22688>:
        <D.22690>:
        <D.22609>:
        D.22701 = verify_stack_type_compatibility (ctx, type, &copy);
        if (D.22701 == 0) goto <D.22702>; else goto <D.22703>;
        <D.22702>:
        {
          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.22435 = ctx->verifiable;
          if (D.22435 != 0) goto <D.22704>; else goto <D.22706>;
          <D.22706>:
          D.22437 = ctx->level;
          D.22438 = D.22437 & 128;
          if (D.22438 != 0) goto <D.22704>; else goto <D.22705>;
          <D.22704>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.22439 = ctx->ip_offset;
            D.22707 = 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.22439);
            vinfo->info.message = D.22707;
            vinfo->exception_type = 4;
            D.22441 = ctx->list;
            D.22708 = monoeg_g_slist_prepend (D.22441, vinfo);
            ctx->list = D.22708;
          }
          ctx->verifiable = 0;
          D.22437 = ctx->level;
          D.22443 = D.22437 & 16;
          if (D.22443 != 0) goto <D.22709>; else goto <D.22710>;
          <D.22709>:
          ctx->valid = 0;
          <D.22710>:
          <D.22705>:
          monoeg_g_free (method_name);
          monoeg_g_free (effective);
          monoeg_g_free (expected);
        }
        <D.22703>:
        D.22437 = ctx->level;
        D.22711 = D.22437 & 64;
        if (D.22711 == 0) goto <D.22712>; else goto <D.22713>;
        <D.22712>:
        D.22548 = ctx->method;
        D.22622 = value->type;
        D.22714 = mono_class_from_mono_type (D.22622);
        D.22715 = mono_method_can_access_method_full (D.22548, method, D.22714);
        if (D.22715 == 0) goto <D.22716>; else goto <D.22717>;
        <D.22716>:
        {
          char * name;

          name = mono_method_full_name (method, 1);
          D.22435 = ctx->verifiable;
          if (D.22435 != 0) goto <D.22718>; else goto <D.22720>;
          <D.22720>:
          D.22437 = ctx->level;
          D.22438 = D.22437 & 128;
          if (D.22438 != 0) goto <D.22718>; else goto <D.22719>;
          <D.22718>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.22439 = ctx->ip_offset;
            D.22721 = monoeg_g_strdup_printf ("Method %s is not accessible at 0x%04x", name, D.22439);
            vinfo->info.message = D.22721;
            vinfo->exception_type = 9;
            D.22441 = ctx->list;
            D.22722 = monoeg_g_slist_prepend (D.22441, vinfo);
            ctx->list = D.22722;
          }
          ctx->verifiable = 0;
          D.22437 = ctx->level;
          D.22443 = D.22437 & 16;
          if (D.22443 != 0) goto <D.22723>; else goto <D.22724>;
          <D.22723>:
          ctx->valid = 0;
          <D.22724>:
          <D.22719>:
          monoeg_g_free (name);
        }
        <D.22717>:
        <D.22713>:
      }
    finally
      {
        copy = {CLOBBER};
      }
  }
  goto <D.22725>;
  <D.22539>:
  D.22437 = ctx->level;
  D.22711 = D.22437 & 64;
  if (D.22711 == 0) goto <D.22726>; else goto <D.22727>;
  <D.22726>:
  D.22548 = ctx->method;
  D.22728 = mono_method_can_access_method_full (D.22548, method, 0B);
  if (D.22728 == 0) goto <D.22729>; else goto <D.22730>;
  <D.22729>:
  {
    char * name;

    name = mono_method_full_name (method, 1);
    D.22435 = ctx->verifiable;
    if (D.22435 != 0) goto <D.22731>; else goto <D.22733>;
    <D.22733>:
    D.22437 = ctx->level;
    D.22438 = D.22437 & 128;
    if (D.22438 != 0) goto <D.22731>; else goto <D.22732>;
    <D.22731>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.22439 = ctx->ip_offset;
      D.22734 = monoeg_g_strdup_printf ("Method %s is not accessible at 0x%04x", name, D.22439);
      vinfo->info.message = D.22734;
      vinfo->exception_type = 9;
      D.22441 = ctx->list;
      D.22735 = monoeg_g_slist_prepend (D.22441, vinfo);
      ctx->list = D.22735;
    }
    ctx->verifiable = 0;
    D.22437 = ctx->level;
    D.22443 = D.22437 & 16;
    if (D.22443 != 0) goto <D.22736>; else goto <D.22737>;
    <D.22736>:
    ctx->valid = 0;
    <D.22737>:
    <D.22732>:
    monoeg_g_free (name);
  }
  <D.22730>:
  <D.22727>:
  <D.22725>:
  D.22738 = sig->ret;
  D.22739 = D.22738->type;
  if (D.22739 != 1) goto <D.22740>; else goto <D.22741>;
  <D.22740>:
  D.22738 = sig->ret;
  D.22742 = mono_type_is_valid_in_context (ctx, D.22738);
  if (D.22742 == 0) goto <D.22743>; else goto <D.22744>;
  <D.22743>:
  return;
  <D.22744>:
  D.22745 = check_overflow (ctx);
  if (D.22745 != 0) goto <D.22746>; else goto <D.22747>;
  <D.22746>:
  value = stack_push (ctx);
  D.22738 = sig->ret;
  set_stack_value (ctx, value, D.22738, 0);
  D.22417 = ctx->prefix_set;
  D.22748 = D.22417 & 16;
  if (D.22748 != 0) goto <D.22749>; else goto <D.22750>;
  <D.22749>:
  D.22428 = method->klass;
  D.22751 = D.22428->rank;
  if (D.22751 != 0) goto <D.22752>; else goto <D.22753>;
  <D.22752>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = method->name;
      D.22757 = "Address";
      D.22758 = MEM[(const unsigned char *)D.22757];
      D.22759 = (int) D.22758;
      D.22760 = *__s2;
      D.22761 = (int) D.22760;
      __result = D.22759 - D.22761;
      {
        if (__s2_len != 0) goto <D.22762>; else goto <D.22763>;
        <D.22762>:
        if (__result == 0) goto <D.22764>; else goto <D.22765>;
        <D.22764>:
        D.22766 = &MEM[(void *)"Address" + 1B];
        D.22767 = *D.22766;
        D.22768 = (int) D.22767;
        D.22769 = __s2 + 1;
        D.22770 = *D.22769;
        D.22771 = (int) D.22770;
        __result = D.22768 - D.22771;
        if (__s2_len > 1) goto <D.22772>; else goto <D.22773>;
        <D.22772>:
        if (__result == 0) goto <D.22774>; else goto <D.22775>;
        <D.22774>:
        D.22776 = &MEM[(void *)"Address" + 2B];
        D.22777 = *D.22776;
        D.22778 = (int) D.22777;
        D.22779 = __s2 + 2;
        D.22780 = *D.22779;
        D.22781 = (int) D.22780;
        __result = D.22778 - D.22781;
        if (__s2_len > 2) goto <D.22782>; else goto <D.22783>;
        <D.22782>:
        if (__result == 0) goto <D.22784>; else goto <D.22785>;
        <D.22784>:
        D.22786 = &MEM[(void *)"Address" + 3B];
        D.22787 = *D.22786;
        D.22788 = (int) D.22787;
        D.22789 = __s2 + 3;
        D.22790 = *D.22789;
        D.22791 = (int) D.22790;
        __result = D.22788 - D.22791;
        <D.22785>:
        <D.22783>:
        <D.22775>:
        <D.22773>:
        <D.22765>:
        <D.22763>:
      }
      D.18462 = __result;
    }
    iftmp.80 = -D.18462;
    goto <D.22792>;
    <D.22756>:
    D.22489 = method->name;
    iftmp.80 = __builtin_strcmp (D.22489, "Address");
    <D.22792>:
    D.18463 = iftmp.80;
  }
  if (D.18463 == 0) goto <D.22793>; else goto <D.22794>;
  <D.22793>:
  D.22417 = ctx->prefix_set;
  D.22795 = D.22417 & 4294967279;
  ctx->prefix_set = D.22795;
  D.22576 = value->stype;
  D.22796 = D.22576 | 512;
  value->stype = D.22796;
  <D.22794>:
  <D.22753>:
  <D.22750>:
  <D.22747>:
  <D.22741>:
  D.22417 = ctx->prefix_set;
  D.22524 = D.22417 & 4;
  if (D.22524 != 0) goto <D.22797>; else goto <D.22798>;
  <D.22797>:
  D.22548 = ctx->method;
  D.22799 = mono_method_signature (D.22548);
  D.22800 = D.22799->ret;
  D.22738 = sig->ret;
  D.22801 = mono_delegate_ret_equal (D.22800, D.22738);
  if (D.22801 == 0) goto <D.22802>; else goto <D.22803>;
  <D.22802>:
  D.22435 = ctx->verifiable;
  if (D.22435 != 0) goto <D.22804>; else goto <D.22806>;
  <D.22806>:
  D.22437 = ctx->level;
  D.22438 = D.22437 & 128;
  if (D.22438 != 0) goto <D.22804>; else goto <D.22805>;
  <D.22804>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22439 = ctx->ip_offset;
    D.22807 = monoeg_g_strdup_printf ("Tail call with incompatible return type at 0x%04x", D.22439);
    vinfo->info.message = D.22807;
    vinfo->exception_type = 4;
    D.22441 = ctx->list;
    D.22808 = monoeg_g_slist_prepend (D.22441, vinfo);
    ctx->list = D.22808;
  }
  ctx->verifiable = 0;
  D.22437 = ctx->level;
  D.22443 = D.22437 & 16;
  if (D.22443 != 0) goto <D.22809>; else goto <D.22810>;
  <D.22809>:
  ctx->valid = 0;
  <D.22810>:
  <D.22805>:
  <D.22803>:
  D.22811 = ctx->header;
  D.22812 = D.22811->code;
  D.22439 = ctx->ip_offset;
  D.22813 = D.22439 + 5;
  D.22814 = D.22812 + D.22813;
  D.22815 = *D.22814;
  if (D.22815 != 42) goto <D.22816>; else goto <D.22817>;
  <D.22816>:
  D.22435 = ctx->verifiable;
  if (D.22435 != 0) goto <D.22818>; else goto <D.22820>;
  <D.22820>:
  D.22437 = ctx->level;
  D.22438 = D.22437 & 128;
  if (D.22438 != 0) goto <D.22818>; else goto <D.22819>;
  <D.22818>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22439 = ctx->ip_offset;
    D.22821 = monoeg_g_strdup_printf ("Tail call not followed by ret at 0x%04x", D.22439);
    vinfo->info.message = D.22821;
    vinfo->exception_type = 4;
    D.22441 = ctx->list;
    D.22822 = monoeg_g_slist_prepend (D.22441, vinfo);
    ctx->list = D.22822;
  }
  ctx->verifiable = 0;
  D.22437 = ctx->level;
  D.22443 = D.22437 & 16;
  if (D.22443 != 0) goto <D.22823>; else goto <D.22824>;
  <D.22823>:
  ctx->valid = 0;
  <D.22824>:
  <D.22819>:
  <D.22817>:
  <D.22798>:
}


verifier_load_method (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoMethod * D.22826;
  unsigned int D.22827;
  unsigned int D.22828;
  unsigned int token.81;
  int D.22836;
  struct MonoImage * D.22839;
  unsigned int token.82;
  int D.22841;
  unsigned int D.22842;
  gchar * D.22843;
  struct GSList * D.22844;
  struct GSList * D.22845;
  struct MonoMethod * D.22846;
  unsigned int token.83;
  struct MonoGenericContext * D.22848;
  struct MonoLoaderError * D.22852;
  gchar * D.22853;
  struct GSList * D.22854;
  <unnamed type> D.22855;
  struct MonoMethod * method;

  D.22826 = ctx->method;
  D.22827 = BIT_FIELD_REF <*D.22826, 32, 160>;
  D.22828 = D.22827 & 124;
  if (D.22828 != 0) goto <D.22829>; else goto <D.22830>;
  <D.22829>:
  D.22826 = ctx->method;
  token.81 = (unsigned int) token;
  method = mono_method_get_wrapper_data (D.22826, token.81);
  goto <D.22832>;
  <D.22830>:
  D.22836 = token >> 24;
  if (D.22836 != 6) goto <D.22837>; else goto <D.22833>;
  <D.22837>:
  D.22836 = token >> 24;
  if (D.22836 != 10) goto <D.22838>; else goto <D.22833>;
  <D.22838>:
  D.22836 = token >> 24;
  if (D.22836 != 43) goto <D.22834>; else goto <D.22833>;
  <D.22833>:
  D.22839 = ctx->image;
  token.82 = (unsigned int) token;
  D.22841 = token_bounds_check (D.22839, token.82);
  if (D.22841 == 0) goto <D.22834>; else goto <D.22835>;
  <D.22834>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22842 = ctx->ip_offset;
    D.22843 = monoeg_g_strdup_printf ("Invalid method token 0x%08x for %s at 0x%04x", token, opcode, D.22842);
    vinfo->info.message = D.22843;
    vinfo->exception_type = 12;
    D.22844 = ctx->list;
    D.22845 = monoeg_g_slist_prepend (D.22844, vinfo);
    ctx->list = D.22845;
  }
  ctx->valid = 0;
  D.22846 = 0B;
  return D.22846;
  <D.22835>:
  D.22839 = ctx->image;
  token.83 = (unsigned int) token;
  D.22848 = ctx->generic_context;
  method = mono_get_method_full (D.22839, token.83, 0B, D.22848);
  <D.22832>:
  if (method == 0B) goto <D.22849>; else goto <D.22851>;
  <D.22851>:
  D.22852 = mono_loader_get_last_error ();
  if (D.22852 != 0B) goto <D.22849>; else goto <D.22850>;
  <D.22849>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22842 = ctx->ip_offset;
    D.22853 = monoeg_g_strdup_printf ("Cannot load method from token 0x%08x for %s at 0x%04x", token, opcode, D.22842);
    vinfo->info.message = D.22853;
    vinfo->exception_type = 12;
    D.22844 = ctx->list;
    D.22854 = monoeg_g_slist_prepend (D.22844, vinfo);
    ctx->list = D.22854;
  }
  ctx->valid = 0;
  mono_loader_clear_error ();
  D.22846 = 0B;
  return D.22846;
  <D.22850>:
  D.22855 = mono_method_is_valid_in_context (ctx, method);
  if (D.22855 == 2) goto <D.22856>; else goto <D.22857>;
  <D.22856>:
  D.22846 = 0B;
  return D.22846;
  <D.22857>:
  D.22846 = method;
  return D.22846;
}


token_bounds_check (struct MonoImage * image, guint32 token)
{
  unsigned int D.22859;
  unsigned int D.22860;
  gboolean D.22863;
  int iftmp.84;
  unsigned int D.22867;
  <unnamed-unsigned:24> D.22868;
  unsigned int D.22869;
  unsigned int D.22870;

  D.22859 = BIT_FIELD_REF <*image, 32, 128>;
  D.22860 = D.22859 & 8;
  if (D.22860 != 0) goto <D.22861>; else goto <D.22862>;
  <D.22861>:
  D.22863 = mono_reflection_is_valid_dynamic_token (image, token);
  return D.22863;
  <D.22862>:
  D.22867 = token >> 24;
  D.22868 = image->tables[D.22867].rows;
  D.22869 = (unsigned int) D.22868;
  D.22870 = token & 16777215;
  if (D.22869 >= D.22870) goto <D.22871>; else goto <D.22865>;
  <D.22871>:
  D.22870 = token & 16777215;
  if (D.22870 != 0) goto <D.22872>; else goto <D.22865>;
  <D.22872>:
  iftmp.84 = 1;
  goto <D.22866>;
  <D.22865>:
  iftmp.84 = 0;
  <D.22866>:
  D.22863 = iftmp.84;
  return D.22863;
}


mono_method_is_valid_in_context (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoClass * D.22874;
  struct MonoType * D.22875;
  int D.22876;
  verify_result_t D.22879;
  unsigned int D.22880;
  unsigned int D.22881;
  int D.22884;
  const char * D.22887;
  const char * D.22888;
  const char * D.22889;
  unsigned int D.22890;
  gchar * D.22891;
  struct GSList * D.22892;
  struct GSList * D.22893;
  int D.22894;
  int D.22899;
  int D.22901;
  int D.22902;
  gchar * D.22903;
  struct GSList * D.22904;
  int D.22905;

  D.22874 = method->klass;
  D.22875 = &D.22874->byval_arg;
  D.22876 = mono_type_is_valid_in_context (ctx, D.22875);
  if (D.22876 == 0) goto <D.22877>; else goto <D.22878>;
  <D.22877>:
  D.22879 = 2;
  return D.22879;
  <D.22878>:
  D.22880 = BIT_FIELD_REF <*method, 32, 160>;
  D.22881 = D.22880 & 4096;
  if (D.22881 == 0) goto <D.22882>; else goto <D.22883>;
  <D.22882>:
  D.22879 = 0;
  return D.22879;
  <D.22883>:
  D.22884 = mono_method_is_valid_generic_instantiation (ctx, method);
  if (D.22884 == 0) goto <D.22885>; else goto <D.22886>;
  <D.22885>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22874 = method->klass;
    D.22887 = D.22874->name_space;
    D.22874 = method->klass;
    D.22888 = D.22874->name;
    D.22889 = method->name;
    D.22890 = ctx->ip_offset;
    D.22891 = monoeg_g_strdup_printf ("Invalid generic method instantiation of method %s.%s::%s at 0x%04x", D.22887, D.22888, D.22889, D.22890);
    vinfo->info.message = D.22891;
    vinfo->exception_type = 4;
    D.22892 = ctx->list;
    D.22893 = monoeg_g_slist_prepend (D.22892, vinfo);
    ctx->list = D.22893;
  }
  ctx->valid = 0;
  D.22879 = 2;
  return D.22879;
  <D.22886>:
  D.22894 = mono_method_repect_method_constraints (ctx, method);
  if (D.22894 == 0) goto <D.22895>; else goto <D.22896>;
  <D.22895>:
  D.22899 = ctx->verifiable;
  if (D.22899 != 0) goto <D.22897>; else goto <D.22900>;
  <D.22900>:
  D.22901 = ctx->level;
  D.22902 = D.22901 & 128;
  if (D.22902 != 0) goto <D.22897>; else goto <D.22898>;
  <D.22897>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22874 = method->klass;
    D.22887 = D.22874->name_space;
    D.22874 = method->klass;
    D.22888 = D.22874->name;
    D.22889 = method->name;
    D.22890 = ctx->ip_offset;
    D.22903 = 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.22887, D.22888, D.22889, D.22890);
    vinfo->info.message = D.22903;
    vinfo->exception_type = 4;
    D.22892 = ctx->list;
    D.22904 = monoeg_g_slist_prepend (D.22892, vinfo);
    ctx->list = D.22904;
  }
  ctx->verifiable = 0;
  D.22901 = ctx->level;
  D.22905 = D.22901 & 16;
  if (D.22905 != 0) goto <D.22906>; else goto <D.22907>;
  <D.22906>:
  ctx->valid = 0;
  <D.22907>:
  <D.22898>:
  D.22879 = 1;
  return D.22879;
  <D.22896>:
  D.22879 = 0;
  return D.22879;
}


mono_method_is_valid_generic_instantiation (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethod * D.22909;
  gboolean D.22912;
  int D.22915;
  struct MonoGenericContext * D.22918;
  struct MonoMethodInflated * gmethod;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gmethod = method;
  ginst = gmethod->context.method_inst;
  D.22909 = gmethod->declaring;
  gc = mono_method_get_generic_container (D.22909);
  if (gc == 0B) goto <D.22910>; else goto <D.22911>;
  <D.22910>:
  D.22912 = 1;
  return D.22912;
  <D.22911>:
  if (ctx != 0B) goto <D.22913>; else goto <D.22914>;
  <D.22913>:
  D.22915 = is_valid_generic_instantiation_in_context (ctx, ginst, 1);
  if (D.22915 == 0) goto <D.22916>; else goto <D.22917>;
  <D.22916>:
  D.22912 = 0;
  return D.22912;
  <D.22917>:
  <D.22914>:
  D.22918 = &gmethod->context;
  D.22912 = is_valid_generic_instantiation (gc, D.22918, ginst);
  return D.22912;
}


mono_method_repect_method_constraints (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethod * D.22920;
  gboolean D.22921;
  int iftmp.85;
  struct MonoGenericContext * D.22927;
  int D.22928;
  struct MonoMethodInflated * gmethod;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gmethod = method;
  ginst = gmethod->context.method_inst;
  D.22920 = gmethod->declaring;
  gc = mono_method_get_generic_container (D.22920);
  if (gc == 0B) goto <D.22923>; else goto <D.22926>;
  <D.22926>:
  D.22927 = &gmethod->context;
  D.22928 = generic_arguments_respect_constraints (ctx, gc, D.22927, ginst);
  if (D.22928 != 0) goto <D.22923>; else goto <D.22924>;
  <D.22923>:
  iftmp.85 = 1;
  goto <D.22925>;
  <D.22924>:
  iftmp.85 = 0;
  <D.22925>:
  D.22921 = iftmp.85;
  return D.22921;
}


do_static_branch (struct VerifyContext * ctx, int delta)
{
  unsigned int D.22930;
  unsigned int delta.86;
  unsigned int D.22932;
  int D.22936;
  gchar * D.22937;
  struct GSList * D.22938;
  struct GSList * D.22939;
  struct MonoMethodHeader * D.22940;
  unsigned int target.87;
  int D.22942;
  int D.22945;
  int D.22947;
  int D.22948;
  gchar * D.22949;
  struct GSList * D.22950;
  int D.22951;
  gchar * D.22954;
  struct GSList * D.22955;
  int target;

  D.22930 = ctx->ip_offset;
  delta.86 = (unsigned int) delta;
  D.22932 = D.22930 + delta.86;
  target = (int) D.22932;
  if (target < 0) goto <D.22933>; else goto <D.22935>;
  <D.22935>:
  D.22936 = ctx->code_size;
  if (D.22936 <= target) goto <D.22933>; else goto <D.22934>;
  <D.22933>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22930 = ctx->ip_offset;
    D.22937 = monoeg_g_strdup_printf ("branch target out of code at 0x%04x", D.22930);
    vinfo->info.message = D.22937;
    vinfo->exception_type = 3;
    D.22938 = ctx->list;
    D.22939 = monoeg_g_slist_prepend (D.22938, vinfo);
    ctx->list = D.22939;
  }
  ctx->valid = 0;
  return;
  <D.22934>:
  D.22940 = ctx->header;
  D.22930 = ctx->ip_offset;
  target.87 = (unsigned int) target;
  D.22942 = is_valid_branch_instruction (D.22940, D.22930, target.87);
  switch (D.22942) <default: <D.22956>, case 1: <D.18848>, case 2: <D.18851>>
  <D.18848>:
  D.22945 = ctx->verifiable;
  if (D.22945 != 0) goto <D.22943>; else goto <D.22946>;
  <D.22946>:
  D.22947 = ctx->level;
  D.22948 = D.22947 & 128;
  if (D.22948 != 0) goto <D.22943>; else goto <D.22944>;
  <D.22943>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22930 = ctx->ip_offset;
    D.22949 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22930);
    vinfo->info.message = D.22949;
    vinfo->exception_type = 4;
    D.22938 = ctx->list;
    D.22950 = monoeg_g_slist_prepend (D.22938, vinfo);
    ctx->list = D.22950;
  }
  ctx->verifiable = 0;
  D.22947 = ctx->level;
  D.22951 = D.22947 & 16;
  if (D.22951 != 0) goto <D.22952>; else goto <D.22953>;
  <D.22952>:
  ctx->valid = 0;
  <D.22953>:
  <D.22944>:
  goto <D.18850>;
  <D.18851>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22930 = ctx->ip_offset;
    D.22954 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22930);
    vinfo->info.message = D.22954;
    vinfo->exception_type = 3;
    D.22938 = ctx->list;
    D.22955 = monoeg_g_slist_prepend (D.22938, vinfo);
    ctx->list = D.22955;
  }
  ctx->valid = 0;
  goto <D.18850>;
  <D.22956>:
  <D.18850>:
  ctx->target = target;
}


is_valid_branch_instruction (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.22958;
  unsigned int i.88;
  unsigned int D.22960;
  unsigned int D.22964;
  unsigned int D.22966;
  unsigned int D.22968;
  unsigned int D.22969;
  int D.22974;
  unsigned int D.22975;
  int iftmp.89;
  unsigned int D.22982;
  unsigned int D.22983;
  _Bool D.22985;
  int iftmp.90;
  _Bool D.22991;
  _Bool D.22992;
  int iftmp.91;
  _Bool D.23000;
  int iftmp.92;
  _Bool D.23006;
  _Bool D.23007;
  int iftmp.93;
  unsigned int D.23014;
  _Bool D.23017;
  int iftmp.94;
  _Bool D.23024;
  _Bool D.23025;
  <unnamed-unsigned:15> D.23028;
  int D.23029;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17810>;
  <D.17809>:
  D.22958 = header->clauses;
  i.88 = (unsigned int) i;
  D.22960 = i.88 * 24;
  clause = D.22958 + D.22960;
  D.22964 = clause->flags;
  if (D.22964 == 2) goto <D.22963>; else goto <D.22965>;
  <D.22965>:
  D.22964 = clause->flags;
  if (D.22964 == 4) goto <D.22963>; else goto <D.22962>;
  <D.22963>:
  D.22966 = clause->handler_offset;
  if (D.22966 > offset) goto <D.22961>; else goto <D.22967>;
  <D.22967>:
  D.22966 = clause->handler_offset;
  D.22968 = clause->handler_len;
  D.22969 = D.22966 + D.22968;
  if (D.22969 <= offset) goto <D.22961>; else goto <D.22962>;
  <D.22961>:
  D.22966 = clause->handler_offset;
  if (D.22966 <= target) goto <D.22970>; else goto <D.22971>;
  <D.22970>:
  D.22966 = clause->handler_offset;
  D.22968 = clause->handler_len;
  D.22969 = D.22966 + D.22968;
  if (D.22969 > target) goto <D.22972>; else goto <D.22973>;
  <D.22972>:
  D.22974 = 2;
  return D.22974;
  <D.22973>:
  <D.22971>:
  <D.22962>:
  D.22975 = clause->try_offset;
  if (D.22975 != target) goto <D.22976>; else goto <D.22977>;
  <D.22976>:
  D.22975 = clause->try_offset;
  if (D.22975 <= offset) goto <D.22981>; else goto <D.22979>;
  <D.22981>:
  D.22975 = clause->try_offset;
  D.22982 = clause->try_len;
  D.22983 = D.22975 + D.22982;
  if (D.22983 > offset) goto <D.22984>; else goto <D.22979>;
  <D.22984>:
  iftmp.89 = 1;
  goto <D.22980>;
  <D.22979>:
  iftmp.89 = 0;
  <D.22980>:
  D.22985 = (_Bool) iftmp.89;
  D.22975 = clause->try_offset;
  if (D.22975 <= target) goto <D.22989>; else goto <D.22987>;
  <D.22989>:
  D.22975 = clause->try_offset;
  D.22982 = clause->try_len;
  D.22983 = D.22975 + D.22982;
  if (D.22983 > target) goto <D.22990>; else goto <D.22987>;
  <D.22990>:
  iftmp.90 = 1;
  goto <D.22988>;
  <D.22987>:
  iftmp.90 = 0;
  <D.22988>:
  D.22991 = (_Bool) iftmp.90;
  D.22992 = D.22985 ^ D.22991;
  if (D.22992 != 0) goto <D.22993>; else goto <D.22994>;
  <D.22993>:
  D.22974 = 1;
  return D.22974;
  <D.22994>:
  <D.22977>:
  D.22966 = clause->handler_offset;
  if (D.22966 <= offset) goto <D.22998>; else goto <D.22996>;
  <D.22998>:
  D.22966 = clause->handler_offset;
  D.22968 = clause->handler_len;
  D.22969 = D.22966 + D.22968;
  if (D.22969 > offset) goto <D.22999>; else goto <D.22996>;
  <D.22999>:
  iftmp.91 = 1;
  goto <D.22997>;
  <D.22996>:
  iftmp.91 = 0;
  <D.22997>:
  D.23000 = (_Bool) iftmp.91;
  D.22966 = clause->handler_offset;
  if (D.22966 <= target) goto <D.23004>; else goto <D.23002>;
  <D.23004>:
  D.22966 = clause->handler_offset;
  D.22968 = clause->handler_len;
  D.22969 = D.22966 + D.22968;
  if (D.22969 > target) goto <D.23005>; else goto <D.23002>;
  <D.23005>:
  iftmp.92 = 1;
  goto <D.23003>;
  <D.23002>:
  iftmp.92 = 0;
  <D.23003>:
  D.23006 = (_Bool) iftmp.92;
  D.23007 = D.23000 ^ D.23006;
  if (D.23007 != 0) goto <D.23008>; else goto <D.23009>;
  <D.23008>:
  D.22974 = 1;
  return D.22974;
  <D.23009>:
  D.22964 = clause->flags;
  if (D.22964 == 1) goto <D.23013>; else goto <D.23011>;
  <D.23013>:
  D.23014 = clause->data.filter_offset;
  if (D.23014 <= offset) goto <D.23015>; else goto <D.23011>;
  <D.23015>:
  D.22966 = clause->handler_offset;
  if (D.22966 > offset) goto <D.23016>; else goto <D.23011>;
  <D.23016>:
  iftmp.93 = 1;
  goto <D.23012>;
  <D.23011>:
  iftmp.93 = 0;
  <D.23012>:
  D.23017 = (_Bool) iftmp.93;
  D.22964 = clause->flags;
  if (D.22964 == 1) goto <D.23021>; else goto <D.23019>;
  <D.23021>:
  D.23014 = clause->data.filter_offset;
  if (D.23014 <= target) goto <D.23022>; else goto <D.23019>;
  <D.23022>:
  D.22966 = clause->handler_offset;
  if (D.22966 > target) goto <D.23023>; else goto <D.23019>;
  <D.23023>:
  iftmp.94 = 1;
  goto <D.23020>;
  <D.23019>:
  iftmp.94 = 0;
  <D.23020>:
  D.23024 = (_Bool) iftmp.94;
  D.23025 = D.23017 ^ D.23024;
  if (D.23025 != 0) goto <D.23026>; else goto <D.23027>;
  <D.23026>:
  D.22974 = 1;
  return D.22974;
  <D.23027>:
  i = i + 1;
  <D.17810>:
  D.23028 = header->num_clauses;
  D.23029 = (int) D.23028;
  if (D.23029 > i) goto <D.17809>; else goto <D.17811>;
  <D.17811>:
  D.22974 = 0;
  return D.22974;
}


do_boolean_branch_op (struct VerifyContext * ctx, int delta)
{
  unsigned int D.23031;
  unsigned int delta.95;
  unsigned int D.23033;
  int D.23037;
  gchar * D.23038;
  struct GSList * D.23039;
  struct GSList * D.23040;
  struct MonoMethodHeader * D.23041;
  unsigned int target.96;
  int D.23043;
  int D.23046;
  int D.23048;
  int D.23049;
  gchar * D.23050;
  struct GSList * D.23051;
  int D.23052;
  gchar * D.23055;
  struct GSList * D.23056;
  int D.23058;
  int D.23061;
  const char * D.23067;
  gchar * D.23068;
  struct GSList * D.23069;
  int target;
  struct ILStackDesc * top;

  D.23031 = ctx->ip_offset;
  delta.95 = (unsigned int) delta;
  D.23033 = D.23031 + delta.95;
  target = (int) D.23033;
  if (target < 0) goto <D.23034>; else goto <D.23036>;
  <D.23036>:
  D.23037 = ctx->code_size;
  if (D.23037 <= target) goto <D.23034>; else goto <D.23035>;
  <D.23034>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23031 = ctx->ip_offset;
    D.23038 = monoeg_g_strdup_printf ("Boolean branch target out of code at 0x%04x", D.23031);
    vinfo->info.message = D.23038;
    vinfo->exception_type = 3;
    D.23039 = ctx->list;
    D.23040 = monoeg_g_slist_prepend (D.23039, vinfo);
    ctx->list = D.23040;
  }
  ctx->valid = 0;
  return;
  <D.23035>:
  D.23041 = ctx->header;
  D.23031 = ctx->ip_offset;
  target.96 = (unsigned int) target;
  D.23043 = is_valid_branch_instruction (D.23041, D.23031, target.96);
  switch (D.23043) <default: <D.23057>, case 1: <D.18359>, case 2: <D.18362>>
  <D.18359>:
  D.23046 = ctx->verifiable;
  if (D.23046 != 0) goto <D.23044>; else goto <D.23047>;
  <D.23047>:
  D.23048 = ctx->level;
  D.23049 = D.23048 & 128;
  if (D.23049 != 0) goto <D.23044>; else goto <D.23045>;
  <D.23044>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23031 = ctx->ip_offset;
    D.23050 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23031);
    vinfo->info.message = D.23050;
    vinfo->exception_type = 4;
    D.23039 = ctx->list;
    D.23051 = monoeg_g_slist_prepend (D.23039, vinfo);
    ctx->list = D.23051;
  }
  ctx->verifiable = 0;
  D.23048 = ctx->level;
  D.23052 = D.23048 & 16;
  if (D.23052 != 0) goto <D.23053>; else goto <D.23054>;
  <D.23053>:
  ctx->valid = 0;
  <D.23054>:
  <D.23045>:
  goto <D.18361>;
  <D.18362>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23031 = ctx->ip_offset;
    D.23055 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23031);
    vinfo->info.message = D.23055;
    vinfo->exception_type = 3;
    D.23039 = ctx->list;
    D.23056 = monoeg_g_slist_prepend (D.23039, vinfo);
    ctx->list = D.23056;
  }
  ctx->valid = 0;
  return;
  <D.23057>:
  <D.18361>:
  ctx->target = target;
  D.23058 = check_underflow (ctx, 1);
  if (D.23058 == 0) goto <D.23059>; else goto <D.23060>;
  <D.23059>:
  return;
  <D.23060>:
  top = stack_pop (ctx);
  D.23061 = is_valid_bool_arg (top);
  if (D.23061 == 0) goto <D.23062>; else goto <D.23063>;
  <D.23062>:
  D.23046 = ctx->verifiable;
  if (D.23046 != 0) goto <D.23064>; else goto <D.23066>;
  <D.23066>:
  D.23048 = ctx->level;
  D.23049 = D.23048 & 128;
  if (D.23049 != 0) goto <D.23064>; else goto <D.23065>;
  <D.23064>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23067 = stack_slot_get_name (top);
    D.23031 = ctx->ip_offset;
    D.23068 = monoeg_g_strdup_printf ("Argument type %s not valid for brtrue/brfalse at 0x%04x", D.23067, D.23031);
    vinfo->info.message = D.23068;
    vinfo->exception_type = 4;
    D.23039 = ctx->list;
    D.23069 = monoeg_g_slist_prepend (D.23039, vinfo);
    ctx->list = D.23069;
  }
  ctx->verifiable = 0;
  D.23048 = ctx->level;
  D.23052 = D.23048 & 16;
  if (D.23052 != 0) goto <D.23070>; else goto <D.23071>;
  <D.23070>:
  ctx->valid = 0;
  <D.23071>:
  <D.23065>:
  <D.23063>:
  check_unmanaged_pointer (ctx, top);
}


is_valid_bool_arg (struct ILStackDesc * arg)
{
  int D.23075;
  int D.23077;
  int D.23079;
  gboolean D.23080;
  int D.23081;
  struct MonoType * D.23082;
  _Bool D.23083;
  long int D.23084;
  long int D.23085;
  unsigned char D.23088;
  int D.23089;
  struct MonoGenericClass * D.23090;
  struct MonoClass * D.23091;
  unsigned int D.23092;
  unsigned int D.23093;
  _Bool D.23094;

  D.23075 = stack_slot_is_managed_pointer (arg);
  if (D.23075 != 0) goto <D.23073>; else goto <D.23076>;
  <D.23076>:
  D.23077 = stack_slot_is_boxed_value (arg);
  if (D.23077 != 0) goto <D.23073>; else goto <D.23078>;
  <D.23078>:
  D.23079 = stack_slot_is_null_literal (arg);
  if (D.23079 != 0) goto <D.23073>; else goto <D.23074>;
  <D.23073>:
  D.23080 = 1;
  return D.23080;
  <D.23074>:
  D.23081 = stack_slot_get_underlying_type (arg);
  switch (D.23081) <default: <D.17885>, case 1: <D.17872>, case 2: <D.17873>, case 3: <D.17874>, case 5: <D.17875>, case 6: <D.17876>>
  <D.17872>:
  <D.17873>:
  <D.17874>:
  <D.17875>:
  D.23080 = 1;
  return D.23080;
  <D.17876>:
  D.23082 = arg->type;
  D.23083 = D.23082 == 0B;
  D.23084 = (long int) D.23083;
  D.23085 = __builtin_expect (D.23084, 0);
  if (D.23085 != 0) goto <D.23086>; else goto <D.23087>;
  <D.23086>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1433, "arg->type");
  <D.23087>:
  D.23082 = arg->type;
  D.23088 = D.23082->type;
  D.23089 = (int) D.23088;
  switch (D.23089) <default: <D.23095>, case 14: <D.17878>, case 15: <D.17883>, case 18: <D.17877>, case 20: <D.17881>, case 21: <D.17884>, case 27: <D.17882>, case 28: <D.17879>, case 29: <D.17880>>
  <D.17877>:
  <D.17878>:
  <D.17879>:
  <D.17880>:
  <D.17881>:
  <D.17882>:
  <D.17883>:
  D.23080 = 1;
  return D.23080;
  <D.17884>:
  D.23082 = arg->type;
  D.23090 = D.23082->data.generic_class;
  D.23091 = D.23090->container_class;
  D.23092 = BIT_FIELD_REF <*D.23091, 32, 160>;
  D.23093 = D.23092 & 8;
  D.23094 = D.23093 == 0;
  D.23080 = (gboolean) D.23094;
  return D.23080;
  <D.23095>:
  <D.17885>:
  D.23080 = 0;
  return D.23080;
}


check_unmanaged_pointer (struct VerifyContext * ctx, struct ILStackDesc * value)
{
  int D.23097;
  int D.23102;
  int D.23104;
  int D.23105;
  unsigned int D.23106;
  gchar * D.23107;
  struct GSList * D.23108;
  struct GSList * D.23109;
  int D.23110;
  gboolean D.23113;

  D.23097 = stack_slot_get_type (value);
  if (D.23097 == 5) 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.23106 = ctx->ip_offset;
    D.23107 = monoeg_g_strdup_printf ("Unmanaged pointer is not a verifiable type at 0x%04x", D.23106);
    vinfo->info.message = D.23107;
    vinfo->exception_type = 4;
    D.23108 = ctx->list;
    D.23109 = monoeg_g_slist_prepend (D.23108, vinfo);
    ctx->list = D.23109;
  }
  ctx->verifiable = 0;
  D.23104 = ctx->level;
  D.23110 = D.23104 & 16;
  if (D.23110 != 0) goto <D.23111>; else goto <D.23112>;
  <D.23111>:
  ctx->valid = 0;
  <D.23112>:
  <D.23101>:
  D.23113 = 0;
  return D.23113;
  <D.23099>:
  D.23113 = 1;
  return D.23113;
}


do_switch (struct VerifyContext * ctx, int count, const unsigned char * data)
{
  unsigned int D.23115;
  int D.23116;
  unsigned int D.23117;
  unsigned int D.23118;
  unsigned int D.23119;
  int D.23120;
  int D.23123;
  int D.23126;
  int D.23131;
  int D.23133;
  int D.23134;
  gchar * D.23135;
  struct GSList * D.23136;
  struct GSList * D.23137;
  int D.23138;
  int D.23141;
  sizetype D.23142;
  const unsigned char * D.23143;
  unsigned int D.23144;
  unsigned int base.97;
  unsigned int D.23146;
  int D.23150;
  gchar * D.23151;
  struct GSList * D.23152;
  struct MonoMethodHeader * D.23153;
  unsigned int target.98;
  int D.23155;
  gchar * D.23159;
  struct GSList * D.23160;
  gchar * D.23163;
  struct GSList * D.23164;
  struct ILCodeDesc * D.23166;
  struct ILCodeDesc * D.23167;
  unsigned int target.99;
  unsigned int D.23169;
  struct ILCodeDesc * D.23170;
  int i;
  int base;
  struct ILStackDesc * value;

  D.23115 = ctx->ip_offset;
  D.23116 = count * 4;
  D.23117 = (unsigned int) D.23116;
  D.23118 = D.23115 + D.23117;
  D.23119 = D.23118 + 5;
  base = (int) D.23119;
  D.23120 = check_underflow (ctx, 1);
  if (D.23120 == 0) goto <D.23121>; else goto <D.23122>;
  <D.23121>:
  return;
  <D.23122>:
  value = stack_pop (ctx);
  D.23123 = stack_slot_get_type (value);
  if (D.23123 != 1) goto <D.23124>; else goto <D.23125>;
  <D.23124>:
  D.23126 = stack_slot_get_type (value);
  if (D.23126 != 3) goto <D.23127>; else goto <D.23128>;
  <D.23127>:
  D.23131 = ctx->verifiable;
  if (D.23131 != 0) goto <D.23129>; else goto <D.23132>;
  <D.23132>:
  D.23133 = ctx->level;
  D.23134 = D.23133 & 128;
  if (D.23134 != 0) goto <D.23129>; else goto <D.23130>;
  <D.23129>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23115 = ctx->ip_offset;
    D.23135 = monoeg_g_strdup_printf ("Invalid argument to switch at 0x%04x", D.23115);
    vinfo->info.message = D.23135;
    vinfo->exception_type = 4;
    D.23136 = ctx->list;
    D.23137 = monoeg_g_slist_prepend (D.23136, vinfo);
    ctx->list = D.23137;
  }
  ctx->verifiable = 0;
  D.23133 = ctx->level;
  D.23138 = D.23133 & 16;
  if (D.23138 != 0) goto <D.23139>; else goto <D.23140>;
  <D.23139>:
  ctx->valid = 0;
  <D.23140>:
  <D.23130>:
  <D.23128>:
  <D.23125>:
  i = 0;
  goto <D.18870>;
  <D.18869>:
  {
    int target;

    D.23141 = i * 4;
    D.23142 = (sizetype) D.23141;
    D.23143 = data + D.23142;
    D.23144 = mono_read32 (D.23143);
    base.97 = (unsigned int) base;
    D.23146 = D.23144 + base.97;
    target = (int) D.23146;
    if (target < 0) goto <D.23147>; else goto <D.23149>;
    <D.23149>:
    D.23150 = ctx->code_size;
    if (D.23150 <= target) goto <D.23147>; else goto <D.23148>;
    <D.23147>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.23115 = ctx->ip_offset;
      D.23151 = monoeg_g_strdup_printf ("Switch target %x out of code at 0x%04x", i, D.23115);
      vinfo->info.message = D.23151;
      vinfo->exception_type = 3;
      D.23136 = ctx->list;
      D.23152 = monoeg_g_slist_prepend (D.23136, vinfo);
      ctx->list = D.23152;
    }
    ctx->valid = 0;
    return;
    <D.23148>:
    D.23153 = ctx->header;
    D.23115 = ctx->ip_offset;
    target.98 = (unsigned int) target;
    D.23155 = is_valid_branch_instruction (D.23153, D.23115, target.98);
    switch (D.23155) <default: <D.23165>, case 1: <D.18864>, case 2: <D.18867>>
    <D.18864>:
    D.23131 = ctx->verifiable;
    if (D.23131 != 0) goto <D.23156>; else goto <D.23158>;
    <D.23158>:
    D.23133 = ctx->level;
    D.23134 = D.23133 & 128;
    if (D.23134 != 0) goto <D.23156>; else goto <D.23157>;
    <D.23156>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23115 = ctx->ip_offset;
      D.23159 = monoeg_g_strdup_printf ("Switch target %x escapes out of exception block at 0x%04x", i, D.23115);
      vinfo->info.message = D.23159;
      vinfo->exception_type = 4;
      D.23136 = ctx->list;
      D.23160 = monoeg_g_slist_prepend (D.23136, vinfo);
      ctx->list = D.23160;
    }
    ctx->verifiable = 0;
    D.23133 = ctx->level;
    D.23138 = D.23133 & 16;
    if (D.23138 != 0) goto <D.23161>; else goto <D.23162>;
    <D.23161>:
    ctx->valid = 0;
    <D.23162>:
    <D.23157>:
    goto <D.18866>;
    <D.18867>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.23115 = ctx->ip_offset;
      D.23163 = monoeg_g_strdup_printf ("Switch target %x escapes out of exception block at 0x%04x", i, D.23115);
      vinfo->info.message = D.23163;
      vinfo->exception_type = 3;
      D.23136 = ctx->list;
      D.23164 = monoeg_g_slist_prepend (D.23136, vinfo);
      ctx->list = D.23164;
    }
    ctx->valid = 0;
    return;
    <D.23165>:
    <D.18866>:
    D.23166 = &ctx->eval;
    D.23167 = ctx->code;
    target.99 = (unsigned int) target;
    D.23169 = target.99 * 12;
    D.23170 = D.23167 + D.23169;
    merge_stacks (ctx, D.23166, D.23170, 0, 1);
  }
  i = i + 1;
  <D.18870>:
  if (i < count) goto <D.18869>; else goto <D.18871>;
  <D.18871>:
}


do_load_indirect (struct VerifyContext * ctx, int opcode)
{
  unsigned int D.23172;
  unsigned int D.23173;
  int D.23174;
  int D.23177;
  int D.23182;
  int D.23184;
  int D.23185;
  unsigned int D.23186;
  gchar * D.23187;
  struct GSList * D.23188;
  struct GSList * D.23189;
  int D.23190;
  struct ILStackDesc * D.23193;
  struct MonoType * D.23194;
  int D.23199;
  struct MonoType * D.23201;
  struct MonoClass * D.23202;
  unsigned int D.23203;
  unsigned int D.23204;
  gchar * D.23208;
  struct GSList * D.23209;
  struct ILStackDesc * D.23212;
  struct MonoType * D.23213;
  struct MonoType * D.23215;
  struct MonoType * D.23216;
  int D.23217;
  gchar * D.23223;
  struct GSList * D.23224;
  struct ILStackDesc * D.23227;
  struct MonoType * D.23228;
  struct ILStackDesc * value;

  D.23172 = ctx->prefix_set;
  D.23173 = D.23172 & 4294967292;
  ctx->prefix_set = D.23173;
  D.23174 = check_underflow (ctx, 1);
  if (D.23174 == 0) goto <D.23175>; else goto <D.23176>;
  <D.23175>:
  return;
  <D.23176>:
  value = stack_pop (ctx);
  D.23177 = stack_slot_is_managed_pointer (value);
  if (D.23177 == 0) goto <D.23178>; else goto <D.23179>;
  <D.23178>:
  D.23182 = ctx->verifiable;
  if (D.23182 != 0) goto <D.23180>; else goto <D.23183>;
  <D.23183>:
  D.23184 = ctx->level;
  D.23185 = D.23184 & 128;
  if (D.23185 != 0) goto <D.23180>; else goto <D.23181>;
  <D.23180>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23186 = ctx->ip_offset;
    D.23187 = monoeg_g_strdup_printf ("Load indirect not using a manager pointer at 0x%04x", D.23186);
    vinfo->info.message = D.23187;
    vinfo->exception_type = 4;
    D.23188 = ctx->list;
    D.23189 = monoeg_g_slist_prepend (D.23188, vinfo);
    ctx->list = D.23189;
  }
  ctx->verifiable = 0;
  D.23184 = ctx->level;
  D.23190 = D.23184 & 16;
  if (D.23190 != 0) goto <D.23191>; else goto <D.23192>;
  <D.23191>:
  ctx->valid = 0;
  <D.23192>:
  <D.23181>:
  D.23193 = stack_push (ctx);
  D.23194 = mono_type_from_opcode (opcode);
  set_stack_value (ctx, D.23193, D.23194, 0);
  return;
  <D.23179>:
  if (opcode == 80) goto <D.23195>; else goto <D.23196>;
  <D.23195>:
  D.23199 = stack_slot_get_underlying_type (value);
  if (D.23199 != 6) goto <D.23197>; else goto <D.23200>;
  <D.23200>:
  D.23201 = value->type;
  D.23202 = mono_class_from_mono_type (D.23201);
  D.23203 = BIT_FIELD_REF <*D.23202, 32, 160>;
  D.23204 = D.23203 & 8;
  if (D.23204 != 0) goto <D.23197>; else goto <D.23198>;
  <D.23197>:
  D.23182 = ctx->verifiable;
  if (D.23182 != 0) goto <D.23205>; else goto <D.23207>;
  <D.23207>:
  D.23184 = ctx->level;
  D.23185 = D.23184 & 128;
  if (D.23185 != 0) goto <D.23205>; else goto <D.23206>;
  <D.23205>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23186 = ctx->ip_offset;
    D.23208 = monoeg_g_strdup_printf ("Invalid type at stack for ldind_ref expected object byref operation at 0x%04x", D.23186);
    vinfo->info.message = D.23208;
    vinfo->exception_type = 4;
    D.23188 = ctx->list;
    D.23209 = monoeg_g_slist_prepend (D.23188, vinfo);
    ctx->list = D.23209;
  }
  ctx->verifiable = 0;
  D.23184 = ctx->level;
  D.23190 = D.23184 & 16;
  if (D.23190 != 0) goto <D.23210>; else goto <D.23211>;
  <D.23210>:
  ctx->valid = 0;
  <D.23211>:
  <D.23206>:
  <D.23198>:
  D.23212 = stack_push (ctx);
  D.23201 = value->type;
  D.23213 = mono_type_get_type_byval (D.23201);
  set_stack_value (ctx, D.23212, D.23213, 0);
  goto <D.23214>;
  <D.23196>:
  D.23215 = mono_type_from_opcode (opcode);
  D.23201 = value->type;
  D.23216 = mono_type_get_type_byval (D.23201);
  D.23217 = verify_type_compatibility_full (ctx, D.23215, D.23216, 1);
  if (D.23217 == 0) goto <D.23218>; else goto <D.23219>;
  <D.23218>:
  D.23182 = ctx->verifiable;
  if (D.23182 != 0) goto <D.23220>; else goto <D.23222>;
  <D.23222>:
  D.23184 = ctx->level;
  D.23185 = D.23184 & 128;
  if (D.23185 != 0) goto <D.23220>; else goto <D.23221>;
  <D.23220>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23186 = ctx->ip_offset;
    D.23223 = monoeg_g_strdup_printf ("Invalid type at stack for ldind 0x%x operation at 0x%04x", opcode, D.23186);
    vinfo->info.message = D.23223;
    vinfo->exception_type = 4;
    D.23188 = ctx->list;
    D.23224 = monoeg_g_slist_prepend (D.23188, vinfo);
    ctx->list = D.23224;
  }
  ctx->verifiable = 0;
  D.23184 = ctx->level;
  D.23190 = D.23184 & 16;
  if (D.23190 != 0) goto <D.23225>; else goto <D.23226>;
  <D.23225>:
  ctx->valid = 0;
  <D.23226>:
  <D.23221>:
  <D.23219>:
  D.23227 = stack_push (ctx);
  D.23228 = mono_type_from_opcode (opcode);
  set_stack_value (ctx, D.23227, D.23228, 0);
  <D.23214>:
}


mono_type_from_opcode (int opcode)
{
  struct MonoType * D.23230;
  struct MonoClass * D.23231;
  struct MonoClass * D.23232;
  struct MonoClass * D.23233;
  struct MonoClass * D.23234;
  struct MonoClass * D.23235;
  struct MonoClass * D.23236;
  struct MonoClass * D.23237;
  struct MonoClass * D.23238;

  switch (opcode) <default: <D.18740>, case 70: <D.18702>, case 71: <D.18703>, case 72: <D.18708>, case 73: <D.18709>, case 74: <D.18714>, case 75: <D.18715>, case 76: <D.18720>, case 77: <D.18732>, case 78: <D.18724>, case 79: <D.18728>, case 80: <D.18736>, case 81: <D.18737>, case 82: <D.18704>, case 83: <D.18710>, case 84: <D.18716>, case 85: <D.18721>, case 86: <D.18725>, case 87: <D.18729>, case 144: <D.18705>, case 145: <D.18706>, case 146: <D.18711>, case 147: <D.18712>, case 148: <D.18717>, case 149: <D.18718>, case 150: <D.18722>, case 151: <D.18734>, case 152: <D.18726>, case 153: <D.18730>, case 154: <D.18738>, case 155: <D.18735>, case 156: <D.18707>, case 157: <D.18713>, case 158: <D.18719>, case 159: <D.18723>, case 160: <D.18727>, case 161: <D.18731>, case 162: <D.18739>, case 223: <D.18733>>
  <D.18702>:
  <D.18703>:
  <D.18704>:
  <D.18705>:
  <D.18706>:
  <D.18707>:
  D.23231 = mono_defaults.sbyte_class;
  D.23230 = &D.23231->byval_arg;
  return D.23230;
  <D.18708>:
  <D.18709>:
  <D.18710>:
  <D.18711>:
  <D.18712>:
  <D.18713>:
  D.23232 = mono_defaults.int16_class;
  D.23230 = &D.23232->byval_arg;
  return D.23230;
  <D.18714>:
  <D.18715>:
  <D.18716>:
  <D.18717>:
  <D.18718>:
  <D.18719>:
  D.23233 = mono_defaults.int32_class;
  D.23230 = &D.23233->byval_arg;
  return D.23230;
  <D.18720>:
  <D.18721>:
  <D.18722>:
  <D.18723>:
  D.23234 = mono_defaults.int64_class;
  D.23230 = &D.23234->byval_arg;
  return D.23230;
  <D.18724>:
  <D.18725>:
  <D.18726>:
  <D.18727>:
  D.23235 = mono_defaults.single_class;
  D.23230 = &D.23235->byval_arg;
  return D.23230;
  <D.18728>:
  <D.18729>:
  <D.18730>:
  <D.18731>:
  D.23236 = mono_defaults.double_class;
  D.23230 = &D.23236->byval_arg;
  return D.23230;
  <D.18732>:
  <D.18733>:
  <D.18734>:
  <D.18735>:
  D.23237 = mono_defaults.int_class;
  D.23230 = &D.23237->byval_arg;
  return D.23230;
  <D.18736>:
  <D.18737>:
  <D.18738>:
  <D.18739>:
  D.23238 = mono_defaults.object_class;
  D.23230 = &D.23238->byval_arg;
  return D.23230;
  <D.18740>:
  monoeg_g_log (0B, 4, "unknown opcode %02x in mono_type_from_opcode ", opcode);
  <D.18741>:
  goto <D.18741>;
  D.23230 = 0B;
  return D.23230;
}


do_store_indirect (struct VerifyContext * ctx, int opcode)
{
  unsigned int D.23240;
  unsigned int D.23241;
  int D.23242;
  int D.23245;
  int D.23248;
  int D.23253;
  int D.23255;
  int D.23256;
  unsigned int D.23257;
  gchar * D.23258;
  struct GSList * D.23259;
  struct GSList * D.23260;
  int D.23261;
  int D.23264;
  gchar * D.23270;
  struct GSList * D.23271;
  struct MonoType * D.23274;
  struct MonoType * D.23275;
  struct MonoType * D.23276;
  int D.23277;
  gchar * D.23283;
  struct GSList * D.23284;
  struct MonoType * D.23287;
  int D.23288;
  gchar * D.23294;
  struct GSList * D.23295;
  struct ILStackDesc * addr;
  struct ILStackDesc * val;

  D.23240 = ctx->prefix_set;
  D.23241 = D.23240 & 4294967292;
  ctx->prefix_set = D.23241;
  D.23242 = check_underflow (ctx, 2);
  if (D.23242 == 0) goto <D.23243>; else goto <D.23244>;
  <D.23243>:
  return;
  <D.23244>:
  val = stack_pop (ctx);
  addr = stack_pop (ctx);
  check_unmanaged_pointer (ctx, addr);
  D.23245 = stack_slot_is_managed_pointer (addr);
  if (D.23245 == 0) goto <D.23246>; else goto <D.23247>;
  <D.23246>:
  D.23248 = stack_slot_get_type (addr);
  if (D.23248 != 5) goto <D.23249>; else goto <D.23250>;
  <D.23249>:
  D.23253 = ctx->verifiable;
  if (D.23253 != 0) goto <D.23251>; else goto <D.23254>;
  <D.23254>:
  D.23255 = ctx->level;
  D.23256 = D.23255 & 128;
  if (D.23256 != 0) goto <D.23251>; else goto <D.23252>;
  <D.23251>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23257 = ctx->ip_offset;
    D.23258 = monoeg_g_strdup_printf ("Invalid non-pointer argument to stind at 0x%04x", D.23257);
    vinfo->info.message = D.23258;
    vinfo->exception_type = 4;
    D.23259 = ctx->list;
    D.23260 = monoeg_g_slist_prepend (D.23259, vinfo);
    ctx->list = D.23260;
  }
  ctx->verifiable = 0;
  D.23255 = ctx->level;
  D.23261 = D.23255 & 16;
  if (D.23261 != 0) goto <D.23262>; else goto <D.23263>;
  <D.23262>:
  ctx->valid = 0;
  <D.23263>:
  <D.23252>:
  return;
  <D.23250>:
  <D.23247>:
  D.23264 = stack_slot_is_managed_mutability_pointer (addr);
  if (D.23264 != 0) goto <D.23265>; else goto <D.23266>;
  <D.23265>:
  D.23253 = ctx->verifiable;
  if (D.23253 != 0) goto <D.23267>; else goto <D.23269>;
  <D.23269>:
  D.23255 = ctx->level;
  D.23256 = D.23255 & 128;
  if (D.23256 != 0) goto <D.23267>; else goto <D.23268>;
  <D.23267>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23257 = ctx->ip_offset;
    D.23270 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with stind at 0x%04x", D.23257);
    vinfo->info.message = D.23270;
    vinfo->exception_type = 4;
    D.23259 = ctx->list;
    D.23271 = monoeg_g_slist_prepend (D.23259, vinfo);
    ctx->list = D.23271;
  }
  ctx->verifiable = 0;
  D.23255 = ctx->level;
  D.23261 = D.23255 & 16;
  if (D.23261 != 0) goto <D.23272>; else goto <D.23273>;
  <D.23272>:
  ctx->valid = 0;
  <D.23273>:
  <D.23268>:
  return;
  <D.23266>:
  D.23274 = mono_type_from_opcode (opcode);
  D.23275 = addr->type;
  D.23276 = mono_type_get_type_byval (D.23275);
  D.23277 = verify_type_compatibility_full (ctx, D.23274, D.23276, 1);
  if (D.23277 == 0) goto <D.23278>; else goto <D.23279>;
  <D.23278>:
  D.23253 = ctx->verifiable;
  if (D.23253 != 0) goto <D.23280>; else goto <D.23282>;
  <D.23282>:
  D.23255 = ctx->level;
  D.23256 = D.23255 & 128;
  if (D.23256 != 0) goto <D.23280>; else goto <D.23281>;
  <D.23280>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23257 = ctx->ip_offset;
    D.23283 = monoeg_g_strdup_printf ("Invalid addr type at stack for stind 0x%x operation at 0x%04x", opcode, D.23257);
    vinfo->info.message = D.23283;
    vinfo->exception_type = 4;
    D.23259 = ctx->list;
    D.23284 = monoeg_g_slist_prepend (D.23259, vinfo);
    ctx->list = D.23284;
  }
  ctx->verifiable = 0;
  D.23255 = ctx->level;
  D.23261 = D.23255 & 16;
  if (D.23261 != 0) goto <D.23285>; else goto <D.23286>;
  <D.23285>:
  ctx->valid = 0;
  <D.23286>:
  <D.23281>:
  <D.23279>:
  D.23287 = mono_type_from_opcode (opcode);
  D.23288 = verify_stack_type_compatibility (ctx, D.23287, val);
  if (D.23288 == 0) goto <D.23289>; else goto <D.23290>;
  <D.23289>:
  D.23253 = ctx->verifiable;
  if (D.23253 != 0) goto <D.23291>; else goto <D.23293>;
  <D.23293>:
  D.23255 = ctx->level;
  D.23256 = D.23255 & 128;
  if (D.23256 != 0) goto <D.23291>; else goto <D.23292>;
  <D.23291>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23257 = ctx->ip_offset;
    D.23294 = monoeg_g_strdup_printf ("Invalid value type at stack for stind 0x%x operation at 0x%04x", opcode, D.23257);
    vinfo->info.message = D.23294;
    vinfo->exception_type = 4;
    D.23259 = ctx->list;
    D.23295 = monoeg_g_slist_prepend (D.23259, vinfo);
    ctx->list = D.23295;
  }
  ctx->verifiable = 0;
  D.23255 = ctx->level;
  D.23261 = D.23255 & 16;
  if (D.23261 != 0) goto <D.23296>; else goto <D.23297>;
  <D.23296>:
  ctx->valid = 0;
  <D.23297>:
  <D.23292>:
  <D.23290>:
}


do_unary_math_op (struct VerifyContext * ctx, int op)
{
  int D.23299;
  int D.23302;
  struct MonoType * D.23304;
  int D.23305;
  int D.23309;
  int D.23311;
  int D.23312;
  unsigned int D.23313;
  gchar * D.23314;
  struct GSList * D.23315;
  struct GSList * D.23316;
  int D.23317;
  struct ILStackDesc * value;

  D.23299 = check_underflow (ctx, 1);
  if (D.23299 == 0) goto <D.23300>; else goto <D.23301>;
  <D.23300>:
  return;
  <D.23301>:
  value = stack_pop (ctx);
  D.23302 = stack_slot_get_type (value);
  switch (D.23302) <default: <D.18568>, case 1: <D.18562>, case 2: <D.18563>, case 3: <D.18564>, case 4: <D.18566>, case 6: <D.18567>>
  <D.18562>:
  <D.18563>:
  <D.18564>:
  goto <D.18565>;
  <D.18566>:
  if (op == 101) goto <D.18565>; else goto <D.23303>;
  <D.23303>:
  <D.18567>:
  D.23304 = value->type;
  D.23305 = mono_type_is_enum_type (D.23304);
  if (D.23305 != 0) goto <D.18565>; else goto <D.23306>;
  <D.23306>:
  <D.18568>:
  D.23309 = ctx->verifiable;
  if (D.23309 != 0) goto <D.23307>; else goto <D.23310>;
  <D.23310>:
  D.23311 = ctx->level;
  D.23312 = D.23311 & 128;
  if (D.23312 != 0) goto <D.23307>; else goto <D.23308>;
  <D.23307>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23313 = ctx->ip_offset;
    D.23314 = monoeg_g_strdup_printf ("Invalid type at stack for unary not at 0x%04x", D.23313);
    vinfo->info.message = D.23314;
    vinfo->exception_type = 4;
    D.23315 = ctx->list;
    D.23316 = monoeg_g_slist_prepend (D.23315, vinfo);
    ctx->list = D.23316;
  }
  ctx->verifiable = 0;
  D.23311 = ctx->level;
  D.23317 = D.23311 & 16;
  if (D.23317 != 0) goto <D.23318>; else goto <D.23319>;
  <D.23318>:
  ctx->valid = 0;
  <D.23319>:
  <D.23308>:
  <D.18565>:
  stack_push_stack_val (ctx, value);
}


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

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


do_cpobj (struct VerifyContext * ctx, int token)
{
  int D.23326;
  int D.23329;
  int D.23334;
  int D.23336;
  int D.23337;
  unsigned int D.23338;
  gchar * D.23339;
  struct GSList * D.23340;
  struct GSList * D.23341;
  int D.23342;
  int D.23345;
  gchar * D.23351;
  struct GSList * D.23352;
  int D.23355;
  gchar * D.23361;
  struct GSList * D.23362;
  struct MonoType * D.23365;
  struct MonoType * D.23366;
  int D.23367;
  gchar * D.23373;
  struct GSList * D.23374;
  struct MonoType * D.23377;
  struct MonoType * D.23378;
  int D.23379;
  gchar * D.23385;
  struct GSList * D.23386;
  struct ILStackDesc * dest;
  struct ILStackDesc * src;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "cpobj");
  if (type == 0B) goto <D.23324>; else goto <D.23325>;
  <D.23324>:
  return;
  <D.23325>:
  D.23326 = check_underflow (ctx, 2);
  if (D.23326 == 0) goto <D.23327>; else goto <D.23328>;
  <D.23327>:
  return;
  <D.23328>:
  src = stack_pop (ctx);
  dest = stack_pop (ctx);
  D.23329 = stack_slot_is_managed_pointer (src);
  if (D.23329 == 0) goto <D.23330>; else goto <D.23331>;
  <D.23330>:
  D.23334 = ctx->verifiable;
  if (D.23334 != 0) goto <D.23332>; else goto <D.23335>;
  <D.23335>:
  D.23336 = ctx->level;
  D.23337 = D.23336 & 128;
  if (D.23337 != 0) goto <D.23332>; else goto <D.23333>;
  <D.23332>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23338 = ctx->ip_offset;
    D.23339 = monoeg_g_strdup_printf ("Invalid source of cpobj operation at 0x%04x", D.23338);
    vinfo->info.message = D.23339;
    vinfo->exception_type = 4;
    D.23340 = ctx->list;
    D.23341 = monoeg_g_slist_prepend (D.23340, vinfo);
    ctx->list = D.23341;
  }
  ctx->verifiable = 0;
  D.23336 = ctx->level;
  D.23342 = D.23336 & 16;
  if (D.23342 != 0) goto <D.23343>; else goto <D.23344>;
  <D.23343>:
  ctx->valid = 0;
  <D.23344>:
  <D.23333>:
  <D.23331>:
  D.23345 = stack_slot_is_managed_pointer (dest);
  if (D.23345 == 0) goto <D.23346>; else goto <D.23347>;
  <D.23346>:
  D.23334 = ctx->verifiable;
  if (D.23334 != 0) goto <D.23348>; else goto <D.23350>;
  <D.23350>:
  D.23336 = ctx->level;
  D.23337 = D.23336 & 128;
  if (D.23337 != 0) goto <D.23348>; else goto <D.23349>;
  <D.23348>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23338 = ctx->ip_offset;
    D.23351 = monoeg_g_strdup_printf ("Invalid destination of cpobj operation at 0x%04x", D.23338);
    vinfo->info.message = D.23351;
    vinfo->exception_type = 4;
    D.23340 = ctx->list;
    D.23352 = monoeg_g_slist_prepend (D.23340, vinfo);
    ctx->list = D.23352;
  }
  ctx->verifiable = 0;
  D.23336 = ctx->level;
  D.23342 = D.23336 & 16;
  if (D.23342 != 0) goto <D.23353>; else goto <D.23354>;
  <D.23353>:
  ctx->valid = 0;
  <D.23354>:
  <D.23349>:
  <D.23347>:
  D.23355 = stack_slot_is_managed_mutability_pointer (dest);
  if (D.23355 != 0) goto <D.23356>; else goto <D.23357>;
  <D.23356>:
  D.23334 = ctx->verifiable;
  if (D.23334 != 0) goto <D.23358>; else goto <D.23360>;
  <D.23360>:
  D.23336 = ctx->level;
  D.23337 = D.23336 & 128;
  if (D.23337 != 0) goto <D.23358>; else goto <D.23359>;
  <D.23358>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23338 = ctx->ip_offset;
    D.23361 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with cpobj at 0x%04x", D.23338);
    vinfo->info.message = D.23361;
    vinfo->exception_type = 4;
    D.23340 = ctx->list;
    D.23362 = monoeg_g_slist_prepend (D.23340, vinfo);
    ctx->list = D.23362;
  }
  ctx->verifiable = 0;
  D.23336 = ctx->level;
  D.23342 = D.23336 & 16;
  if (D.23342 != 0) goto <D.23363>; else goto <D.23364>;
  <D.23363>:
  ctx->valid = 0;
  <D.23364>:
  <D.23359>:
  <D.23357>:
  D.23365 = src->type;
  D.23366 = mono_type_get_type_byval (D.23365);
  D.23367 = verify_type_compatibility (ctx, type, D.23366);
  if (D.23367 == 0) goto <D.23368>; else goto <D.23369>;
  <D.23368>:
  D.23334 = ctx->verifiable;
  if (D.23334 != 0) goto <D.23370>; else goto <D.23372>;
  <D.23372>:
  D.23336 = ctx->level;
  D.23337 = D.23336 & 128;
  if (D.23337 != 0) goto <D.23370>; else goto <D.23371>;
  <D.23370>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23338 = ctx->ip_offset;
    D.23373 = monoeg_g_strdup_printf ("Token and source types of cpobj don\'t match at 0x%04x", D.23338);
    vinfo->info.message = D.23373;
    vinfo->exception_type = 4;
    D.23340 = ctx->list;
    D.23374 = monoeg_g_slist_prepend (D.23340, vinfo);
    ctx->list = D.23374;
  }
  ctx->verifiable = 0;
  D.23336 = ctx->level;
  D.23342 = D.23336 & 16;
  if (D.23342 != 0) goto <D.23375>; else goto <D.23376>;
  <D.23375>:
  ctx->valid = 0;
  <D.23376>:
  <D.23371>:
  <D.23369>:
  D.23377 = dest->type;
  D.23378 = mono_type_get_type_byval (D.23377);
  D.23379 = verify_type_compatibility (ctx, D.23378, type);
  if (D.23379 == 0) goto <D.23380>; else goto <D.23381>;
  <D.23380>:
  D.23334 = ctx->verifiable;
  if (D.23334 != 0) goto <D.23382>; else goto <D.23384>;
  <D.23384>:
  D.23336 = ctx->level;
  D.23337 = D.23336 & 128;
  if (D.23337 != 0) goto <D.23382>; else goto <D.23383>;
  <D.23382>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23338 = ctx->ip_offset;
    D.23385 = monoeg_g_strdup_printf ("Destination and token types of cpobj don\'t match at 0x%04x", D.23338);
    vinfo->info.message = D.23385;
    vinfo->exception_type = 4;
    D.23340 = ctx->list;
    D.23386 = monoeg_g_slist_prepend (D.23340, vinfo);
    ctx->list = D.23386;
  }
  ctx->verifiable = 0;
  D.23336 = ctx->level;
  D.23342 = D.23336 & 16;
  if (D.23342 != 0) goto <D.23387>; else goto <D.23388>;
  <D.23387>:
  ctx->valid = 0;
  <D.23388>:
  <D.23383>:
  <D.23381>:
}


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

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


do_ldobj_value (struct VerifyContext * ctx, int token)
{
  unsigned int D.23392;
  unsigned int D.23393;
  int D.23396;
  int D.23401;
  int D.23404;
  int D.23407;
  struct MonoType * D.23409;
  unsigned char D.23410;
  const char * D.23411;
  unsigned int D.23412;
  gchar * D.23413;
  struct GSList * D.23414;
  struct GSList * D.23415;
  int D.23416;
  int D.23421;
  int D.23423;
  int D.23424;
  gchar * D.23425;
  struct GSList * D.23426;
  int D.23427;
  struct MonoType * D.23430;
  int D.23431;
  gchar * D.23437;
  struct GSList * D.23438;
  struct ILStackDesc * D.23441;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "ldobj");
  D.23392 = ctx->prefix_set;
  D.23393 = D.23392 & 4294967292;
  ctx->prefix_set = D.23393;
  if (type == 0B) goto <D.23394>; else goto <D.23395>;
  <D.23394>:
  return;
  <D.23395>:
  D.23396 = check_underflow (ctx, 1);
  if (D.23396 == 0) goto <D.23397>; else goto <D.23398>;
  <D.23397>:
  return;
  <D.23398>:
  value = stack_pop (ctx);
  D.23401 = stack_slot_is_managed_pointer (value);
  if (D.23401 == 0) goto <D.23402>; else goto <D.23403>;
  <D.23402>:
  D.23404 = stack_slot_get_type (value);
  if (D.23404 != 3) goto <D.23405>; else goto <D.23406>;
  <D.23405>:
  D.23407 = stack_slot_get_type (value);
  if (D.23407 != 5) goto <D.23399>; else goto <D.23408>;
  <D.23408>:
  D.23409 = value->type;
  D.23410 = D.23409->type;
  if (D.23410 == 27) goto <D.23399>; else goto <D.23400>;
  <D.23399>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23411 = stack_slot_get_name (value);
    D.23412 = ctx->ip_offset;
    D.23413 = monoeg_g_strdup_printf ("Invalid argument %s to ldobj at 0x%04x", D.23411, D.23412);
    vinfo->info.message = D.23413;
    vinfo->exception_type = 3;
    D.23414 = ctx->list;
    D.23415 = monoeg_g_slist_prepend (D.23414, vinfo);
    ctx->list = D.23415;
  }
  ctx->valid = 0;
  return;
  <D.23400>:
  <D.23406>:
  <D.23403>:
  D.23416 = stack_slot_get_type (value);
  if (D.23416 == 3) goto <D.23417>; else goto <D.23418>;
  <D.23417>:
  D.23421 = ctx->verifiable;
  if (D.23421 != 0) goto <D.23419>; else goto <D.23422>;
  <D.23422>:
  D.23423 = ctx->level;
  D.23424 = D.23423 & 128;
  if (D.23424 != 0) goto <D.23419>; else goto <D.23420>;
  <D.23419>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23412 = ctx->ip_offset;
    D.23425 = monoeg_g_strdup_printf ("Using native pointer to ldobj at 0x%04x", D.23412);
    vinfo->info.message = D.23425;
    vinfo->exception_type = 4;
    D.23414 = ctx->list;
    D.23426 = monoeg_g_slist_prepend (D.23414, vinfo);
    ctx->list = D.23426;
  }
  ctx->verifiable = 0;
  D.23423 = ctx->level;
  D.23427 = D.23423 & 16;
  if (D.23427 != 0) goto <D.23428>; else goto <D.23429>;
  <D.23428>:
  ctx->valid = 0;
  <D.23429>:
  <D.23420>:
  <D.23418>:
  D.23409 = value->type;
  D.23430 = mono_type_get_type_byval (D.23409);
  D.23431 = verify_type_compatibility_full (ctx, type, D.23430, 1);
  if (D.23431 == 0) goto <D.23432>; else goto <D.23433>;
  <D.23432>:
  D.23421 = ctx->verifiable;
  if (D.23421 != 0) goto <D.23434>; else goto <D.23436>;
  <D.23436>:
  D.23423 = ctx->level;
  D.23424 = D.23423 & 128;
  if (D.23424 != 0) goto <D.23434>; else goto <D.23435>;
  <D.23434>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23412 = ctx->ip_offset;
    D.23437 = monoeg_g_strdup_printf ("Invalid type at stack for ldojb operation at 0x%04x", D.23412);
    vinfo->info.message = D.23437;
    vinfo->exception_type = 4;
    D.23414 = ctx->list;
    D.23438 = monoeg_g_slist_prepend (D.23414, vinfo);
    ctx->list = D.23438;
  }
  ctx->verifiable = 0;
  D.23423 = ctx->level;
  D.23427 = D.23423 & 16;
  if (D.23427 != 0) goto <D.23439>; else goto <D.23440>;
  <D.23439>:
  ctx->valid = 0;
  <D.23440>:
  <D.23435>:
  <D.23433>:
  D.23441 = stack_push (ctx);
  set_stack_value (ctx, D.23441, type, 0);
}


do_ldstr (struct VerifyContext * ctx, guint32 token)
{
  struct MonoMethod * D.23443;
  unsigned int D.23444;
  unsigned int D.23445;
  struct MonoImage * D.23448;
  unsigned int D.23449;
  unsigned int D.23450;
  unsigned int D.23453;
  unsigned int D.23456;
  gchar * D.23457;
  struct GSList * D.23458;
  struct GSList * D.23459;
  unsigned int D.23460;
  int D.23461;
  struct GSList * error.100;
  struct GSList * D.23467;
  gchar * D.23468;
  struct GSList * D.23469;
  int D.23470;
  struct MonoClass * D.23473;
  struct MonoType * D.23474;
  struct GSList * error;

  try
    {
      error = 0B;
      D.23443 = ctx->method;
      D.23444 = BIT_FIELD_REF <*D.23443, 32, 160>;
      D.23445 = D.23444 & 124;
      if (D.23445 == 0) goto <D.23446>; else goto <D.23447>;
      <D.23446>:
      D.23448 = ctx->image;
      D.23449 = BIT_FIELD_REF <*D.23448, 32, 128>;
      D.23450 = D.23449 & 8;
      if (D.23450 == 0) goto <D.23451>; else goto <D.23452>;
      <D.23451>:
      D.23453 = token & 4278190080;
      if (D.23453 != 1879048192) goto <D.23454>; else goto <D.23455>;
      <D.23454>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.23456 = ctx->ip_offset;
        D.23457 = monoeg_g_strdup_printf ("Invalid string token %x at 0x%04x", token, D.23456);
        vinfo->info.message = D.23457;
        vinfo->exception_type = 12;
        D.23458 = ctx->list;
        D.23459 = monoeg_g_slist_prepend (D.23458, vinfo);
        ctx->list = D.23459;
      }
      ctx->valid = 0;
      return;
      <D.23455>:
      D.23448 = ctx->image;
      D.23460 = token & 16777215;
      D.23461 = mono_verifier_verify_string_signature (D.23448, D.23460, &error);
      if (D.23461 == 0) goto <D.23462>; else goto <D.23463>;
      <D.23462>:
      error.100 = error;
      if (error.100 != 0B) goto <D.23465>; else goto <D.23466>;
      <D.23465>:
      D.23458 = ctx->list;
      error.100 = error;
      D.23467 = monoeg_g_slist_concat (D.23458, error.100);
      ctx->list = D.23467;
      <D.23466>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.23456 = ctx->ip_offset;
        D.23468 = monoeg_g_strdup_printf ("Invalid string index %x at 0x%04x", token, D.23456);
        vinfo->info.message = D.23468;
        vinfo->exception_type = 12;
        D.23458 = ctx->list;
        D.23469 = monoeg_g_slist_prepend (D.23458, vinfo);
        ctx->list = D.23469;
      }
      ctx->valid = 0;
      return;
      <D.23463>:
      <D.23452>:
      <D.23447>:
      D.23470 = check_overflow (ctx);
      if (D.23470 != 0) goto <D.23471>; else goto <D.23472>;
      <D.23471>:
      D.23473 = mono_defaults.string_class;
      D.23474 = &D.23473->byval_arg;
      stack_push_val (ctx, 6, D.23474);
      <D.23472>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


do_newobj (struct VerifyContext * ctx, int token)
{
  int D.23480;
  unsigned int D.23483;
  gchar * D.23484;
  struct GSList * D.23485;
  struct GSList * D.23486;
  struct MonoClass * D.23487;
  unsigned int D.23488;
  unsigned int D.23489;
  int D.23494;
  int D.23496;
  int D.23497;
  gchar * D.23498;
  struct GSList * D.23499;
  int D.23500;
  int D.23503;
  struct MonoMethod * D.23506;
  int D.23507;
  gchar * D.23513;
  struct GSList * D.23514;
  gchar * D.23519;
  struct GSList * D.23520;
  unsigned int D.23521;
  unsigned int D.23522;
  gchar * D.23525;
  struct GSList * D.23526;
  short unsigned int D.23527;
  int D.23528;
  int D.23529;
  struct MonoClass * D.23532;
  struct MonoClass * D.23533;
  _Bool D.23534;
  gchar * D.23539;
  struct GSList * D.23540;
  struct MonoType * D.23542;
  int D.23543;
  gchar * D.23549;
  struct GSList * D.23550;
  int D.23553;
  gchar * D.23559;
  struct GSList * D.23560;
  int D.23563;
  struct ILStackDesc * D.23566;
  struct MonoType * D.23567;
  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.23478>; else goto <D.23479>;
  <D.23478>:
  return;
  <D.23479>:
  D.23480 = mono_method_is_constructor (method);
  if (D.23480 == 0) goto <D.23481>; else goto <D.23482>;
  <D.23481>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23483 = ctx->ip_offset;
    D.23484 = monoeg_g_strdup_printf ("Method from token 0x%08x not a constructor at 0x%04x", token, D.23483);
    vinfo->info.message = D.23484;
    vinfo->exception_type = 3;
    D.23485 = ctx->list;
    D.23486 = monoeg_g_slist_prepend (D.23485, vinfo);
    ctx->list = D.23486;
  }
  ctx->valid = 0;
  return;
  <D.23482>:
  D.23487 = method->klass;
  D.23488 = D.23487->flags;
  D.23489 = D.23488 & 160;
  if (D.23489 != 0) goto <D.23490>; else goto <D.23491>;
  <D.23490>:
  D.23494 = ctx->verifiable;
  if (D.23494 != 0) goto <D.23492>; else goto <D.23495>;
  <D.23495>:
  D.23496 = ctx->level;
  D.23497 = D.23496 & 128;
  if (D.23497 != 0) goto <D.23492>; else goto <D.23493>;
  <D.23492>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23483 = ctx->ip_offset;
    D.23498 = monoeg_g_strdup_printf ("Trying to instantiate an abstract or interface type at 0x%04x", D.23483);
    vinfo->info.message = D.23498;
    vinfo->exception_type = 4;
    D.23485 = ctx->list;
    D.23499 = monoeg_g_slist_prepend (D.23485, vinfo);
    ctx->list = D.23499;
  }
  ctx->verifiable = 0;
  D.23496 = ctx->level;
  D.23500 = D.23496 & 16;
  if (D.23500 != 0) goto <D.23501>; else goto <D.23502>;
  <D.23501>:
  ctx->valid = 0;
  <D.23502>:
  <D.23493>:
  <D.23491>:
  D.23496 = ctx->level;
  D.23503 = D.23496 & 64;
  if (D.23503 == 0) goto <D.23504>; else goto <D.23505>;
  <D.23504>:
  D.23506 = ctx->method;
  D.23507 = mono_method_can_access_method_full (D.23506, method, 0B);
  if (D.23507 == 0) goto <D.23508>; else goto <D.23509>;
  <D.23508>:
  {
    char * from;
    char * to;

    D.23506 = ctx->method;
    from = mono_method_full_name (D.23506, 1);
    to = mono_method_full_name (method, 1);
    D.23494 = ctx->verifiable;
    if (D.23494 != 0) goto <D.23510>; else goto <D.23512>;
    <D.23512>:
    D.23496 = ctx->level;
    D.23497 = D.23496 & 128;
    if (D.23497 != 0) goto <D.23510>; else goto <D.23511>;
    <D.23510>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23483 = ctx->ip_offset;
      D.23513 = monoeg_g_strdup_printf ("Constructor %s not visible from %s at 0x%04x", to, from, D.23483);
      vinfo->info.message = D.23513;
      vinfo->exception_type = 9;
      D.23485 = ctx->list;
      D.23514 = monoeg_g_slist_prepend (D.23485, vinfo);
      ctx->list = D.23514;
    }
    ctx->verifiable = 0;
    D.23496 = ctx->level;
    D.23500 = D.23496 & 16;
    if (D.23500 != 0) goto <D.23515>; else goto <D.23516>;
    <D.23515>:
    ctx->valid = 0;
    <D.23516>:
    <D.23511>:
    monoeg_g_free (from);
    monoeg_g_free (to);
  }
  <D.23509>:
  <D.23505>:
  sig = mono_method_signature (method);
  if (sig == 0B) goto <D.23517>; else goto <D.23518>;
  <D.23517>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23483 = ctx->ip_offset;
    D.23519 = monoeg_g_strdup_printf ("Invalid constructor signature to newobj at 0x%04x", D.23483);
    vinfo->info.message = D.23519;
    vinfo->exception_type = 3;
    D.23485 = ctx->list;
    D.23520 = monoeg_g_slist_prepend (D.23485, vinfo);
    ctx->list = D.23520;
  }
  ctx->valid = 0;
  return;
  <D.23518>:
  D.23521 = BIT_FIELD_REF <*sig, 32, 64>;
  D.23522 = D.23521 & 4194304;
  if (D.23522 == 0) goto <D.23523>; else goto <D.23524>;
  <D.23523>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23483 = ctx->ip_offset;
    D.23525 = monoeg_g_strdup_printf ("Invalid constructor signature missing hasthis at 0x%04x", D.23483);
    vinfo->info.message = D.23525;
    vinfo->exception_type = 3;
    D.23485 = ctx->list;
    D.23526 = monoeg_g_slist_prepend (D.23485, vinfo);
    ctx->list = D.23526;
  }
  ctx->valid = 0;
  return;
  <D.23524>:
  D.23527 = sig->param_count;
  D.23528 = (int) D.23527;
  D.23529 = check_underflow (ctx, D.23528);
  if (D.23529 == 0) goto <D.23530>; else goto <D.23531>;
  <D.23530>:
  return;
  <D.23531>:
  D.23487 = method->klass;
  D.23532 = D.23487->parent;
  D.23533 = mono_defaults.multicastdelegate_class;
  D.23534 = D.23532 == D.23533;
  is_delegate = (gboolean) D.23534;
  if (is_delegate != 0) goto <D.23535>; else goto <D.23536>;
  <D.23535>:
  {
    struct ILStackDesc * funptr;

    D.23527 = sig->param_count;
    if (D.23527 != 2) goto <D.23537>; else goto <D.23538>;
    <D.23537>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.23483 = ctx->ip_offset;
      D.23539 = monoeg_g_strdup_printf ("Invalid delegate constructor at 0x%04x", D.23483);
      vinfo->info.message = D.23539;
      vinfo->exception_type = 3;
      D.23485 = ctx->list;
      D.23540 = monoeg_g_slist_prepend (D.23485, vinfo);
      ctx->list = D.23540;
    }
    ctx->valid = 0;
    return;
    <D.23538>:
    funptr = stack_pop (ctx);
    value = stack_pop (ctx);
    D.23487 = method->klass;
    verify_delegate_compatibility (ctx, D.23487, value, funptr);
  }
  goto <D.23541>;
  <D.23536>:
  D.23527 = sig->param_count;
  D.23528 = (int) D.23527;
  i = D.23528 + -1;
  goto <D.18680>;
  <D.18679>:
  value = stack_pop (ctx);
  D.23542 = sig->params[i];
  D.23543 = verify_stack_type_compatibility (ctx, D.23542, value);
  if (D.23543 == 0) goto <D.23544>; else goto <D.23545>;
  <D.23544>:
  {
    char * stack_name;
    char * sig_name;

    stack_name = stack_slot_full_name (value);
    D.23542 = sig->params[i];
    sig_name = mono_type_full_name (D.23542);
    D.23494 = ctx->verifiable;
    if (D.23494 != 0) goto <D.23546>; else goto <D.23548>;
    <D.23548>:
    D.23496 = ctx->level;
    D.23497 = D.23496 & 128;
    if (D.23497 != 0) goto <D.23546>; else goto <D.23547>;
    <D.23546>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23483 = ctx->ip_offset;
      D.23549 = monoeg_g_strdup_printf ("Incompatible parameter value with constructor signature: %s X %s at 0x%04x", sig_name, stack_name, D.23483);
      vinfo->info.message = D.23549;
      vinfo->exception_type = 4;
      D.23485 = ctx->list;
      D.23550 = monoeg_g_slist_prepend (D.23485, vinfo);
      ctx->list = D.23550;
    }
    ctx->verifiable = 0;
    D.23496 = ctx->level;
    D.23500 = D.23496 & 16;
    if (D.23500 != 0) goto <D.23551>; else goto <D.23552>;
    <D.23551>:
    ctx->valid = 0;
    <D.23552>:
    <D.23547>:
    monoeg_g_free (stack_name);
    monoeg_g_free (sig_name);
  }
  <D.23545>:
  D.23553 = stack_slot_is_managed_mutability_pointer (value);
  if (D.23553 != 0) goto <D.23554>; else goto <D.23555>;
  <D.23554>:
  D.23494 = ctx->verifiable;
  if (D.23494 != 0) goto <D.23556>; else goto <D.23558>;
  <D.23558>:
  D.23496 = ctx->level;
  D.23497 = D.23496 & 128;
  if (D.23497 != 0) goto <D.23556>; else goto <D.23557>;
  <D.23556>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23483 = ctx->ip_offset;
    D.23559 = monoeg_g_strdup_printf ("Cannot use a readonly pointer as argument of newobj at 0x%04x", D.23483);
    vinfo->info.message = D.23559;
    vinfo->exception_type = 4;
    D.23485 = ctx->list;
    D.23560 = monoeg_g_slist_prepend (D.23485, vinfo);
    ctx->list = D.23560;
  }
  ctx->verifiable = 0;
  D.23496 = ctx->level;
  D.23500 = D.23496 & 16;
  if (D.23500 != 0) goto <D.23561>; else goto <D.23562>;
  <D.23561>:
  ctx->valid = 0;
  <D.23562>:
  <D.23557>:
  <D.23555>:
  i = i + -1;
  <D.18680>:
  if (i >= 0) goto <D.18679>; else goto <D.18681>;
  <D.18681>:
  <D.23541>:
  D.23563 = check_overflow (ctx);
  if (D.23563 != 0) goto <D.23564>; else goto <D.23565>;
  <D.23564>:
  D.23566 = stack_push (ctx);
  D.23487 = method->klass;
  D.23567 = &D.23487->byval_arg;
  set_stack_value (ctx, D.23566, D.23567, 0);
  <D.23565>:
}


verify_delegate_compatibility (struct VerifyContext * ctx, struct MonoClass * delegate, struct ILStackDesc * value, struct ILStackDesc * funptr)
{
  struct MonoMethodHeader * D.23569;
  int D.23572;
  struct MonoMethod * D.23574;
  int D.23577;
  int D.23579;
  int D.23580;
  unsigned int D.23581;
  gchar * D.23582;
  struct GSList * D.23583;
  struct GSList * D.23584;
  int D.23585;
  struct MonoMethodSignature * D.23591;
  gchar * D.23592;
  struct GSList * D.23593;
  struct MonoMethodSignature * D.23597;
  gchar * D.23598;
  struct GSList * D.23599;
  int iftmp.101;
  sizetype D.23604;
  const guint8 * D.23605;
  unsigned char D.23606;
  struct ILCodeDesc * D.23608;
  unsigned int D.23609;
  sizetype D.23610;
  struct ILCodeDesc * D.23611;
  short unsigned int D.23612;
  int D.23613;
  int D.23614;
  sizetype D.23616;
  const guint8 * D.23617;
  unsigned char D.23618;
  short unsigned int D.23620;
  int D.23621;
  int D.23622;
  struct MonoMethodSignature * D.23626;
  short unsigned int D.23627;
  int D.23628;
  int D.23629;
  struct MonoMethodSignature * D.23630;
  short unsigned int D.23631;
  int D.23632;
  _Bool D.23633;
  struct MonoMethodSignature * D.23634;
  struct MonoMethodSignature * D.23635;
  int D.23636;
  struct MonoMethodSignature * D.23639;
  struct MonoMethodSignature * D.23640;
  gchar * D.23644;
  struct GSList * D.23645;
  sizetype D.23657;
  const guint8 * D.23658;
  unsigned char D.23659;
  sizetype D.23661;
  struct ILCodeDesc * D.23662;
  short unsigned int D.23663;
  int D.23664;
  int D.23665;
  short unsigned int D.23670;
  gchar * D.23674;
  struct GSList * D.23675;
  struct ILCodeDesc * D.23678;
  short unsigned int D.23679;
  short unsigned int D.23680;
  struct MonoMethodSignature * D.23685;
  short unsigned int D.23686;
  struct MonoMethodSignature * D.23688;
  struct MonoType * D.23689;
  int D.23690;
  gchar * D.23694;
  struct GSList * D.23695;
  int D.23701;
  gchar * D.23709;
  struct GSList * D.23710;
  struct MonoClass * D.23714;
  struct MonoType * D.23715;
  int D.23716;
  int D.23719;
  gchar * D.23725;
  struct GSList * D.23726;
  int D.23729;
  gchar * D.23735;
  struct GSList * D.23736;
  struct MonoMethod * invoke;
  struct MonoMethod * method;
  const guint8 * ip;
  guint32 ip_offset;
  gboolean is_static_ldftn;
  gboolean is_first_arg_bound;

  D.23569 = ctx->header;
  ip = D.23569->code;
  ip_offset = ctx->ip_offset;
  is_static_ldftn = 0;
  is_first_arg_bound = 0;
  D.23572 = stack_slot_get_type (funptr);
  if (D.23572 != 5) goto <D.23570>; else goto <D.23573>;
  <D.23573>:
  D.23574 = funptr->method;
  if (D.23574 == 0B) goto <D.23570>; else goto <D.23571>;
  <D.23570>:
  D.23577 = ctx->verifiable;
  if (D.23577 != 0) goto <D.23575>; else goto <D.23578>;
  <D.23578>:
  D.23579 = ctx->level;
  D.23580 = D.23579 & 128;
  if (D.23580 != 0) goto <D.23575>; else goto <D.23576>;
  <D.23575>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23581 = ctx->ip_offset;
    D.23582 = monoeg_g_strdup_printf ("Invalid function pointer parameter for delegate constructor at 0x%04x", D.23581);
    vinfo->info.message = D.23582;
    vinfo->exception_type = 4;
    D.23583 = ctx->list;
    D.23584 = monoeg_g_slist_prepend (D.23583, vinfo);
    ctx->list = D.23584;
  }
  ctx->verifiable = 0;
  D.23579 = ctx->level;
  D.23585 = D.23579 & 16;
  if (D.23585 != 0) goto <D.23586>; else goto <D.23587>;
  <D.23586>:
  ctx->valid = 0;
  <D.23587>:
  <D.23576>:
  return;
  <D.23571>:
  invoke = mono_get_delegate_invoke (delegate);
  method = funptr->method;
  if (method == 0B) goto <D.23588>; else goto <D.23590>;
  <D.23590>:
  D.23591 = mono_method_signature (method);
  if (D.23591 == 0B) goto <D.23588>; else goto <D.23589>;
  <D.23588>:
  {
    char * name;

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

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.23581 = ctx->ip_offset;
      D.23592 = monoeg_g_strdup_printf ("Invalid method on stack to create delegate %s construction at 0x%04x", name, D.23581);
      vinfo->info.message = D.23592;
      vinfo->exception_type = 3;
      D.23583 = ctx->list;
      D.23593 = monoeg_g_slist_prepend (D.23583, vinfo);
      ctx->list = D.23593;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.23589>:
  if (invoke == 0B) goto <D.23594>; else goto <D.23596>;
  <D.23596>:
  D.23597 = mono_method_signature (invoke);
  if (D.23597 == 0B) goto <D.23594>; else goto <D.23595>;
  <D.23594>:
  {
    char * name;

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

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.23581 = ctx->ip_offset;
      D.23598 = monoeg_g_strdup_printf ("Delegate type %s with bad Invoke method at 0x%04x", name, D.23581);
      vinfo->info.message = D.23598;
      vinfo->exception_type = 3;
      D.23583 = ctx->list;
      D.23599 = monoeg_g_slist_prepend (D.23583, vinfo);
      ctx->list = D.23599;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.23595>:
  if (ip_offset > 5) goto <D.23603>; else goto <D.23601>;
  <D.23603>:
  D.23604 = ip_offset + 4294967290;
  D.23605 = ip + D.23604;
  D.23606 = *D.23605;
  if (D.23606 == 254) goto <D.23607>; else goto <D.23601>;
  <D.23607>:
  D.23608 = ctx->code;
  D.23609 = ip_offset * 12;
  D.23610 = D.23609 + 4294967224;
  D.23611 = D.23608 + D.23610;
  D.23612 = D.23611->flags;
  D.23613 = (int) D.23612;
  D.23614 = D.23613 & 1;
  if (D.23614 != 0) goto <D.23615>; else goto <D.23601>;
  <D.23615>:
  D.23616 = ip_offset + 4294967291;
  D.23617 = ip + D.23616;
  D.23618 = *D.23617;
  if (D.23618 == 6) goto <D.23619>; else goto <D.23601>;
  <D.23619>:
  D.23620 = method->flags;
  D.23621 = (int) D.23620;
  D.23622 = D.23621 & 16;
  if (D.23622 != 0) goto <D.23623>; else goto <D.23601>;
  <D.23623>:
  iftmp.101 = 1;
  goto <D.23602>;
  <D.23601>:
  iftmp.101 = 0;
  <D.23602>:
  is_static_ldftn = iftmp.101;
  if (is_static_ldftn != 0) goto <D.23624>; else goto <D.23625>;
  <D.23624>:
  D.23626 = mono_method_signature (invoke);
  D.23627 = D.23626->param_count;
  D.23628 = (int) D.23627;
  D.23629 = D.23628 + 1;
  D.23630 = mono_method_signature (method);
  D.23631 = D.23630->param_count;
  D.23632 = (int) D.23631;
  D.23633 = D.23629 == D.23632;
  is_first_arg_bound = (gboolean) D.23633;
  <D.23625>:
  D.23634 = mono_method_signature (invoke);
  D.23635 = mono_method_signature (method);
  D.23636 = mono_delegate_signature_equal (D.23634, D.23635, is_first_arg_bound);
  if (D.23636 == 0) goto <D.23637>; else goto <D.23638>;
  <D.23637>:
  {
    char * fun_sig;
    char * invoke_sig;

    D.23639 = mono_method_signature (method);
    fun_sig = mono_signature_get_desc (D.23639, 0);
    D.23640 = mono_method_signature (invoke);
    invoke_sig = mono_signature_get_desc (D.23640, 0);
    D.23577 = ctx->verifiable;
    if (D.23577 != 0) goto <D.23641>; else goto <D.23643>;
    <D.23643>:
    D.23579 = ctx->level;
    D.23580 = D.23579 & 128;
    if (D.23580 != 0) goto <D.23641>; else goto <D.23642>;
    <D.23641>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23581 = ctx->ip_offset;
      D.23644 = monoeg_g_strdup_printf ("Function pointer signature \'%s\' doesn\'t match delegate\'s signature \'%s\' at 0x%04x", fun_sig, invoke_sig, D.23581);
      vinfo->info.message = D.23644;
      vinfo->exception_type = 4;
      D.23583 = ctx->list;
      D.23645 = monoeg_g_slist_prepend (D.23583, vinfo);
      ctx->list = D.23645;
    }
    ctx->verifiable = 0;
    D.23579 = ctx->level;
    D.23585 = D.23579 & 16;
    if (D.23585 != 0) goto <D.23646>; else goto <D.23647>;
    <D.23646>:
    ctx->valid = 0;
    <D.23647>:
    <D.23642>:
    monoeg_g_free (fun_sig);
    monoeg_g_free (invoke_sig);
  }
  <D.23638>:
  if (ip_offset > 5) goto <D.23650>; else goto <D.23648>;
  <D.23650>:
  D.23604 = ip_offset + 4294967290;
  D.23605 = ip + D.23604;
  D.23606 = *D.23605;
  if (D.23606 == 254) goto <D.23651>; else goto <D.23648>;
  <D.23651>:
  D.23608 = ctx->code;
  D.23609 = ip_offset * 12;
  D.23610 = D.23609 + 4294967224;
  D.23611 = D.23608 + D.23610;
  D.23612 = D.23611->flags;
  D.23613 = (int) D.23612;
  D.23614 = D.23613 & 1;
  if (D.23614 != 0) goto <D.23652>; else goto <D.23648>;
  <D.23652>:
  D.23616 = ip_offset + 4294967291;
  D.23617 = ip + D.23616;
  D.23618 = *D.23617;
  if (D.23618 == 6) goto <D.23653>; else goto <D.23648>;
  <D.23653>:
  verify_ldftn_delegate (ctx, delegate, value, funptr);
  goto <D.23649>;
  <D.23648>:
  if (ip_offset > 6) goto <D.23656>; else goto <D.23654>;
  <D.23656>:
  D.23657 = ip_offset + 4294967289;
  D.23658 = ip + D.23657;
  D.23659 = *D.23658;
  if (D.23659 == 37) goto <D.23660>; else goto <D.23654>;
  <D.23660>:
  D.23608 = ctx->code;
  D.23609 = ip_offset * 12;
  D.23661 = D.23609 + 4294967212;
  D.23662 = D.23608 + D.23661;
  D.23663 = D.23662->flags;
  D.23664 = (int) D.23663;
  D.23665 = D.23664 & 1;
  if (D.23665 != 0) goto <D.23666>; else goto <D.23654>;
  <D.23666>:
  D.23604 = ip_offset + 4294967290;
  D.23605 = ip + D.23604;
  D.23606 = *D.23605;
  if (D.23606 == 254) goto <D.23667>; else goto <D.23654>;
  <D.23667>:
  D.23608 = ctx->code;
  D.23609 = ip_offset * 12;
  D.23610 = D.23609 + 4294967224;
  D.23611 = D.23608 + D.23610;
  D.23612 = D.23611->flags;
  D.23613 = (int) D.23612;
  D.23614 = D.23613 & 1;
  if (D.23614 != 0) goto <D.23668>; else goto <D.23654>;
  <D.23668>:
  D.23616 = ip_offset + 4294967291;
  D.23617 = ip + D.23616;
  D.23618 = *D.23617;
  if (D.23618 == 7) goto <D.23669>; else goto <D.23654>;
  <D.23669>:
  D.23608 = ctx->code;
  D.23609 = ip_offset * 12;
  D.23610 = D.23609 + 4294967224;
  D.23611 = D.23608 + D.23610;
  D.23608 = ctx->code;
  D.23609 = ip_offset * 12;
  D.23610 = D.23609 + 4294967224;
  D.23611 = D.23608 + D.23610;
  D.23612 = D.23611->flags;
  D.23670 = D.23612 | 16;
  D.23611->flags = D.23670;
  goto <D.23655>;
  <D.23654>:
  D.23577 = ctx->verifiable;
  if (D.23577 != 0) goto <D.23671>; else goto <D.23673>;
  <D.23673>:
  D.23579 = ctx->level;
  D.23580 = D.23579 & 128;
  if (D.23580 != 0) goto <D.23671>; else goto <D.23672>;
  <D.23671>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23581 = ctx->ip_offset;
    D.23674 = monoeg_g_strdup_printf ("Invalid code sequence for delegate creation at 0x%04x", D.23581);
    vinfo->info.message = D.23674;
    vinfo->exception_type = 4;
    D.23583 = ctx->list;
    D.23675 = monoeg_g_slist_prepend (D.23583, vinfo);
    ctx->list = D.23675;
  }
  ctx->verifiable = 0;
  D.23579 = ctx->level;
  D.23585 = D.23579 & 16;
  if (D.23585 != 0) goto <D.23676>; else goto <D.23677>;
  <D.23676>:
  ctx->valid = 0;
  <D.23677>:
  <D.23672>:
  <D.23655>:
  <D.23649>:
  D.23608 = ctx->code;
  D.23609 = ip_offset * 12;
  D.23678 = D.23608 + D.23609;
  D.23608 = ctx->code;
  D.23609 = ip_offset * 12;
  D.23678 = D.23608 + D.23609;
  D.23679 = D.23678->flags;
  D.23680 = D.23679 | 16;
  D.23678->flags = D.23680;
  if (is_first_arg_bound != 0) goto <D.23681>; else goto <D.23682>;
  <D.23681>:
  D.23685 = mono_method_signature (method);
  D.23686 = D.23685->param_count;
  if (D.23686 == 0) goto <D.23683>; else goto <D.23687>;
  <D.23687>:
  D.23688 = mono_method_signature (method);
  D.23689 = D.23688->params[0];
  D.23690 = verify_stack_type_compatibility_full (ctx, D.23689, value, 0, 1);
  if (D.23690 == 0) goto <D.23683>; else goto <D.23684>;
  <D.23683>:
  D.23577 = ctx->verifiable;
  if (D.23577 != 0) goto <D.23691>; else goto <D.23693>;
  <D.23693>:
  D.23579 = ctx->level;
  D.23580 = D.23579 & 128;
  if (D.23580 != 0) goto <D.23691>; else goto <D.23692>;
  <D.23691>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23581 = ctx->ip_offset;
    D.23694 = monoeg_g_strdup_printf ("This object not compatible with function pointer for delegate creation at 0x%04x", D.23581);
    vinfo->info.message = D.23694;
    vinfo->exception_type = 4;
    D.23583 = ctx->list;
    D.23695 = monoeg_g_slist_prepend (D.23583, vinfo);
    ctx->list = D.23695;
  }
  ctx->verifiable = 0;
  D.23579 = ctx->level;
  D.23585 = D.23579 & 16;
  if (D.23585 != 0) goto <D.23696>; else goto <D.23697>;
  <D.23696>:
  ctx->valid = 0;
  <D.23697>:
  <D.23692>:
  <D.23684>:
  goto <D.23698>;
  <D.23682>:
  D.23620 = method->flags;
  D.23621 = (int) D.23620;
  D.23622 = D.23621 & 16;
  if (D.23622 != 0) goto <D.23699>; else goto <D.23700>;
  <D.23699>:
  D.23701 = stack_slot_is_null_literal (value);
  if (D.23701 == 0) goto <D.23702>; else goto <D.23703>;
  <D.23702>:
  if (is_first_arg_bound == 0) goto <D.23704>; else goto <D.23705>;
  <D.23704>:
  D.23577 = ctx->verifiable;
  if (D.23577 != 0) goto <D.23706>; else goto <D.23708>;
  <D.23708>:
  D.23579 = ctx->level;
  D.23580 = D.23579 & 128;
  if (D.23580 != 0) goto <D.23706>; else goto <D.23707>;
  <D.23706>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23581 = ctx->ip_offset;
    D.23709 = monoeg_g_strdup_printf ("Non-null this args used with static function for delegate creation at 0x%04x", D.23581);
    vinfo->info.message = D.23709;
    vinfo->exception_type = 4;
    D.23583 = ctx->list;
    D.23710 = monoeg_g_slist_prepend (D.23583, vinfo);
    ctx->list = D.23710;
  }
  ctx->verifiable = 0;
  D.23579 = ctx->level;
  D.23585 = D.23579 & 16;
  if (D.23585 != 0) goto <D.23711>; else goto <D.23712>;
  <D.23711>:
  ctx->valid = 0;
  <D.23712>:
  <D.23707>:
  <D.23705>:
  <D.23703>:
  goto <D.23713>;
  <D.23700>:
  D.23714 = method->klass;
  D.23715 = &D.23714->byval_arg;
  D.23716 = verify_stack_type_compatibility_full (ctx, D.23715, value, 0, 1);
  if (D.23716 == 0) goto <D.23717>; else goto <D.23718>;
  <D.23717>:
  D.23719 = stack_slot_is_null_literal (value);
  if (D.23719 == 0) goto <D.23720>; else goto <D.23721>;
  <D.23720>:
  D.23577 = ctx->verifiable;
  if (D.23577 != 0) goto <D.23722>; else goto <D.23724>;
  <D.23724>:
  D.23579 = ctx->level;
  D.23580 = D.23579 & 128;
  if (D.23580 != 0) goto <D.23722>; else goto <D.23723>;
  <D.23722>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23581 = ctx->ip_offset;
    D.23725 = monoeg_g_strdup_printf ("This object not compatible with function pointer for delegate creation at 0x%04x", D.23581);
    vinfo->info.message = D.23725;
    vinfo->exception_type = 4;
    D.23583 = ctx->list;
    D.23726 = monoeg_g_slist_prepend (D.23583, vinfo);
    ctx->list = D.23726;
  }
  ctx->verifiable = 0;
  D.23579 = ctx->level;
  D.23585 = D.23579 & 16;
  if (D.23585 != 0) goto <D.23727>; else goto <D.23728>;
  <D.23727>:
  ctx->valid = 0;
  <D.23728>:
  <D.23723>:
  <D.23721>:
  <D.23718>:
  <D.23713>:
  <D.23698>:
  D.23729 = stack_slot_get_type (value);
  if (D.23729 != 6) goto <D.23730>; else goto <D.23731>;
  <D.23730>:
  D.23577 = ctx->verifiable;
  if (D.23577 != 0) goto <D.23732>; else goto <D.23734>;
  <D.23734>:
  D.23579 = ctx->level;
  D.23580 = D.23579 & 128;
  if (D.23580 != 0) goto <D.23732>; else goto <D.23733>;
  <D.23732>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23581 = ctx->ip_offset;
    D.23735 = monoeg_g_strdup_printf ("Invalid first parameter for delegate creation at 0x%04x", D.23581);
    vinfo->info.message = D.23735;
    vinfo->exception_type = 4;
    D.23583 = ctx->list;
    D.23736 = monoeg_g_slist_prepend (D.23583, vinfo);
    ctx->list = D.23736;
  }
  ctx->verifiable = 0;
  D.23579 = ctx->level;
  D.23585 = D.23579 & 16;
  if (D.23585 != 0) goto <D.23737>; else goto <D.23738>;
  <D.23737>:
  ctx->valid = 0;
  <D.23738>:
  <D.23733>:
  <D.23731>:
}


verify_ldftn_delegate (struct VerifyContext * ctx, struct MonoClass * delegate, struct ILStackDesc * value, struct ILStackDesc * funptr)
{
  short unsigned int D.23740;
  unsigned int D.23741;
  unsigned int D.23742;
  struct MonoClass * D.23745;
  unsigned int D.23746;
  unsigned int D.23747;
  int D.23750;
  int D.23753;
  int D.23754;
  int D.23757;
  int D.23762;
  int D.23764;
  unsigned int D.23765;
  gchar * D.23766;
  struct GSList * D.23767;
  struct GSList * D.23768;
  struct MonoMethod * D.23771;
  short unsigned int D.23772;
  int D.23773;
  int D.23774;
  gchar * D.23780;
  struct GSList * D.23781;
  int D.23784;
  gchar * D.23790;
  struct GSList * D.23791;
  struct ILCodeDesc * D.23794;
  unsigned int D.23795;
  struct ILCodeDesc * D.23796;
  short unsigned int D.23797;
  short unsigned int D.23798;
  struct MonoMethod * method;

  method = funptr->method;
  D.23740 = method->flags;
  D.23741 = (unsigned int) D.23740;
  D.23742 = D.23741 & 96;
  if (D.23742 == 64) goto <D.23743>; else goto <D.23744>;
  <D.23743>:
  D.23745 = method->klass;
  D.23746 = D.23745->flags;
  D.23747 = D.23746 & 256;
  if (D.23747 == 0) goto <D.23748>; else goto <D.23749>;
  <D.23748>:
  D.23750 = stack_slot_is_boxed_value (value);
  if (D.23750 == 0) goto <D.23751>; else goto <D.23752>;
  <D.23751>:
  D.23753 = ctx->level;
  D.23754 = D.23753 & 16;
  if (D.23754 != 0) goto <D.23755>; else goto <D.23756>;
  <D.23755>:
  D.23757 = ctx->has_this_store;
  if (D.23757 != 0) goto <D.23758>; else goto <D.23759>;
  <D.23758>:
  D.23762 = ctx->verifiable;
  if (D.23762 != 0) goto <D.23760>; else goto <D.23763>;
  <D.23763>:
  D.23753 = ctx->level;
  D.23764 = D.23753 & 128;
  if (D.23764 != 0) goto <D.23760>; else goto <D.23761>;
  <D.23760>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23765 = ctx->ip_offset;
    D.23766 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function in method with stdarg 0 at  0x%04x", D.23765);
    vinfo->info.message = D.23766;
    vinfo->exception_type = 4;
    D.23767 = ctx->list;
    D.23768 = monoeg_g_slist_prepend (D.23767, vinfo);
    ctx->list = D.23768;
  }
  ctx->verifiable = 0;
  D.23753 = ctx->level;
  D.23754 = D.23753 & 16;
  if (D.23754 != 0) goto <D.23769>; else goto <D.23770>;
  <D.23769>:
  ctx->valid = 0;
  <D.23770>:
  <D.23761>:
  <D.23759>:
  <D.23756>:
  D.23771 = ctx->method;
  D.23772 = D.23771->flags;
  D.23773 = (int) D.23772;
  D.23774 = D.23773 & 16;
  if (D.23774 != 0) goto <D.23775>; else goto <D.23776>;
  <D.23775>:
  D.23762 = ctx->verifiable;
  if (D.23762 != 0) goto <D.23777>; else goto <D.23779>;
  <D.23779>:
  D.23753 = ctx->level;
  D.23764 = D.23753 & 128;
  if (D.23764 != 0) goto <D.23777>; else goto <D.23778>;
  <D.23777>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23765 = ctx->ip_offset;
    D.23780 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function at 0x%04x", D.23765);
    vinfo->info.message = D.23780;
    vinfo->exception_type = 4;
    D.23767 = ctx->list;
    D.23781 = monoeg_g_slist_prepend (D.23767, vinfo);
    ctx->list = D.23781;
  }
  ctx->verifiable = 0;
  D.23753 = ctx->level;
  D.23754 = D.23753 & 16;
  if (D.23754 != 0) goto <D.23782>; else goto <D.23783>;
  <D.23782>:
  ctx->valid = 0;
  <D.23783>:
  <D.23778>:
  <D.23776>:
  D.23784 = stack_slot_is_this_pointer (value);
  if (D.23784 == 0) goto <D.23785>; else goto <D.23786>;
  <D.23785>:
  D.23762 = ctx->verifiable;
  if (D.23762 != 0) goto <D.23787>; else goto <D.23789>;
  <D.23789>:
  D.23753 = ctx->level;
  D.23764 = D.23753 & 128;
  if (D.23764 != 0) goto <D.23787>; else goto <D.23788>;
  <D.23787>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23765 = ctx->ip_offset;
    D.23790 = monoeg_g_strdup_printf ("Invalid object argument, it is not the this pointer, to ldftn with virtual method at  0x%04x", D.23765);
    vinfo->info.message = D.23790;
    vinfo->exception_type = 4;
    D.23767 = ctx->list;
    D.23791 = monoeg_g_slist_prepend (D.23767, vinfo);
    ctx->list = D.23791;
  }
  ctx->verifiable = 0;
  D.23753 = ctx->level;
  D.23754 = D.23753 & 16;
  if (D.23754 != 0) goto <D.23792>; else goto <D.23793>;
  <D.23792>:
  ctx->valid = 0;
  <D.23793>:
  <D.23788>:
  <D.23786>:
  D.23794 = ctx->code;
  D.23765 = ctx->ip_offset;
  D.23795 = D.23765 * 12;
  D.23796 = D.23794 + D.23795;
  D.23794 = ctx->code;
  D.23765 = ctx->ip_offset;
  D.23795 = D.23765 * 12;
  D.23796 = D.23794 + D.23795;
  D.23797 = D.23796->flags;
  D.23798 = D.23797 | 32;
  D.23796->flags = D.23798;
  <D.23752>:
  <D.23749>:
  <D.23744>:
}


do_cast (struct VerifyContext * ctx, int token, const char * opcode)
{
  int D.23799;
  unsigned int D.23804;
  unsigned int D.23805;
  unsigned int D.23808;
  gchar * D.23809;
  struct GSList * D.23810;
  struct GSList * D.23811;
  int D.23812;
  int D.23817;
  int D.23819;
  int D.23820;
  gchar * D.23821;
  struct GSList * D.23822;
  int D.23823;
  struct MonoType * D.23827;
  int D.23828;
  gchar * D.23836;
  struct GSList * D.23837;
  unsigned char D.23840;
  int D.23841;
  gchar * D.23845;
  struct GSList * D.23846;
  int iftmp.102;
  int D.23855;
  struct MonoClass * D.23857;
  unsigned int D.23858;
  unsigned int D.23859;
  int iftmp.103;
  struct ILStackDesc * value;
  struct MonoType * type;
  gboolean is_boxed;
  gboolean do_box;

  D.23799 = check_underflow (ctx, 1);
  if (D.23799 == 0) goto <D.23800>; else goto <D.23801>;
  <D.23800>:
  return;
  <D.23801>:
  type = get_boxable_mono_type (ctx, token, opcode);
  if (type == 0B) goto <D.23802>; else goto <D.23803>;
  <D.23802>:
  return;
  <D.23803>:
  D.23804 = BIT_FIELD_REF <*type, 32, 32>;
  D.23805 = D.23804 & 1073741824;
  if (D.23805 != 0) goto <D.23806>; else goto <D.23807>;
  <D.23806>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23808 = ctx->ip_offset;
    D.23809 = monoeg_g_strdup_printf ("Invalid %s type at 0x%04x", opcode, D.23808);
    vinfo->info.message = D.23809;
    vinfo->exception_type = 3;
    D.23810 = ctx->list;
    D.23811 = monoeg_g_slist_prepend (D.23810, vinfo);
    ctx->list = D.23811;
  }
  ctx->valid = 0;
  return;
  <D.23807>:
  value = stack_pop (ctx);
  is_boxed = stack_slot_is_boxed_value (value);
  D.23812 = stack_slot_is_managed_pointer (value);
  if (D.23812 != 0) goto <D.23813>; else goto <D.23814>;
  <D.23813>:
  D.23817 = ctx->verifiable;
  if (D.23817 != 0) goto <D.23815>; else goto <D.23818>;
  <D.23818>:
  D.23819 = ctx->level;
  D.23820 = D.23819 & 128;
  if (D.23820 != 0) goto <D.23815>; else goto <D.23816>;
  <D.23815>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23808 = ctx->ip_offset;
    D.23821 = monoeg_g_strdup_printf ("Invalid value for %s at 0x%04x", opcode, D.23808);
    vinfo->info.message = D.23821;
    vinfo->exception_type = 4;
    D.23810 = ctx->list;
    D.23822 = monoeg_g_slist_prepend (D.23810, vinfo);
    ctx->list = D.23822;
  }
  ctx->verifiable = 0;
  D.23819 = ctx->level;
  D.23823 = D.23819 & 16;
  if (D.23823 != 0) goto <D.23824>; else goto <D.23825>;
  <D.23824>:
  ctx->valid = 0;
  <D.23825>:
  <D.23816>:
  goto <D.23826>;
  <D.23814>:
  D.23827 = value->type;
  D.23828 = mono_type_is_reference (D.23827);
  if (D.23828 == 0) goto <D.23829>; else goto <D.23830>;
  <D.23829>:
  if (is_boxed == 0) goto <D.23831>; else goto <D.23832>;
  <D.23831>:
  {
    char * name;

    name = stack_slot_full_name (value);
    D.23817 = ctx->verifiable;
    if (D.23817 != 0) goto <D.23833>; else goto <D.23835>;
    <D.23835>:
    D.23819 = ctx->level;
    D.23820 = D.23819 & 128;
    if (D.23820 != 0) goto <D.23833>; else goto <D.23834>;
    <D.23833>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23808 = ctx->ip_offset;
      D.23836 = monoeg_g_strdup_printf ("Expected a reference type on stack for %s but found %s at 0x%04x", opcode, name, D.23808);
      vinfo->info.message = D.23836;
      vinfo->exception_type = 4;
      D.23810 = ctx->list;
      D.23837 = monoeg_g_slist_prepend (D.23810, vinfo);
      ctx->list = D.23837;
    }
    ctx->verifiable = 0;
    D.23819 = ctx->level;
    D.23823 = D.23819 & 16;
    if (D.23823 != 0) goto <D.23838>; else goto <D.23839>;
    <D.23838>:
    ctx->valid = 0;
    <D.23839>:
    <D.23834>:
    monoeg_g_free (name);
  }
  <D.23832>:
  <D.23830>:
  <D.23826>:
  D.23827 = value->type;
  D.23840 = D.23827->type;
  D.23841 = (int) D.23840;
  switch (D.23841) <default: <D.23849>, case 15: <D.18696>, case 22: <D.18697>, case 27: <D.18695>>
  <D.18695>:
  <D.18696>:
  <D.18697>:
  D.23817 = ctx->verifiable;
  if (D.23817 != 0) goto <D.23842>; else goto <D.23844>;
  <D.23844>:
  D.23819 = ctx->level;
  D.23820 = D.23819 & 128;
  if (D.23820 != 0) goto <D.23842>; else goto <D.23843>;
  <D.23842>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23808 = ctx->ip_offset;
    D.23845 = monoeg_g_strdup_printf ("Invalid value for %s at 0x%04x", opcode, D.23808);
    vinfo->info.message = D.23845;
    vinfo->exception_type = 4;
    D.23810 = ctx->list;
    D.23846 = monoeg_g_slist_prepend (D.23810, vinfo);
    ctx->list = D.23846;
  }
  ctx->verifiable = 0;
  D.23819 = ctx->level;
  D.23823 = D.23819 & 16;
  if (D.23823 != 0) goto <D.23847>; else goto <D.23848>;
  <D.23847>:
  ctx->valid = 0;
  <D.23848>:
  <D.23843>:
  <D.23849>:
  if (is_boxed != 0) goto <D.23851>; else goto <D.23854>;
  <D.23854>:
  D.23855 = mono_type_is_generic_argument (type);
  if (D.23855 != 0) goto <D.23851>; else goto <D.23856>;
  <D.23856>:
  D.23857 = mono_class_from_mono_type (type);
  D.23858 = BIT_FIELD_REF <*D.23857, 32, 160>;
  D.23859 = D.23858 & 8;
  if (D.23859 != 0) goto <D.23851>; else goto <D.23852>;
  <D.23851>:
  iftmp.102 = 1;
  goto <D.23853>;
  <D.23852>:
  iftmp.102 = 0;
  <D.23853>:
  do_box = iftmp.102;
  if (do_box != 0) goto <D.23861>; else goto <D.23862>;
  <D.23861>:
  iftmp.103 = 4102;
  goto <D.23863>;
  <D.23862>:
  iftmp.103 = 6;
  <D.23863>:
  stack_push_val (ctx, iftmp.103, type);
}


do_unbox_value (struct VerifyContext * ctx, int klass_token)
{
  int D.23867;
  struct MonoClass * D.23870;
  unsigned int D.23871;
  unsigned int D.23872;
  int D.23877;
  int D.23879;
  int D.23880;
  unsigned int D.23881;
  gchar * D.23882;
  struct GSList * D.23883;
  struct GSList * D.23884;
  int D.23885;
  int D.23890;
  int D.23892;
  struct MonoType * D.23894;
  struct MonoClass * D.23895;
  unsigned int D.23896;
  unsigned int D.23897;
  const char * D.23901;
  gchar * D.23902;
  struct GSList * D.23903;
  struct MonoType * D.23906;
  int D.23907;
  int D.23908;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, klass_token, "unbox");
  if (type == 0B) goto <D.23865>; else goto <D.23866>;
  <D.23865>:
  return;
  <D.23866>:
  D.23867 = check_underflow (ctx, 1);
  if (D.23867 == 0) goto <D.23868>; else goto <D.23869>;
  <D.23868>:
  return;
  <D.23869>:
  D.23870 = mono_class_from_mono_type (type);
  D.23871 = BIT_FIELD_REF <*D.23870, 32, 160>;
  D.23872 = D.23871 & 8;
  if (D.23872 == 0) goto <D.23873>; else goto <D.23874>;
  <D.23873>:
  D.23877 = ctx->verifiable;
  if (D.23877 != 0) goto <D.23875>; else goto <D.23878>;
  <D.23878>:
  D.23879 = ctx->level;
  D.23880 = D.23879 & 128;
  if (D.23880 != 0) goto <D.23875>; else goto <D.23876>;
  <D.23875>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23881 = ctx->ip_offset;
    D.23882 = monoeg_g_strdup_printf ("Invalid reference type for unbox at 0x%04x", D.23881);
    vinfo->info.message = D.23882;
    vinfo->exception_type = 4;
    D.23883 = ctx->list;
    D.23884 = monoeg_g_slist_prepend (D.23883, vinfo);
    ctx->list = D.23884;
  }
  ctx->verifiable = 0;
  D.23879 = ctx->level;
  D.23885 = D.23879 & 16;
  if (D.23885 != 0) goto <D.23886>; else goto <D.23887>;
  <D.23886>:
  ctx->valid = 0;
  <D.23887>:
  <D.23876>:
  <D.23874>:
  value = stack_pop (ctx);
  D.23890 = stack_slot_get_type (value);
  if (D.23890 != 6) goto <D.23888>; else goto <D.23891>;
  <D.23891>:
  D.23892 = stack_slot_is_boxed_value (value);
  if (D.23892 == 0) goto <D.23893>; else goto <D.23889>;
  <D.23893>:
  D.23894 = value->type;
  D.23895 = mono_class_from_mono_type (D.23894);
  D.23896 = BIT_FIELD_REF <*D.23895, 32, 160>;
  D.23897 = D.23896 & 8;
  if (D.23897 != 0) goto <D.23888>; else goto <D.23889>;
  <D.23888>:
  D.23877 = ctx->verifiable;
  if (D.23877 != 0) goto <D.23898>; else goto <D.23900>;
  <D.23900>:
  D.23879 = ctx->level;
  D.23880 = D.23879 & 128;
  if (D.23880 != 0) goto <D.23898>; else goto <D.23899>;
  <D.23898>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23901 = stack_slot_get_name (value);
    D.23881 = ctx->ip_offset;
    D.23902 = monoeg_g_strdup_printf ("Invalid type %s at stack for unbox operation at 0x%04x", D.23901, D.23881);
    vinfo->info.message = D.23902;
    vinfo->exception_type = 4;
    D.23883 = ctx->list;
    D.23903 = monoeg_g_slist_prepend (D.23883, vinfo);
    ctx->list = D.23903;
  }
  ctx->verifiable = 0;
  D.23879 = ctx->level;
  D.23885 = D.23879 & 16;
  if (D.23885 != 0) goto <D.23904>; else goto <D.23905>;
  <D.23904>:
  ctx->valid = 0;
  <D.23905>:
  <D.23899>:
  <D.23889>:
  value = stack_push (ctx);
  D.23906 = mono_type_get_type_byref (type);
  set_stack_value (ctx, value, D.23906, 0);
  D.23907 = value->stype;
  D.23908 = D.23907 | 512;
  value->stype = D.23908;
}


do_throw (struct VerifyContext * ctx)
{
  int D.23910;
  int D.23915;
  int D.23918;
  struct MonoType * D.23920;
  struct MonoClass * D.23921;
  unsigned int D.23922;
  unsigned int D.23923;
  int D.23926;
  int D.23928;
  int D.23929;
  unsigned int D.23930;
  gchar * D.23931;
  struct GSList * D.23932;
  struct GSList * D.23933;
  int D.23934;
  int D.23937;
  int D.23940;
  gchar * D.23946;
  struct GSList * D.23947;
  struct ILStackDesc * exception;

  D.23910 = check_underflow (ctx, 1);
  if (D.23910 == 0) goto <D.23911>; else goto <D.23912>;
  <D.23911>:
  return;
  <D.23912>:
  exception = stack_pop (ctx);
  D.23915 = stack_slot_is_null_literal (exception);
  if (D.23915 == 0) goto <D.23916>; else goto <D.23917>;
  <D.23916>:
  D.23918 = stack_slot_get_type (exception);
  if (D.23918 != 6) goto <D.23913>; else goto <D.23919>;
  <D.23919>:
  D.23920 = exception->type;
  D.23921 = mono_class_from_mono_type (D.23920);
  D.23922 = BIT_FIELD_REF <*D.23921, 32, 160>;
  D.23923 = D.23922 & 8;
  if (D.23923 != 0) goto <D.23913>; else goto <D.23914>;
  <D.23913>:
  D.23926 = ctx->verifiable;
  if (D.23926 != 0) goto <D.23924>; else goto <D.23927>;
  <D.23927>:
  D.23928 = ctx->level;
  D.23929 = D.23928 & 128;
  if (D.23929 != 0) goto <D.23924>; else goto <D.23925>;
  <D.23924>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23930 = ctx->ip_offset;
    D.23931 = monoeg_g_strdup_printf ("Invalid type on stack for throw, expected reference type at 0x%04x", D.23930);
    vinfo->info.message = D.23931;
    vinfo->exception_type = 4;
    D.23932 = ctx->list;
    D.23933 = monoeg_g_slist_prepend (D.23932, vinfo);
    ctx->list = D.23933;
  }
  ctx->verifiable = 0;
  D.23928 = ctx->level;
  D.23934 = D.23928 & 16;
  if (D.23934 != 0) goto <D.23935>; else goto <D.23936>;
  <D.23935>:
  ctx->valid = 0;
  <D.23936>:
  <D.23925>:
  <D.23914>:
  <D.23917>:
  D.23920 = exception->type;
  D.23937 = mono_type_is_generic_argument (D.23920);
  if (D.23937 != 0) goto <D.23938>; else goto <D.23939>;
  <D.23938>:
  D.23940 = stack_slot_is_boxed_value (exception);
  if (D.23940 == 0) goto <D.23941>; else goto <D.23942>;
  <D.23941>:
  {
    char * name;

    D.23920 = exception->type;
    name = mono_type_full_name (D.23920);
    D.23926 = ctx->verifiable;
    if (D.23926 != 0) goto <D.23943>; else goto <D.23945>;
    <D.23945>:
    D.23928 = ctx->level;
    D.23929 = D.23928 & 128;
    if (D.23929 != 0) goto <D.23943>; else goto <D.23944>;
    <D.23943>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23930 = ctx->ip_offset;
      D.23946 = monoeg_g_strdup_printf ("Invalid type on stack for throw, expected reference type but found unboxed %s  at 0x%04x ", name, D.23930);
      vinfo->info.message = D.23946;
      vinfo->exception_type = 4;
      D.23932 = ctx->list;
      D.23947 = monoeg_g_slist_prepend (D.23932, vinfo);
      ctx->list = D.23947;
    }
    ctx->verifiable = 0;
    D.23928 = ctx->level;
    D.23934 = D.23928 & 16;
    if (D.23934 != 0) goto <D.23948>; else goto <D.23949>;
    <D.23948>:
    ctx->valid = 0;
    <D.23949>:
    <D.23944>:
    monoeg_g_free (name);
  }
  <D.23942>:
  <D.23939>:
  ctx->eval.size = 0;
}


do_push_field (struct VerifyContext * ctx, int token, gboolean take_addr)
{
  unsigned int D.23953;
  unsigned int D.23954;
  int D.23955;
  const char * iftmp.104;
  int D.23962;
  struct MonoClassField * field.105;
  struct MonoClass * D.23968;
  unsigned int D.23969;
  unsigned int D.23970;
  int D.23973;
  int D.23978;
  int D.23980;
  int D.23981;
  unsigned int D.23982;
  gchar * D.23983;
  struct GSList * D.23984;
  struct GSList * D.23985;
  int D.23986;
  struct MonoType * D.23993;
  short unsigned int D.23994;
  int D.23995;
  int D.23996;
  struct MonoMethod * D.23999;
  struct MonoClass * D.24000;
  int D.24002;
  gchar * D.24006;
  struct GSList * D.24007;
  struct ILStackDesc * D.24010;
  struct ILStackDesc * obj;
  struct MonoClassField * field;

  try
    {
      if (take_addr == 0) goto <D.23951>; else goto <D.23952>;
      <D.23951>:
      D.23953 = ctx->prefix_set;
      D.23954 = D.23953 & 4294967292;
      ctx->prefix_set = D.23954;
      <D.23952>:
      D.23955 = check_underflow (ctx, 1);
      if (D.23955 == 0) goto <D.23956>; else goto <D.23957>;
      <D.23956>:
      return;
      <D.23957>:
      obj = stack_pop_safe (ctx);
      if (take_addr != 0) goto <D.23959>; else goto <D.23960>;
      <D.23959>:
      iftmp.104 = "ldflda";
      goto <D.23961>;
      <D.23960>:
      iftmp.104 = "ldfld";
      <D.23961>:
      D.23962 = check_is_valid_type_for_field_ops (ctx, token, obj, &field, iftmp.104);
      if (D.23962 == 0) goto <D.23963>; else goto <D.23964>;
      <D.23963>:
      return;
      <D.23964>:
      if (take_addr != 0) goto <D.23965>; else goto <D.23966>;
      <D.23965>:
      field.105 = field;
      D.23968 = field.105->parent;
      D.23969 = BIT_FIELD_REF <*D.23968, 32, 160>;
      D.23970 = D.23969 & 8;
      if (D.23970 != 0) goto <D.23971>; else goto <D.23972>;
      <D.23971>:
      D.23973 = stack_slot_is_managed_pointer (obj);
      if (D.23973 == 0) goto <D.23974>; else goto <D.23975>;
      <D.23974>:
      D.23978 = ctx->verifiable;
      if (D.23978 != 0) goto <D.23976>; else goto <D.23979>;
      <D.23979>:
      D.23980 = ctx->level;
      D.23981 = D.23980 & 128;
      if (D.23981 != 0) goto <D.23976>; else goto <D.23977>;
      <D.23976>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.23982 = ctx->ip_offset;
        D.23983 = monoeg_g_strdup_printf ("Cannot take the address of a temporary value-type at 0x%04x", D.23982);
        vinfo->info.message = D.23983;
        vinfo->exception_type = 4;
        D.23984 = ctx->list;
        D.23985 = monoeg_g_slist_prepend (D.23984, vinfo);
        ctx->list = D.23985;
      }
      ctx->verifiable = 0;
      D.23980 = ctx->level;
      D.23986 = D.23980 & 16;
      if (D.23986 != 0) goto <D.23987>; else goto <D.23988>;
      <D.23987>:
      ctx->valid = 0;
      <D.23988>:
      <D.23977>:
      <D.23975>:
      <D.23972>:
      <D.23966>:
      if (take_addr != 0) goto <D.23991>; else goto <D.23992>;
      <D.23991>:
      field.105 = field;
      D.23993 = field.105->type;
      D.23994 = D.23993->attrs;
      D.23995 = (int) D.23994;
      D.23996 = D.23995 & 32;
      if (D.23996 != 0) goto <D.23997>; else goto <D.23998>;
      <D.23997>:
      field.105 = field;
      D.23968 = field.105->parent;
      D.23999 = ctx->method;
      D.24000 = D.23999->klass;
      if (D.23968 != D.24000) goto <D.23989>; else goto <D.24001>;
      <D.24001>:
      D.23999 = ctx->method;
      D.24002 = mono_method_is_constructor (D.23999);
      if (D.24002 == 0) goto <D.23989>; else goto <D.23990>;
      <D.23989>:
      D.23978 = ctx->verifiable;
      if (D.23978 != 0) goto <D.24003>; else goto <D.24005>;
      <D.24005>:
      D.23980 = ctx->level;
      D.23981 = D.23980 & 128;
      if (D.23981 != 0) goto <D.24003>; else goto <D.24004>;
      <D.24003>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.23982 = ctx->ip_offset;
        D.24006 = monoeg_g_strdup_printf ("Cannot take the address of a init-only field at 0x%04x", D.23982);
        vinfo->info.message = D.24006;
        vinfo->exception_type = 4;
        D.23984 = ctx->list;
        D.24007 = monoeg_g_slist_prepend (D.23984, vinfo);
        ctx->list = D.24007;
      }
      ctx->verifiable = 0;
      D.23980 = ctx->level;
      D.23986 = D.23980 & 16;
      if (D.23986 != 0) goto <D.24008>; else goto <D.24009>;
      <D.24008>:
      ctx->valid = 0;
      <D.24009>:
      <D.24004>:
      <D.23990>:
      <D.23998>:
      <D.23992>:
      D.24010 = stack_push (ctx);
      field.105 = field;
      D.23993 = field.105->type;
      set_stack_value (ctx, D.24010, D.23993, 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.24016;
  int iftmp.106;
  int D.24021;
  int D.24023;
  struct MonoClass * D.24025;
  struct MonoType * D.24026;
  int D.24027;
  struct MonoType * D.24028;
  unsigned char D.24029;
  unsigned int D.24032;
  gchar * D.24033;
  struct GSList * D.24034;
  struct GSList * D.24035;
  struct MonoType * D.24036;
  _Bool D.24037;
  long int D.24038;
  long int D.24039;
  int D.24044;
  int D.24049;
  int D.24051;
  int D.24052;
  gchar * D.24053;
  struct GSList * D.24054;
  int D.24055;
  int D.24058;
  struct MonoMethod * D.24061;
  int D.24062;
  gchar * D.24068;
  struct GSList * D.24069;
  unsigned int D.24073;
  unsigned int D.24074;
  int D.24077;
  gchar * D.24083;
  struct GSList * D.24084;
  int D.24089;
  gchar * D.24095;
  struct GSList * D.24096;
  int D.24099;
  int D.24102;
  gchar * D.24108;
  struct GSList * D.24109;
  struct MonoClass * D.24114;
  int D.24115;
  gchar * D.24121;
  struct GSList * D.24122;
  struct MonoClassField * field;
  struct MonoClass * klass;
  gboolean is_pointer;

  try
    {
      field = verifier_load_field (ctx, token, &klass, opcode);
      if (field == 0B) goto <D.24014>; else goto <D.24015>;
      <D.24014>:
      D.24016 = 0;
      return D.24016;
      <D.24015>:
      *ret_field = field;
      D.24021 = stack_slot_get_type (obj);
      if (D.24021 == 5) goto <D.24018>; else goto <D.24022>;
      <D.24022>:
      D.24023 = stack_slot_get_type (obj);
      if (D.24023 == 3) goto <D.24024>; else goto <D.24019>;
      <D.24024>:
      D.24025 = field->parent;
      D.24026 = &D.24025->byval_arg;
      D.24027 = get_stack_type (D.24026);
      if (D.24027 == 0) goto <D.24018>; else goto <D.24019>;
      <D.24018>:
      iftmp.106 = 1;
      goto <D.24020>;
      <D.24019>:
      iftmp.106 = 0;
      <D.24020>:
      is_pointer = iftmp.106;
      D.24028 = field->type;
      D.24029 = D.24028->type;
      if (D.24029 == 22) goto <D.24030>; else goto <D.24031>;
      <D.24030>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24032 = ctx->ip_offset;
        D.24033 = monoeg_g_strdup_printf ("Typedbyref field is an unverfiable type at 0x%04x", D.24032);
        vinfo->info.message = D.24033;
        vinfo->exception_type = 3;
        D.24034 = ctx->list;
        D.24035 = monoeg_g_slist_prepend (D.24034, vinfo);
        ctx->list = D.24035;
      }
      ctx->valid = 0;
      D.24016 = 0;
      return D.24016;
      <D.24031>:
      D.24036 = obj->type;
      D.24037 = D.24036 == 0B;
      D.24038 = (long int) D.24037;
      D.24039 = __builtin_expect (D.24038, 0);
      if (D.24039 != 0) goto <D.24040>; else goto <D.24041>;
      <D.24040>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 3369, "obj->type");
      <D.24041>:
      if (is_pointer != 0) goto <D.24042>; else goto <D.24043>;
      <D.24042>:
      D.24044 = stack_slot_get_underlying_type (obj);
      if (D.24044 == 3) goto <D.24045>; else goto <D.24046>;
      <D.24045>:
      D.24049 = ctx->verifiable;
      if (D.24049 != 0) goto <D.24047>; else goto <D.24050>;
      <D.24050>:
      D.24051 = ctx->level;
      D.24052 = D.24051 & 128;
      if (D.24052 != 0) goto <D.24047>; else goto <D.24048>;
      <D.24047>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24032 = ctx->ip_offset;
        D.24053 = monoeg_g_strdup_printf ("Native int is not a verifiable type to reference a field at 0x%04x", D.24032);
        vinfo->info.message = D.24053;
        vinfo->exception_type = 4;
        D.24034 = ctx->list;
        D.24054 = monoeg_g_slist_prepend (D.24034, vinfo);
        ctx->list = D.24054;
      }
      ctx->verifiable = 0;
      D.24051 = ctx->level;
      D.24055 = D.24051 & 16;
      if (D.24055 != 0) goto <D.24056>; else goto <D.24057>;
      <D.24056>:
      ctx->valid = 0;
      <D.24057>:
      <D.24048>:
      <D.24046>:
      D.24051 = ctx->level;
      D.24058 = D.24051 & 64;
      if (D.24058 == 0) goto <D.24059>; else goto <D.24060>;
      <D.24059>:
      D.24061 = ctx->method;
      D.24062 = mono_method_can_access_field_full (D.24061, field, 0B);
      if (D.24062 == 0) goto <D.24063>; else goto <D.24064>;
      <D.24063>:
      D.24049 = ctx->verifiable;
      if (D.24049 != 0) goto <D.24065>; else goto <D.24067>;
      <D.24067>:
      D.24051 = ctx->level;
      D.24052 = D.24051 & 128;
      if (D.24052 != 0) goto <D.24065>; else goto <D.24066>;
      <D.24065>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24032 = ctx->ip_offset;
        D.24068 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24032);
        vinfo->info.message = D.24068;
        vinfo->exception_type = 10;
        D.24034 = ctx->list;
        D.24069 = monoeg_g_slist_prepend (D.24034, vinfo);
        ctx->list = D.24069;
      }
      ctx->verifiable = 0;
      D.24051 = ctx->level;
      D.24055 = D.24051 & 16;
      if (D.24055 != 0) goto <D.24070>; else goto <D.24071>;
      <D.24070>:
      ctx->valid = 0;
      <D.24071>:
      <D.24066>:
      <D.24064>:
      <D.24060>:
      goto <D.24072>;
      <D.24043>:
      D.24025 = field->parent;
      D.24073 = BIT_FIELD_REF <*D.24025, 32, 160>;
      D.24074 = D.24073 & 8;
      if (D.24074 == 0) goto <D.24075>; else goto <D.24076>;
      <D.24075>:
      D.24077 = stack_slot_is_managed_pointer (obj);
      if (D.24077 != 0) goto <D.24078>; else goto <D.24079>;
      <D.24078>:
      D.24049 = ctx->verifiable;
      if (D.24049 != 0) goto <D.24080>; else goto <D.24082>;
      <D.24082>:
      D.24051 = ctx->level;
      D.24052 = D.24051 & 128;
      if (D.24052 != 0) goto <D.24080>; else goto <D.24081>;
      <D.24080>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24032 = ctx->ip_offset;
        D.24083 = 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.24032);
        vinfo->info.message = D.24083;
        vinfo->exception_type = 4;
        D.24034 = ctx->list;
        D.24084 = monoeg_g_slist_prepend (D.24034, vinfo);
        ctx->list = D.24084;
      }
      ctx->verifiable = 0;
      D.24051 = ctx->level;
      D.24055 = D.24051 & 16;
      if (D.24055 != 0) goto <D.24085>; else goto <D.24086>;
      <D.24085>:
      ctx->valid = 0;
      <D.24086>:
      <D.24081>:
      <D.24079>:
      <D.24076>:
      D.24025 = field->parent;
      D.24073 = BIT_FIELD_REF <*D.24025, 32, 160>;
      D.24074 = D.24073 & 8;
      if (D.24074 != 0) goto <D.24087>; else goto <D.24088>;
      <D.24087>:
      D.24089 = stack_slot_is_boxed_value (obj);
      if (D.24089 != 0) goto <D.24090>; else goto <D.24091>;
      <D.24090>:
      D.24049 = ctx->verifiable;
      if (D.24049 != 0) goto <D.24092>; else goto <D.24094>;
      <D.24094>:
      D.24051 = ctx->level;
      D.24052 = D.24051 & 128;
      if (D.24052 != 0) goto <D.24092>; else goto <D.24093>;
      <D.24092>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24032 = ctx->ip_offset;
        D.24095 = monoeg_g_strdup_printf ("Type at stack is a boxed valuetype and is not compatible to reference the field at 0x%04x", D.24032);
        vinfo->info.message = D.24095;
        vinfo->exception_type = 4;
        D.24034 = ctx->list;
        D.24096 = monoeg_g_slist_prepend (D.24034, vinfo);
        ctx->list = D.24096;
      }
      ctx->verifiable = 0;
      D.24051 = ctx->level;
      D.24055 = D.24051 & 16;
      if (D.24055 != 0) goto <D.24097>; else goto <D.24098>;
      <D.24097>:
      ctx->valid = 0;
      <D.24098>:
      <D.24093>:
      <D.24091>:
      <D.24088>:
      D.24099 = stack_slot_is_null_literal (obj);
      if (D.24099 == 0) goto <D.24100>; else goto <D.24101>;
      <D.24100>:
      D.24025 = field->parent;
      D.24026 = &D.24025->byval_arg;
      D.24102 = verify_stack_type_compatibility_full (ctx, D.24026, obj, 1, 0);
      if (D.24102 == 0) goto <D.24103>; else goto <D.24104>;
      <D.24103>:
      {
        char * found;
        char * expected;

        found = stack_slot_full_name (obj);
        D.24025 = field->parent;
        D.24026 = &D.24025->byval_arg;
        expected = mono_type_full_name (D.24026);
        D.24049 = ctx->verifiable;
        if (D.24049 != 0) goto <D.24105>; else goto <D.24107>;
        <D.24107>:
        D.24051 = ctx->level;
        D.24052 = D.24051 & 128;
        if (D.24052 != 0) goto <D.24105>; else goto <D.24106>;
        <D.24105>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.24032 = ctx->ip_offset;
          D.24108 = monoeg_g_strdup_printf ("Expected type \'%s\' but found \'%s\' referencing the \'this\' argument at 0x%04x", expected, found, D.24032);
          vinfo->info.message = D.24108;
          vinfo->exception_type = 4;
          D.24034 = ctx->list;
          D.24109 = monoeg_g_slist_prepend (D.24034, vinfo);
          ctx->list = D.24109;
        }
        ctx->verifiable = 0;
        D.24051 = ctx->level;
        D.24055 = D.24051 & 16;
        if (D.24055 != 0) goto <D.24110>; else goto <D.24111>;
        <D.24110>:
        ctx->valid = 0;
        <D.24111>:
        <D.24106>:
        monoeg_g_free (found);
        monoeg_g_free (expected);
      }
      <D.24104>:
      <D.24101>:
      D.24051 = ctx->level;
      D.24058 = D.24051 & 64;
      if (D.24058 == 0) goto <D.24112>; else goto <D.24113>;
      <D.24112>:
      D.24061 = ctx->method;
      D.24036 = obj->type;
      D.24114 = mono_class_from_mono_type (D.24036);
      D.24115 = mono_method_can_access_field_full (D.24061, field, D.24114);
      if (D.24115 == 0) goto <D.24116>; else goto <D.24117>;
      <D.24116>:
      D.24049 = ctx->verifiable;
      if (D.24049 != 0) goto <D.24118>; else goto <D.24120>;
      <D.24120>:
      D.24051 = ctx->level;
      D.24052 = D.24051 & 128;
      if (D.24052 != 0) goto <D.24118>; else goto <D.24119>;
      <D.24118>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24032 = ctx->ip_offset;
        D.24121 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24032);
        vinfo->info.message = D.24121;
        vinfo->exception_type = 10;
        D.24034 = ctx->list;
        D.24122 = monoeg_g_slist_prepend (D.24034, vinfo);
        ctx->list = D.24122;
      }
      ctx->verifiable = 0;
      D.24051 = ctx->level;
      D.24055 = D.24051 & 16;
      if (D.24055 != 0) goto <D.24123>; else goto <D.24124>;
      <D.24123>:
      ctx->valid = 0;
      <D.24124>:
      <D.24119>:
      <D.24117>:
      <D.24113>:
      <D.24072>:
      check_unmanaged_pointer (ctx, obj);
      D.24016 = 1;
      return D.24016;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


verifier_load_field (struct VerifyContext * ctx, int token, struct MonoClass * * out_klass, const char * opcode)
{
  struct MonoMethod * D.24127;
  unsigned int D.24128;
  unsigned int D.24129;
  unsigned int token.107;
  struct MonoClass * iftmp.108;
  int D.24141;
  struct MonoImage * D.24143;
  unsigned int token.109;
  int D.24145;
  unsigned int D.24146;
  gchar * D.24147;
  struct GSList * D.24148;
  struct GSList * D.24149;
  struct MonoClassField * D.24150;
  unsigned int token.110;
  struct MonoGenericContext * D.24152;
  struct MonoClass * D.24156;
  struct MonoClass * klass.111;
  struct MonoLoaderError * D.24160;
  gchar * D.24161;
  struct GSList * D.24162;
  struct MonoType * D.24163;
  int D.24164;
  unsigned int D.24167;
  unsigned int D.24168;
  const char * D.24171;
  gchar * D.24172;
  struct GSList * D.24173;
  struct MonoClassField * field;
  struct MonoClass * klass;

  try
    {
      klass = 0B;
      D.24127 = ctx->method;
      D.24128 = BIT_FIELD_REF <*D.24127, 32, 160>;
      D.24129 = D.24128 & 124;
      if (D.24129 != 0) goto <D.24130>; else goto <D.24131>;
      <D.24130>:
      D.24127 = ctx->method;
      token.107 = (unsigned int) token;
      field = mono_method_get_wrapper_data (D.24127, token.107);
      if (field != 0B) goto <D.24134>; else goto <D.24135>;
      <D.24134>:
      iftmp.108 = field->parent;
      goto <D.24136>;
      <D.24135>:
      iftmp.108 = 0B;
      <D.24136>:
      klass = iftmp.108;
      goto <D.24137>;
      <D.24131>:
      D.24141 = token >> 24;
      if (D.24141 != 4) goto <D.24142>; else goto <D.24138>;
      <D.24142>:
      D.24141 = token >> 24;
      if (D.24141 != 10) goto <D.24139>; else goto <D.24138>;
      <D.24138>:
      D.24143 = ctx->image;
      token.109 = (unsigned int) token;
      D.24145 = token_bounds_check (D.24143, token.109);
      if (D.24145 == 0) goto <D.24139>; else goto <D.24140>;
      <D.24139>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24146 = ctx->ip_offset;
        D.24147 = monoeg_g_strdup_printf ("Invalid field token 0x%08x for %s at 0x%04x", token, opcode, D.24146);
        vinfo->info.message = D.24147;
        vinfo->exception_type = 12;
        D.24148 = ctx->list;
        D.24149 = monoeg_g_slist_prepend (D.24148, vinfo);
        ctx->list = D.24149;
      }
      ctx->valid = 0;
      D.24150 = 0B;
      return D.24150;
      <D.24140>:
      D.24143 = ctx->image;
      token.110 = (unsigned int) token;
      D.24152 = ctx->generic_context;
      field = mono_field_from_token (D.24143, token.110, &klass, D.24152);
      <D.24137>:
      if (field == 0B) goto <D.24153>; else goto <D.24155>;
      <D.24155>:
      D.24156 = field->parent;
      if (D.24156 == 0B) goto <D.24153>; else goto <D.24157>;
      <D.24157>:
      klass.111 = klass;
      if (klass.111 == 0B) goto <D.24153>; else goto <D.24159>;
      <D.24159>:
      D.24160 = mono_loader_get_last_error ();
      if (D.24160 != 0B) goto <D.24153>; else goto <D.24154>;
      <D.24153>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24146 = ctx->ip_offset;
        D.24161 = monoeg_g_strdup_printf ("Cannot load field from token 0x%08x for %s at 0x%04x", token, opcode, D.24146);
        vinfo->info.message = D.24161;
        vinfo->exception_type = 12;
        D.24148 = ctx->list;
        D.24162 = monoeg_g_slist_prepend (D.24148, vinfo);
        ctx->list = D.24162;
      }
      ctx->valid = 0;
      mono_loader_clear_error ();
      D.24150 = 0B;
      return D.24150;
      <D.24154>:
      klass.111 = klass;
      D.24163 = &klass.111->byval_arg;
      D.24164 = mono_type_is_valid_in_context (ctx, D.24163);
      if (D.24164 == 0) goto <D.24165>; else goto <D.24166>;
      <D.24165>:
      D.24150 = 0B;
      return D.24150;
      <D.24166>:
      D.24167 = mono_field_get_flags (field);
      D.24168 = D.24167 & 64;
      if (D.24168 != 0) goto <D.24169>; else goto <D.24170>;
      <D.24169>:
      {
        char * type_name;

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

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.24171 = field->name;
          D.24146 = ctx->ip_offset;
          D.24172 = monoeg_g_strdup_printf ("Cannot reference literal field %s::%s at 0x%04x", type_name, D.24171, D.24146);
          vinfo->info.message = D.24172;
          vinfo->exception_type = 3;
          D.24148 = ctx->list;
          D.24173 = monoeg_g_slist_prepend (D.24148, vinfo);
          ctx->list = D.24173;
        }
        ctx->valid = 0;
        monoeg_g_free (type_name);
        D.24150 = 0B;
        return D.24150;
      }
      <D.24170>:
      klass.111 = klass;
      *out_klass = klass.111;
      D.24150 = field;
      return D.24150;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_push_static_field (struct VerifyContext * ctx, int token, gboolean take_addr)
{
  int D.24176;
  unsigned int D.24181;
  unsigned int D.24182;
  const char * iftmp.112;
  struct MonoType * D.24189;
  short unsigned int D.24190;
  int D.24191;
  int D.24192;
  unsigned int D.24195;
  gchar * D.24196;
  struct GSList * D.24197;
  struct GSList * D.24198;
  int D.24203;
  struct MonoClass * D.24206;
  struct MonoMethod * D.24207;
  struct MonoClass * D.24208;
  short unsigned int D.24210;
  int D.24211;
  int D.24212;
  int D.18482;
  int iftmp.113;
  int D.18478;
  const char[7] * D.24217;
  unsigned char D.24218;
  int D.24219;
  unsigned char D.24220;
  int D.24221;
  const unsigned char * D.24226;
  unsigned char D.24227;
  int D.24228;
  const unsigned char * D.24229;
  unsigned char D.24230;
  int D.24231;
  const unsigned char * D.24236;
  unsigned char D.24237;
  int D.24238;
  const unsigned char * D.24239;
  unsigned char D.24240;
  int D.24241;
  const unsigned char * D.24246;
  unsigned char D.24247;
  int D.24248;
  const unsigned char * D.24249;
  unsigned char D.24250;
  int D.24251;
  const char * D.24253;
  int D.24256;
  int D.24258;
  int D.24259;
  gchar * D.24260;
  struct GSList * D.24261;
  int D.24262;
  int D.24265;
  int D.24268;
  gchar * D.24274;
  struct GSList * D.24275;
  struct ILStackDesc * D.24278;
  struct MonoClassField * field;
  struct MonoClass * klass;

  try
    {
      D.24176 = check_overflow (ctx);
      if (D.24176 == 0) goto <D.24177>; else goto <D.24178>;
      <D.24177>:
      return;
      <D.24178>:
      if (take_addr == 0) goto <D.24179>; else goto <D.24180>;
      <D.24179>:
      D.24181 = ctx->prefix_set;
      D.24182 = D.24181 & 4294967293;
      ctx->prefix_set = D.24182;
      <D.24180>:
      if (take_addr != 0) goto <D.24184>; else goto <D.24185>;
      <D.24184>:
      iftmp.112 = "ldsflda";
      goto <D.24186>;
      <D.24185>:
      iftmp.112 = "ldsfld";
      <D.24186>:
      field = verifier_load_field (ctx, token, &klass, iftmp.112);
      if (field == 0B) goto <D.24187>; else goto <D.24188>;
      <D.24187>:
      return;
      <D.24188>:
      D.24189 = field->type;
      D.24190 = D.24189->attrs;
      D.24191 = (int) D.24190;
      D.24192 = D.24191 & 16;
      if (D.24192 == 0) goto <D.24193>; else goto <D.24194>;
      <D.24193>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24195 = ctx->ip_offset;
        D.24196 = monoeg_g_strdup_printf ("Cannot load non static field at 0x%04x", D.24195);
        vinfo->info.message = D.24196;
        vinfo->exception_type = 3;
        D.24197 = ctx->list;
        D.24198 = monoeg_g_slist_prepend (D.24197, vinfo);
        ctx->list = D.24198;
      }
      ctx->valid = 0;
      return;
      <D.24194>:
      if (take_addr != 0) goto <D.24201>; else goto <D.24202>;
      <D.24201>:
      D.24189 = field->type;
      D.24190 = D.24189->attrs;
      D.24191 = (int) D.24190;
      D.24203 = D.24191 & 32;
      if (D.24203 != 0) goto <D.24204>; else goto <D.24205>;
      <D.24204>:
      D.24206 = field->parent;
      D.24207 = ctx->method;
      D.24208 = D.24207->klass;
      if (D.24206 != D.24208) goto <D.24199>; else goto <D.24209>;
      <D.24209>:
      D.24207 = ctx->method;
      D.24210 = D.24207->flags;
      D.24211 = (int) D.24210;
      D.24212 = D.24211 & 2064;
      if (D.24212 == 0) goto <D.24199>; else goto <D.24213>;
      <D.24213>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.24207 = ctx->method;
          __s2 = D.24207->name;
          D.24217 = ".cctor";
          D.24218 = MEM[(const unsigned char *)D.24217];
          D.24219 = (int) D.24218;
          D.24220 = *__s2;
          D.24221 = (int) D.24220;
          __result = D.24219 - D.24221;
          {
            if (__s1_len != 0) goto <D.24222>; else goto <D.24223>;
            <D.24222>:
            if (__result == 0) goto <D.24224>; else goto <D.24225>;
            <D.24224>:
            D.24226 = &MEM[(void *)".cctor" + 1B];
            D.24227 = *D.24226;
            D.24228 = (int) D.24227;
            D.24229 = __s2 + 1;
            D.24230 = *D.24229;
            D.24231 = (int) D.24230;
            __result = D.24228 - D.24231;
            if (__s1_len > 1) goto <D.24232>; else goto <D.24233>;
            <D.24232>:
            if (__result == 0) goto <D.24234>; else goto <D.24235>;
            <D.24234>:
            D.24236 = &MEM[(void *)".cctor" + 2B];
            D.24237 = *D.24236;
            D.24238 = (int) D.24237;
            D.24239 = __s2 + 2;
            D.24240 = *D.24239;
            D.24241 = (int) D.24240;
            __result = D.24238 - D.24241;
            if (__s1_len > 2) goto <D.24242>; else goto <D.24243>;
            <D.24242>:
            if (__result == 0) goto <D.24244>; else goto <D.24245>;
            <D.24244>:
            D.24246 = &MEM[(void *)".cctor" + 3B];
            D.24247 = *D.24246;
            D.24248 = (int) D.24247;
            D.24249 = __s2 + 3;
            D.24250 = *D.24249;
            D.24251 = (int) D.24250;
            __result = D.24248 - D.24251;
            <D.24245>:
            <D.24243>:
            <D.24235>:
            <D.24233>:
            <D.24225>:
            <D.24223>:
          }
          D.18478 = __result;
        }
        iftmp.113 = D.18478;
        goto <D.24252>;
        <D.24216>:
        D.24207 = ctx->method;
        D.24253 = D.24207->name;
        iftmp.113 = __builtin_strcmp (".cctor", D.24253);
        <D.24252>:
        D.18482 = iftmp.113;
      }
      if (D.18482 != 0) goto <D.24199>; else goto <D.24200>;
      <D.24199>:
      D.24256 = ctx->verifiable;
      if (D.24256 != 0) goto <D.24254>; else goto <D.24257>;
      <D.24257>:
      D.24258 = ctx->level;
      D.24259 = D.24258 & 128;
      if (D.24259 != 0) goto <D.24254>; else goto <D.24255>;
      <D.24254>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24195 = ctx->ip_offset;
        D.24260 = monoeg_g_strdup_printf ("Cannot take the address of a init-only field at 0x%04x", D.24195);
        vinfo->info.message = D.24260;
        vinfo->exception_type = 4;
        D.24197 = ctx->list;
        D.24261 = monoeg_g_slist_prepend (D.24197, vinfo);
        ctx->list = D.24261;
      }
      ctx->verifiable = 0;
      D.24258 = ctx->level;
      D.24262 = D.24258 & 16;
      if (D.24262 != 0) goto <D.24263>; else goto <D.24264>;
      <D.24263>:
      ctx->valid = 0;
      <D.24264>:
      <D.24255>:
      <D.24200>:
      <D.24205>:
      <D.24202>:
      D.24258 = ctx->level;
      D.24265 = D.24258 & 64;
      if (D.24265 == 0) goto <D.24266>; else goto <D.24267>;
      <D.24266>:
      D.24207 = ctx->method;
      D.24268 = mono_method_can_access_field_full (D.24207, field, 0B);
      if (D.24268 == 0) goto <D.24269>; else goto <D.24270>;
      <D.24269>:
      D.24256 = ctx->verifiable;
      if (D.24256 != 0) goto <D.24271>; else goto <D.24273>;
      <D.24273>:
      D.24258 = ctx->level;
      D.24259 = D.24258 & 128;
      if (D.24259 != 0) goto <D.24271>; else goto <D.24272>;
      <D.24271>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24195 = ctx->ip_offset;
        D.24274 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24195);
        vinfo->info.message = D.24274;
        vinfo->exception_type = 10;
        D.24197 = ctx->list;
        D.24275 = monoeg_g_slist_prepend (D.24197, vinfo);
        ctx->list = D.24275;
      }
      ctx->verifiable = 0;
      D.24258 = ctx->level;
      D.24262 = D.24258 & 16;
      if (D.24262 != 0) goto <D.24276>; else goto <D.24277>;
      <D.24276>:
      ctx->valid = 0;
      <D.24277>:
      <D.24272>:
      <D.24270>:
      <D.24267>:
      D.24278 = stack_push (ctx);
      D.24189 = field->type;
      set_stack_value (ctx, D.24278, D.24189, take_addr);
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_store_field (struct VerifyContext * ctx, int token)
{
  unsigned int D.24282;
  unsigned int D.24283;
  int D.24284;
  int D.24287;
  struct MonoClassField * field.114;
  struct MonoType * D.24291;
  int D.24292;
  int D.24297;
  int D.24299;
  int D.24300;
  const char * D.24301;
  unsigned int D.24302;
  gchar * D.24303;
  struct GSList * D.24304;
  struct GSList * D.24305;
  int D.24306;
  struct ILStackDesc * value;
  struct ILStackDesc * obj;
  struct MonoClassField * field;

  try
    {
      D.24282 = ctx->prefix_set;
      D.24283 = D.24282 & 4294967292;
      ctx->prefix_set = D.24283;
      D.24284 = check_underflow (ctx, 2);
      if (D.24284 == 0) goto <D.24285>; else goto <D.24286>;
      <D.24285>:
      return;
      <D.24286>:
      value = stack_pop (ctx);
      obj = stack_pop_safe (ctx);
      D.24287 = check_is_valid_type_for_field_ops (ctx, token, obj, &field, "stfld");
      if (D.24287 == 0) goto <D.24288>; else goto <D.24289>;
      <D.24288>:
      return;
      <D.24289>:
      field.114 = field;
      D.24291 = field.114->type;
      D.24292 = verify_stack_type_compatibility (ctx, D.24291, value);
      if (D.24292 == 0) goto <D.24293>; else goto <D.24294>;
      <D.24293>:
      D.24297 = ctx->verifiable;
      if (D.24297 != 0) goto <D.24295>; else goto <D.24298>;
      <D.24298>:
      D.24299 = ctx->level;
      D.24300 = D.24299 & 128;
      if (D.24300 != 0) goto <D.24295>; else goto <D.24296>;
      <D.24295>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24301 = stack_slot_get_name (value);
        D.24302 = ctx->ip_offset;
        D.24303 = monoeg_g_strdup_printf ("Incompatible type %s in field store at 0x%04x", D.24301, D.24302);
        vinfo->info.message = D.24303;
        vinfo->exception_type = 4;
        D.24304 = ctx->list;
        D.24305 = monoeg_g_slist_prepend (D.24304, vinfo);
        ctx->list = D.24305;
      }
      ctx->verifiable = 0;
      D.24299 = ctx->level;
      D.24306 = D.24299 & 16;
      if (D.24306 != 0) goto <D.24307>; else goto <D.24308>;
      <D.24307>:
      ctx->valid = 0;
      <D.24308>:
      <D.24296>:
      <D.24294>:
    }
  finally
    {
      field = {CLOBBER};
    }
}


do_store_static_field (struct VerifyContext * ctx, int token)
{
  unsigned int D.24312;
  unsigned int D.24313;
  int D.24314;
  struct MonoType * D.24319;
  short unsigned int D.24320;
  int D.24321;
  int D.24322;
  unsigned int D.24325;
  gchar * D.24326;
  struct GSList * D.24327;
  struct GSList * D.24328;
  unsigned char D.24329;
  gchar * D.24332;
  struct GSList * D.24333;
  int D.24334;
  int D.24335;
  struct MonoMethod * D.24338;
  int D.24339;
  int D.24344;
  int D.24346;
  gchar * D.24347;
  struct GSList * D.24348;
  int D.24349;
  int D.24352;
  gchar * D.24358;
  struct GSList * D.24359;
  struct MonoClassField * field;
  struct MonoClass * klass;
  struct ILStackDesc * value;

  try
    {
      D.24312 = ctx->prefix_set;
      D.24313 = D.24312 & 4294967293;
      ctx->prefix_set = D.24313;
      D.24314 = check_underflow (ctx, 1);
      if (D.24314 == 0) goto <D.24315>; else goto <D.24316>;
      <D.24315>:
      return;
      <D.24316>:
      value = stack_pop (ctx);
      field = verifier_load_field (ctx, token, &klass, "stsfld");
      if (field == 0B) goto <D.24317>; else goto <D.24318>;
      <D.24317>:
      return;
      <D.24318>:
      D.24319 = field->type;
      D.24320 = D.24319->attrs;
      D.24321 = (int) D.24320;
      D.24322 = D.24321 & 16;
      if (D.24322 == 0) goto <D.24323>; else goto <D.24324>;
      <D.24323>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24325 = ctx->ip_offset;
        D.24326 = monoeg_g_strdup_printf ("Cannot store non static field at 0x%04x", D.24325);
        vinfo->info.message = D.24326;
        vinfo->exception_type = 3;
        D.24327 = ctx->list;
        D.24328 = monoeg_g_slist_prepend (D.24327, vinfo);
        ctx->list = D.24328;
      }
      ctx->valid = 0;
      return;
      <D.24324>:
      D.24319 = field->type;
      D.24329 = D.24319->type;
      if (D.24329 == 22) goto <D.24330>; else goto <D.24331>;
      <D.24330>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24325 = ctx->ip_offset;
        D.24332 = monoeg_g_strdup_printf ("Typedbyref field is an unverfiable type in store static field at 0x%04x", D.24325);
        vinfo->info.message = D.24332;
        vinfo->exception_type = 3;
        D.24327 = ctx->list;
        D.24333 = monoeg_g_slist_prepend (D.24327, vinfo);
        ctx->list = D.24333;
      }
      ctx->valid = 0;
      return;
      <D.24331>:
      D.24334 = ctx->level;
      D.24335 = D.24334 & 64;
      if (D.24335 == 0) goto <D.24336>; else goto <D.24337>;
      <D.24336>:
      D.24338 = ctx->method;
      D.24339 = mono_method_can_access_field_full (D.24338, field, 0B);
      if (D.24339 == 0) goto <D.24340>; else goto <D.24341>;
      <D.24340>:
      D.24344 = ctx->verifiable;
      if (D.24344 != 0) goto <D.24342>; else goto <D.24345>;
      <D.24345>:
      D.24334 = ctx->level;
      D.24346 = D.24334 & 128;
      if (D.24346 != 0) goto <D.24342>; else goto <D.24343>;
      <D.24342>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24325 = ctx->ip_offset;
        D.24347 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24325);
        vinfo->info.message = D.24347;
        vinfo->exception_type = 10;
        D.24327 = ctx->list;
        D.24348 = monoeg_g_slist_prepend (D.24327, vinfo);
        ctx->list = D.24348;
      }
      ctx->verifiable = 0;
      D.24334 = ctx->level;
      D.24349 = D.24334 & 16;
      if (D.24349 != 0) goto <D.24350>; else goto <D.24351>;
      <D.24350>:
      ctx->valid = 0;
      <D.24351>:
      <D.24343>:
      <D.24341>:
      <D.24337>:
      D.24319 = field->type;
      D.24352 = verify_stack_type_compatibility (ctx, D.24319, value);
      if (D.24352 == 0) goto <D.24353>; else goto <D.24354>;
      <D.24353>:
      {
        char * stack_name;
        char * field_name;

        stack_name = stack_slot_full_name (value);
        D.24319 = field->type;
        field_name = mono_type_full_name (D.24319);
        D.24344 = ctx->verifiable;
        if (D.24344 != 0) goto <D.24355>; else goto <D.24357>;
        <D.24357>:
        D.24334 = ctx->level;
        D.24346 = D.24334 & 128;
        if (D.24346 != 0) goto <D.24355>; else goto <D.24356>;
        <D.24355>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.24325 = ctx->ip_offset;
          D.24358 = monoeg_g_strdup_printf ("Incompatible type in static field store expected \'%s\' but found \'%s\' at 0x%04x", field_name, stack_name, D.24325);
          vinfo->info.message = D.24358;
          vinfo->exception_type = 4;
          D.24327 = ctx->list;
          D.24359 = monoeg_g_slist_prepend (D.24327, vinfo);
          ctx->list = D.24359;
        }
        ctx->verifiable = 0;
        D.24334 = ctx->level;
        D.24349 = D.24334 & 16;
        if (D.24349 != 0) goto <D.24360>; else goto <D.24361>;
        <D.24360>:
        ctx->valid = 0;
        <D.24361>:
        <D.24356>:
        monoeg_g_free (field_name);
        monoeg_g_free (stack_name);
      }
      <D.24354>:
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_stobj (struct VerifyContext * ctx, int token)
{
  unsigned int D.24365;
  unsigned int D.24366;
  int D.24369;
  int D.24372;
  int D.24377;
  int D.24379;
  int D.24380;
  unsigned int D.24381;
  gchar * D.24382;
  struct GSList * D.24383;
  struct GSList * D.24384;
  int D.24385;
  int D.24388;
  gchar * D.24394;
  struct GSList * D.24395;
  int D.24398;
  struct MonoType * D.24401;
  int D.24402;
  int D.24405;
  gchar * D.24411;
  struct GSList * D.24412;
  int D.24415;
  gchar * D.24421;
  struct GSList * D.24422;
  struct MonoType * D.24425;
  struct MonoType * D.24426;
  int D.24427;
  gchar * D.24433;
  struct GSList * D.24434;
  struct ILStackDesc * dest;
  struct ILStackDesc * src;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "stobj");
  D.24365 = ctx->prefix_set;
  D.24366 = D.24365 & 4294967292;
  ctx->prefix_set = D.24366;
  if (type == 0B) goto <D.24367>; else goto <D.24368>;
  <D.24367>:
  return;
  <D.24368>:
  D.24369 = check_underflow (ctx, 2);
  if (D.24369 == 0) goto <D.24370>; else goto <D.24371>;
  <D.24370>:
  return;
  <D.24371>:
  src = stack_pop (ctx);
  dest = stack_pop (ctx);
  D.24372 = stack_slot_is_managed_mutability_pointer (dest);
  if (D.24372 != 0) goto <D.24373>; else goto <D.24374>;
  <D.24373>:
  D.24377 = ctx->verifiable;
  if (D.24377 != 0) goto <D.24375>; else goto <D.24378>;
  <D.24378>:
  D.24379 = ctx->level;
  D.24380 = D.24379 & 128;
  if (D.24380 != 0) goto <D.24375>; else goto <D.24376>;
  <D.24375>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24381 = ctx->ip_offset;
    D.24382 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with stobj at 0x%04x", D.24381);
    vinfo->info.message = D.24382;
    vinfo->exception_type = 4;
    D.24383 = ctx->list;
    D.24384 = monoeg_g_slist_prepend (D.24383, vinfo);
    ctx->list = D.24384;
  }
  ctx->verifiable = 0;
  D.24379 = ctx->level;
  D.24385 = D.24379 & 16;
  if (D.24385 != 0) goto <D.24386>; else goto <D.24387>;
  <D.24386>:
  ctx->valid = 0;
  <D.24387>:
  <D.24376>:
  <D.24374>:
  D.24388 = stack_slot_is_managed_pointer (dest);
  if (D.24388 == 0) goto <D.24389>; else goto <D.24390>;
  <D.24389>:
  D.24377 = ctx->verifiable;
  if (D.24377 != 0) goto <D.24391>; else goto <D.24393>;
  <D.24393>:
  D.24379 = ctx->level;
  D.24380 = D.24379 & 128;
  if (D.24380 != 0) goto <D.24391>; else goto <D.24392>;
  <D.24391>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24381 = ctx->ip_offset;
    D.24394 = monoeg_g_strdup_printf ("Invalid destination of stobj operation at 0x%04x", D.24381);
    vinfo->info.message = D.24394;
    vinfo->exception_type = 4;
    D.24383 = ctx->list;
    D.24395 = monoeg_g_slist_prepend (D.24383, vinfo);
    ctx->list = D.24395;
  }
  ctx->verifiable = 0;
  D.24379 = ctx->level;
  D.24385 = D.24379 & 16;
  if (D.24385 != 0) goto <D.24396>; else goto <D.24397>;
  <D.24396>:
  ctx->valid = 0;
  <D.24397>:
  <D.24392>:
  <D.24390>:
  D.24398 = stack_slot_is_boxed_value (src);
  if (D.24398 != 0) goto <D.24399>; else goto <D.24400>;
  <D.24399>:
  D.24401 = src->type;
  D.24402 = mono_type_is_reference (D.24401);
  if (D.24402 == 0) goto <D.24403>; else goto <D.24404>;
  <D.24403>:
  D.24405 = mono_type_is_reference (type);
  if (D.24405 == 0) goto <D.24406>; else goto <D.24407>;
  <D.24406>:
  D.24377 = ctx->verifiable;
  if (D.24377 != 0) goto <D.24408>; else goto <D.24410>;
  <D.24410>:
  D.24379 = ctx->level;
  D.24380 = D.24379 & 128;
  if (D.24380 != 0) goto <D.24408>; else goto <D.24409>;
  <D.24408>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24381 = ctx->ip_offset;
    D.24411 = monoeg_g_strdup_printf ("Cannot use stobj with a boxed source value that is not a reference type at 0x%04x", D.24381);
    vinfo->info.message = D.24411;
    vinfo->exception_type = 4;
    D.24383 = ctx->list;
    D.24412 = monoeg_g_slist_prepend (D.24383, vinfo);
    ctx->list = D.24412;
  }
  ctx->verifiable = 0;
  D.24379 = ctx->level;
  D.24385 = D.24379 & 16;
  if (D.24385 != 0) goto <D.24413>; else goto <D.24414>;
  <D.24413>:
  ctx->valid = 0;
  <D.24414>:
  <D.24409>:
  <D.24407>:
  <D.24404>:
  <D.24400>:
  D.24415 = verify_stack_type_compatibility (ctx, type, src);
  if (D.24415 == 0) goto <D.24416>; else goto <D.24417>;
  <D.24416>:
  {
    char * type_name;
    char * src_name;

    type_name = mono_type_full_name (type);
    src_name = stack_slot_full_name (src);
    D.24377 = ctx->verifiable;
    if (D.24377 != 0) goto <D.24418>; else goto <D.24420>;
    <D.24420>:
    D.24379 = ctx->level;
    D.24380 = D.24379 & 128;
    if (D.24380 != 0) goto <D.24418>; else goto <D.24419>;
    <D.24418>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.24381 = ctx->ip_offset;
      D.24421 = monoeg_g_strdup_printf ("Token \'%s\' and source \'%s\' of stobj don\'t match \' at 0x%04x", type_name, src_name, D.24381);
      vinfo->info.message = D.24421;
      vinfo->exception_type = 4;
      D.24383 = ctx->list;
      D.24422 = monoeg_g_slist_prepend (D.24383, vinfo);
      ctx->list = D.24422;
    }
    ctx->verifiable = 0;
    D.24379 = ctx->level;
    D.24385 = D.24379 & 16;
    if (D.24385 != 0) goto <D.24423>; else goto <D.24424>;
    <D.24423>:
    ctx->valid = 0;
    <D.24424>:
    <D.24419>:
    monoeg_g_free (type_name);
    monoeg_g_free (src_name);
  }
  <D.24417>:
  D.24425 = dest->type;
  D.24426 = mono_type_get_type_byval (D.24425);
  D.24427 = verify_type_compatibility (ctx, D.24426, type);
  if (D.24427 == 0) goto <D.24428>; else goto <D.24429>;
  <D.24428>:
  D.24377 = ctx->verifiable;
  if (D.24377 != 0) goto <D.24430>; else goto <D.24432>;
  <D.24432>:
  D.24379 = ctx->level;
  D.24380 = D.24379 & 128;
  if (D.24380 != 0) goto <D.24430>; else goto <D.24431>;
  <D.24430>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24381 = ctx->ip_offset;
    D.24433 = monoeg_g_strdup_printf ("Destination and token types of stobj don\'t match at 0x%04x", D.24381);
    vinfo->info.message = D.24433;
    vinfo->exception_type = 4;
    D.24383 = ctx->list;
    D.24434 = monoeg_g_slist_prepend (D.24383, vinfo);
    ctx->list = D.24434;
  }
  ctx->verifiable = 0;
  D.24379 = ctx->level;
  D.24385 = D.24379 & 16;
  if (D.24385 != 0) goto <D.24435>; else goto <D.24436>;
  <D.24435>:
  ctx->valid = 0;
  <D.24436>:
  <D.24431>:
  <D.24429>:
}


do_box_value (struct VerifyContext * ctx, int klass_token)
{
  int D.24440;
  int D.24443;
  struct MonoType * D.24446;
  int D.24447;
  int D.24450;
  struct ILStackDesc * D.24453;
  int D.24454;
  int D.24455;
  int D.24456;
  int D.24461;
  int D.24463;
  int D.24464;
  unsigned int D.24465;
  gchar * D.24466;
  struct GSList * D.24467;
  struct GSList * D.24468;
  int D.24469;
  int D.24472;
  struct MonoClass * D.24475;
  struct ILStackDesc * value;
  struct MonoType * type;
  struct MonoClass * klass;

  type = get_boxable_mono_type (ctx, klass_token, "box");
  if (type == 0B) goto <D.24438>; else goto <D.24439>;
  <D.24438>:
  return;
  <D.24439>:
  D.24440 = check_underflow (ctx, 1);
  if (D.24440 == 0) goto <D.24441>; else goto <D.24442>;
  <D.24441>:
  return;
  <D.24442>:
  value = stack_pop (ctx);
  D.24443 = stack_slot_get_underlying_type (value);
  if (D.24443 == 6) goto <D.24444>; else goto <D.24445>;
  <D.24444>:
  D.24446 = value->type;
  D.24447 = mono_type_is_reference (D.24446);
  if (D.24447 != 0) goto <D.24448>; else goto <D.24449>;
  <D.24448>:
  D.24450 = mono_type_is_reference (type);
  if (D.24450 != 0) goto <D.24451>; else goto <D.24452>;
  <D.24451>:
  D.24453 = stack_push_stack_val (ctx, value);
  D.24454 = D.24453->stype;
  D.24455 = D.24454 | 4096;
  D.24453->stype = D.24455;
  return;
  <D.24452>:
  <D.24449>:
  <D.24445>:
  D.24456 = verify_stack_type_compatibility (ctx, type, value);
  if (D.24456 == 0) goto <D.24457>; else goto <D.24458>;
  <D.24457>:
  D.24461 = ctx->verifiable;
  if (D.24461 != 0) goto <D.24459>; else goto <D.24462>;
  <D.24462>:
  D.24463 = ctx->level;
  D.24464 = D.24463 & 128;
  if (D.24464 != 0) goto <D.24459>; else goto <D.24460>;
  <D.24459>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24465 = ctx->ip_offset;
    D.24466 = monoeg_g_strdup_printf ("Invalid type at stack for boxing operation at 0x%04x", D.24465);
    vinfo->info.message = D.24466;
    vinfo->exception_type = 4;
    D.24467 = ctx->list;
    D.24468 = monoeg_g_slist_prepend (D.24467, vinfo);
    ctx->list = D.24468;
  }
  ctx->verifiable = 0;
  D.24463 = ctx->level;
  D.24469 = D.24463 & 16;
  if (D.24469 != 0) goto <D.24470>; else goto <D.24471>;
  <D.24470>:
  ctx->valid = 0;
  <D.24471>:
  <D.24460>:
  <D.24458>:
  klass = mono_class_from_mono_type (type);
  D.24472 = mono_class_is_nullable (klass);
  if (D.24472 != 0) goto <D.24473>; else goto <D.24474>;
  <D.24473>:
  D.24475 = mono_class_get_nullable_param (klass);
  type = &D.24475->byval_arg;
  <D.24474>:
  stack_push_val (ctx, 4102, type);
}


do_newarr (struct VerifyContext * ctx, int token)
{
  int D.24479;
  int D.24482;
  int D.24485;
  int D.24490;
  int D.24492;
  int D.24493;
  const char * D.24494;
  unsigned int D.24495;
  gchar * D.24496;
  struct GSList * D.24497;
  struct GSList * D.24498;
  int D.24499;
  struct ILStackDesc * D.24502;
  struct MonoClass * D.24503;
  struct MonoClass * D.24504;
  struct MonoType * D.24505;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "newarr");
  if (type == 0B) goto <D.24477>; else goto <D.24478>;
  <D.24477>:
  return;
  <D.24478>:
  D.24479 = check_underflow (ctx, 1);
  if (D.24479 == 0) goto <D.24480>; else goto <D.24481>;
  <D.24480>:
  return;
  <D.24481>:
  value = stack_pop (ctx);
  D.24482 = stack_slot_get_type (value);
  if (D.24482 != 1) goto <D.24483>; else goto <D.24484>;
  <D.24483>:
  D.24485 = stack_slot_get_type (value);
  if (D.24485 != 3) goto <D.24486>; else goto <D.24487>;
  <D.24486>:
  D.24490 = ctx->verifiable;
  if (D.24490 != 0) goto <D.24488>; else goto <D.24491>;
  <D.24491>:
  D.24492 = ctx->level;
  D.24493 = D.24492 & 128;
  if (D.24493 != 0) goto <D.24488>; else goto <D.24489>;
  <D.24488>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24494 = stack_slot_get_name (value);
    D.24495 = ctx->ip_offset;
    D.24496 = monoeg_g_strdup_printf ("Array size type on stack (%s) is not a verifiable type at 0x%04x", D.24494, D.24495);
    vinfo->info.message = D.24496;
    vinfo->exception_type = 4;
    D.24497 = ctx->list;
    D.24498 = monoeg_g_slist_prepend (D.24497, vinfo);
    ctx->list = D.24498;
  }
  ctx->verifiable = 0;
  D.24492 = ctx->level;
  D.24499 = D.24492 & 16;
  if (D.24499 != 0) goto <D.24500>; else goto <D.24501>;
  <D.24500>:
  ctx->valid = 0;
  <D.24501>:
  <D.24489>:
  <D.24487>:
  <D.24484>:
  D.24502 = stack_push (ctx);
  D.24503 = mono_class_from_mono_type (type);
  D.24504 = mono_array_class_get (D.24503, 1);
  D.24505 = mono_class_get_type (D.24504);
  set_stack_value (ctx, D.24502, D.24505, 0);
}


do_ldlen (struct VerifyContext * ctx)
{
  int D.24507;
  int D.24512;
  struct MonoType * D.24514;
  unsigned char D.24515;
  int D.24518;
  int D.24520;
  int D.24521;
  unsigned int D.24522;
  gchar * D.24523;
  struct GSList * D.24524;
  struct GSList * D.24525;
  int D.24526;
  struct MonoClass * D.24529;
  struct MonoType * D.24530;
  struct ILStackDesc * value;

  D.24507 = check_underflow (ctx, 1);
  if (D.24507 == 0) goto <D.24508>; else goto <D.24509>;
  <D.24508>:
  return;
  <D.24509>:
  value = stack_pop (ctx);
  D.24512 = stack_slot_get_type (value);
  if (D.24512 != 6) goto <D.24510>; else goto <D.24513>;
  <D.24513>:
  D.24514 = value->type;
  D.24515 = D.24514->type;
  if (D.24515 != 29) goto <D.24510>; else goto <D.24511>;
  <D.24510>:
  D.24518 = ctx->verifiable;
  if (D.24518 != 0) goto <D.24516>; else goto <D.24519>;
  <D.24519>:
  D.24520 = ctx->level;
  D.24521 = D.24520 & 128;
  if (D.24521 != 0) goto <D.24516>; else goto <D.24517>;
  <D.24516>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24522 = ctx->ip_offset;
    D.24523 = monoeg_g_strdup_printf ("Invalid array type for ldlen at 0x%04x", D.24522);
    vinfo->info.message = D.24523;
    vinfo->exception_type = 4;
    D.24524 = ctx->list;
    D.24525 = monoeg_g_slist_prepend (D.24524, vinfo);
    ctx->list = D.24525;
  }
  ctx->verifiable = 0;
  D.24520 = ctx->level;
  D.24526 = D.24520 & 16;
  if (D.24526 != 0) goto <D.24527>; else goto <D.24528>;
  <D.24527>:
  ctx->valid = 0;
  <D.24528>:
  <D.24517>:
  <D.24511>:
  D.24529 = mono_defaults.int_class;
  D.24530 = &D.24529->byval_arg;
  stack_push_val (ctx, 3, D.24530);
}


do_ldelema (struct VerifyContext * ctx, int klass_token)
{
  int D.24534;
  int D.24537;
  int D.24540;
  int D.24545;
  int D.24547;
  int D.24548;
  const char * D.24549;
  unsigned int D.24550;
  gchar * D.24551;
  struct GSList * D.24552;
  struct GSList * D.24553;
  int D.24554;
  int D.24557;
  int D.24563;
  struct MonoType * D.24565;
  unsigned char D.24566;
  const char * D.24570;
  gchar * D.24571;
  struct GSList * D.24572;
  int D.24578;
  int D.24580;
  struct MonoClass * D.24581;
  struct MonoType * D.24582;
  gchar * D.24588;
  struct GSList * D.24589;
  unsigned int D.24592;
  unsigned int D.24593;
  unsigned int D.24596;
  int D.24597;
  int D.24598;
  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.24532>; else goto <D.24533>;
  <D.24532>:
  return;
  <D.24533>:
  D.24534 = check_underflow (ctx, 2);
  if (D.24534 == 0) goto <D.24535>; else goto <D.24536>;
  <D.24535>:
  return;
  <D.24536>:
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.24537 = stack_slot_get_type (index);
  if (D.24537 != 1) goto <D.24538>; else goto <D.24539>;
  <D.24538>:
  D.24540 = stack_slot_get_type (index);
  if (D.24540 != 3) goto <D.24541>; else goto <D.24542>;
  <D.24541>:
  D.24545 = ctx->verifiable;
  if (D.24545 != 0) goto <D.24543>; else goto <D.24546>;
  <D.24546>:
  D.24547 = ctx->level;
  D.24548 = D.24547 & 128;
  if (D.24548 != 0) goto <D.24543>; else goto <D.24544>;
  <D.24543>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24549 = stack_slot_get_name (index);
    D.24550 = ctx->ip_offset;
    D.24551 = monoeg_g_strdup_printf ("Index type(%s) for ldelema is not an int or a native int at 0x%04x", D.24549, D.24550);
    vinfo->info.message = D.24551;
    vinfo->exception_type = 4;
    D.24552 = ctx->list;
    D.24553 = monoeg_g_slist_prepend (D.24552, vinfo);
    ctx->list = D.24553;
  }
  ctx->verifiable = 0;
  D.24547 = ctx->level;
  D.24554 = D.24547 & 16;
  if (D.24554 != 0) goto <D.24555>; else goto <D.24556>;
  <D.24555>:
  ctx->valid = 0;
  <D.24556>:
  <D.24544>:
  <D.24542>:
  <D.24539>:
  D.24557 = stack_slot_is_null_literal (array);
  if (D.24557 == 0) goto <D.24558>; else goto <D.24559>;
  <D.24558>:
  D.24563 = stack_slot_get_type (array);
  if (D.24563 != 6) goto <D.24560>; else goto <D.24564>;
  <D.24564>:
  D.24565 = array->type;
  D.24566 = D.24565->type;
  if (D.24566 != 29) goto <D.24560>; else goto <D.24561>;
  <D.24560>:
  D.24545 = ctx->verifiable;
  if (D.24545 != 0) goto <D.24567>; else goto <D.24569>;
  <D.24569>:
  D.24547 = ctx->level;
  D.24548 = D.24547 & 128;
  if (D.24548 != 0) goto <D.24567>; else goto <D.24568>;
  <D.24567>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24570 = stack_slot_get_name (array);
    D.24550 = ctx->ip_offset;
    D.24571 = monoeg_g_strdup_printf ("Invalid array type(%s) for ldelema at 0x%04x", D.24570, D.24550);
    vinfo->info.message = D.24571;
    vinfo->exception_type = 4;
    D.24552 = ctx->list;
    D.24572 = monoeg_g_slist_prepend (D.24552, vinfo);
    ctx->list = D.24572;
  }
  ctx->verifiable = 0;
  D.24547 = ctx->level;
  D.24554 = D.24547 & 16;
  if (D.24554 != 0) goto <D.24573>; else goto <D.24574>;
  <D.24573>:
  ctx->valid = 0;
  <D.24574>:
  <D.24568>:
  goto <D.24562>;
  <D.24561>:
  D.24578 = get_stack_type (type);
  if (D.24578 == 1) goto <D.24575>; else goto <D.24579>;
  <D.24579>:
  D.24580 = get_stack_type (type);
  if (D.24580 == 3) goto <D.24575>; else goto <D.24576>;
  <D.24575>:
  D.24565 = array->type;
  D.24581 = D.24565->data.klass;
  D.24582 = &D.24581->byval_arg;
  valid = verify_type_compatibility_full (ctx, type, D.24582, 1);
  goto <D.24577>;
  <D.24576>:
  D.24565 = array->type;
  D.24581 = D.24565->data.klass;
  D.24582 = &D.24581->byval_arg;
  valid = mono_metadata_type_equal (type, D.24582);
  <D.24577>:
  if (valid == 0) goto <D.24583>; else goto <D.24584>;
  <D.24583>:
  D.24545 = ctx->verifiable;
  if (D.24545 != 0) goto <D.24585>; else goto <D.24587>;
  <D.24587>:
  D.24547 = ctx->level;
  D.24548 = D.24547 & 128;
  if (D.24548 != 0) goto <D.24585>; else goto <D.24586>;
  <D.24585>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24550 = ctx->ip_offset;
    D.24588 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelema at 0x%04x", D.24550);
    vinfo->info.message = D.24588;
    vinfo->exception_type = 4;
    D.24552 = ctx->list;
    D.24589 = monoeg_g_slist_prepend (D.24552, vinfo);
    ctx->list = D.24589;
  }
  ctx->verifiable = 0;
  D.24547 = ctx->level;
  D.24554 = D.24547 & 16;
  if (D.24554 != 0) goto <D.24590>; else goto <D.24591>;
  <D.24590>:
  ctx->valid = 0;
  <D.24591>:
  <D.24586>:
  <D.24584>:
  <D.24562>:
  <D.24559>:
  res = stack_push (ctx);
  set_stack_value (ctx, res, type, 1);
  D.24592 = ctx->prefix_set;
  D.24593 = D.24592 & 16;
  if (D.24593 != 0) goto <D.24594>; else goto <D.24595>;
  <D.24594>:
  D.24592 = ctx->prefix_set;
  D.24596 = D.24592 & 4294967279;
  ctx->prefix_set = D.24596;
  D.24597 = res->stype;
  D.24598 = D.24597 | 512;
  res->stype = D.24598;
  <D.24595>:
}


do_ldelem (struct VerifyContext * ctx, int opcode, int token)
{
  int D.24600;
  unsigned int D.24607;
  gchar * D.24608;
  struct GSList * D.24609;
  struct GSList * D.24610;
  int D.24612;
  int D.24615;
  int D.24620;
  int D.24622;
  int D.24623;
  const char * D.24624;
  gchar * D.24625;
  struct GSList * D.24626;
  int D.24627;
  int D.24630;
  int D.24636;
  struct MonoType * D.24638;
  unsigned char D.24639;
  const char * D.24643;
  gchar * D.24644;
  struct GSList * D.24645;
  struct MonoClass * D.24650;
  unsigned int D.24651;
  unsigned int D.24652;
  gchar * D.24658;
  struct GSList * D.24659;
  int D.24663;
  unsigned char D.24669;
  unsigned char D.24670;
  unsigned char D.24672;
  unsigned char D.24673;
  unsigned char D.24674;
  unsigned char D.24676;
  gchar * D.24680;
  struct GSList * D.24681;
  int D.24684;
  gchar * D.24690;
  struct GSList * D.24691;
  struct ILStackDesc * D.24694;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct MonoType * type;

  D.24600 = check_underflow (ctx, 2);
  if (D.24600 == 0) goto <D.24601>; else goto <D.24602>;
  <D.24601>:
  return;
  <D.24602>:
  if (opcode == 163) goto <D.24603>; else goto <D.24604>;
  <D.24603>:
  type = verifier_load_type (ctx, token, "ldelem.any");
  if (type == 0B) goto <D.24605>; else goto <D.24606>;
  <D.24605>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24607 = ctx->ip_offset;
    D.24608 = monoeg_g_strdup_printf ("Type (0x%08x) not found at 0x%04x", token, D.24607);
    vinfo->info.message = D.24608;
    vinfo->exception_type = 3;
    D.24609 = ctx->list;
    D.24610 = monoeg_g_slist_prepend (D.24609, vinfo);
    ctx->list = D.24610;
  }
  ctx->valid = 0;
  return;
  <D.24606>:
  goto <D.24611>;
  <D.24604>:
  type = mono_type_from_opcode (opcode);
  <D.24611>:
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.24612 = stack_slot_get_type (index);
  if (D.24612 != 1) goto <D.24613>; else goto <D.24614>;
  <D.24613>:
  D.24615 = stack_slot_get_type (index);
  if (D.24615 != 3) goto <D.24616>; else goto <D.24617>;
  <D.24616>:
  D.24620 = ctx->verifiable;
  if (D.24620 != 0) goto <D.24618>; else goto <D.24621>;
  <D.24621>:
  D.24622 = ctx->level;
  D.24623 = D.24622 & 128;
  if (D.24623 != 0) goto <D.24618>; else goto <D.24619>;
  <D.24618>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24624 = stack_slot_get_name (index);
    D.24607 = ctx->ip_offset;
    D.24625 = monoeg_g_strdup_printf ("Index type(%s) for ldelem.X is not an int or a native int at 0x%04x", D.24624, D.24607);
    vinfo->info.message = D.24625;
    vinfo->exception_type = 4;
    D.24609 = ctx->list;
    D.24626 = monoeg_g_slist_prepend (D.24609, vinfo);
    ctx->list = D.24626;
  }
  ctx->verifiable = 0;
  D.24622 = ctx->level;
  D.24627 = D.24622 & 16;
  if (D.24627 != 0) goto <D.24628>; else goto <D.24629>;
  <D.24628>:
  ctx->valid = 0;
  <D.24629>:
  <D.24619>:
  <D.24617>:
  <D.24614>:
  D.24630 = stack_slot_is_null_literal (array);
  if (D.24630 == 0) goto <D.24631>; else goto <D.24632>;
  <D.24631>:
  D.24636 = stack_slot_get_type (array);
  if (D.24636 != 6) goto <D.24633>; else goto <D.24637>;
  <D.24637>:
  D.24638 = array->type;
  D.24639 = D.24638->type;
  if (D.24639 != 29) goto <D.24633>; else goto <D.24634>;
  <D.24633>:
  D.24620 = ctx->verifiable;
  if (D.24620 != 0) goto <D.24640>; else goto <D.24642>;
  <D.24642>:
  D.24622 = ctx->level;
  D.24623 = D.24622 & 128;
  if (D.24623 != 0) goto <D.24640>; else goto <D.24641>;
  <D.24640>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24643 = stack_slot_get_name (array);
    D.24607 = ctx->ip_offset;
    D.24644 = monoeg_g_strdup_printf ("Invalid array type(%s) for ldelem.X at 0x%04x", D.24643, D.24607);
    vinfo->info.message = D.24644;
    vinfo->exception_type = 4;
    D.24609 = ctx->list;
    D.24645 = monoeg_g_slist_prepend (D.24609, vinfo);
    ctx->list = D.24645;
  }
  ctx->verifiable = 0;
  D.24622 = ctx->level;
  D.24627 = D.24622 & 16;
  if (D.24627 != 0) goto <D.24646>; else goto <D.24647>;
  <D.24646>:
  ctx->valid = 0;
  <D.24647>:
  <D.24641>:
  goto <D.24635>;
  <D.24634>:
  if (opcode == 154) goto <D.24648>; else goto <D.24649>;
  <D.24648>:
  D.24638 = array->type;
  D.24650 = D.24638->data.klass;
  D.24651 = BIT_FIELD_REF <*D.24650, 32, 160>;
  D.24652 = D.24651 & 8;
  if (D.24652 != 0) goto <D.24653>; else goto <D.24654>;
  <D.24653>:
  D.24620 = ctx->verifiable;
  if (D.24620 != 0) goto <D.24655>; else goto <D.24657>;
  <D.24657>:
  D.24622 = ctx->level;
  D.24623 = D.24622 & 128;
  if (D.24623 != 0) goto <D.24655>; else goto <D.24656>;
  <D.24655>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24607 = ctx->ip_offset;
    D.24658 = monoeg_g_strdup_printf ("Invalid array type is not a reference type for ldelem.ref 0x%04x", D.24607);
    vinfo->info.message = D.24658;
    vinfo->exception_type = 4;
    D.24609 = ctx->list;
    D.24659 = monoeg_g_slist_prepend (D.24609, vinfo);
    ctx->list = D.24659;
  }
  ctx->verifiable = 0;
  D.24622 = ctx->level;
  D.24627 = D.24622 & 16;
  if (D.24627 != 0) goto <D.24660>; else goto <D.24661>;
  <D.24660>:
  ctx->valid = 0;
  <D.24661>:
  <D.24656>:
  <D.24654>:
  D.24638 = array->type;
  D.24650 = D.24638->data.klass;
  type = &D.24650->byval_arg;
  goto <D.24662>;
  <D.24649>:
  {
    struct MonoType * candidate;

    D.24638 = array->type;
    D.24650 = D.24638->data.klass;
    candidate = &D.24650->byval_arg;
    D.24622 = ctx->level;
    D.24663 = D.24622 & 32;
    if (D.24663 == 0) goto <D.24664>; else goto <D.24665>;
    <D.24664>:
    {
      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.24669 = underlying_type->type;
      D.24670 = D.24669 + 248;
      if (D.24670 <= 1) goto <D.24671>; else goto <D.24666>;
      <D.24671>:
      D.24672 = underlying_candidate->type;
      D.24673 = D.24672 + 232;
      if (D.24673 <= 1) goto <D.24667>; else goto <D.24666>;
      <D.24666>:
      D.24672 = underlying_candidate->type;
      D.24674 = D.24672 + 248;
      if (D.24674 <= 1) goto <D.24675>; else goto <D.24668>;
      <D.24675>:
      D.24669 = underlying_type->type;
      D.24676 = D.24669 + 232;
      if (D.24676 <= 1) goto <D.24667>; else goto <D.24668>;
      <D.24667>:
      D.24620 = ctx->verifiable;
      if (D.24620 != 0) goto <D.24677>; else goto <D.24679>;
      <D.24679>:
      D.24622 = ctx->level;
      D.24623 = D.24622 & 128;
      if (D.24623 != 0) goto <D.24677>; else goto <D.24678>;
      <D.24677>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24607 = ctx->ip_offset;
        D.24680 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelem.X at 0x%04x", D.24607);
        vinfo->info.message = D.24680;
        vinfo->exception_type = 4;
        D.24609 = ctx->list;
        D.24681 = monoeg_g_slist_prepend (D.24609, vinfo);
        ctx->list = D.24681;
      }
      ctx->verifiable = 0;
      D.24622 = ctx->level;
      D.24627 = D.24622 & 16;
      if (D.24627 != 0) goto <D.24682>; else goto <D.24683>;
      <D.24682>:
      ctx->valid = 0;
      <D.24683>:
      <D.24678>:
      <D.24668>:
    }
    <D.24665>:
    D.24684 = verify_type_compatibility_full (ctx, type, candidate, 1);
    if (D.24684 == 0) goto <D.24685>; else goto <D.24686>;
    <D.24685>:
    D.24620 = ctx->verifiable;
    if (D.24620 != 0) goto <D.24687>; else goto <D.24689>;
    <D.24689>:
    D.24622 = ctx->level;
    D.24623 = D.24622 & 128;
    if (D.24623 != 0) goto <D.24687>; else goto <D.24688>;
    <D.24687>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.24607 = ctx->ip_offset;
      D.24690 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelem.X at 0x%04x", D.24607);
      vinfo->info.message = D.24690;
      vinfo->exception_type = 4;
      D.24609 = ctx->list;
      D.24691 = monoeg_g_slist_prepend (D.24609, vinfo);
      ctx->list = D.24691;
    }
    ctx->verifiable = 0;
    D.24622 = ctx->level;
    D.24627 = D.24622 & 16;
    if (D.24627 != 0) goto <D.24692>; else goto <D.24693>;
    <D.24692>:
    ctx->valid = 0;
    <D.24693>:
    <D.24688>:
    <D.24686>:
  }
  <D.24662>:
  <D.24635>:
  <D.24632>:
  D.24694 = stack_push (ctx);
  set_stack_value (ctx, D.24694, type, 0);
}


verifier_load_type (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoMethod * D.24696;
  unsigned int D.24697;
  unsigned int D.24698;
  unsigned int token.115;
  struct MonoType * iftmp.116;
  int D.24710;
  unsigned int D.24711;
  unsigned int D.24712;
  struct MonoImage * D.24714;
  unsigned int token.117;
  int D.24716;
  unsigned int D.24717;
  gchar * D.24718;
  struct GSList * D.24719;
  struct GSList * D.24720;
  struct MonoType * D.24721;
  struct MonoGenericContext * D.24722;
  struct MonoLoaderError * D.24726;
  gchar * D.24727;
  struct GSList * D.24728;
  int D.24729;
  struct MonoType * type;

  D.24696 = ctx->method;
  D.24697 = BIT_FIELD_REF <*D.24696, 32, 160>;
  D.24698 = D.24697 & 124;
  if (D.24698 != 0) goto <D.24699>; else goto <D.24700>;
  <D.24699>:
  {
    struct MonoClass * class;

    D.24696 = ctx->method;
    token.115 = (unsigned int) token;
    class = mono_method_get_wrapper_data (D.24696, token.115);
    if (class != 0B) goto <D.24703>; else goto <D.24704>;
    <D.24703>:
    iftmp.116 = &class->byval_arg;
    goto <D.24705>;
    <D.24704>:
    iftmp.116 = 0B;
    <D.24705>:
    type = iftmp.116;
  }
  goto <D.24706>;
  <D.24700>:
  D.24710 = token >> 24;
  D.24711 = (unsigned int) D.24710;
  D.24712 = D.24711 + 4294967295;
  if (D.24712 > 1) goto <D.24713>; else goto <D.24707>;
  <D.24713>:
  D.24710 = token >> 24;
  if (D.24710 != 27) goto <D.24708>; else goto <D.24707>;
  <D.24707>:
  D.24714 = ctx->image;
  token.117 = (unsigned int) token;
  D.24716 = token_bounds_check (D.24714, token.117);
  if (D.24716 == 0) goto <D.24708>; else goto <D.24709>;
  <D.24708>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24717 = ctx->ip_offset;
    D.24718 = monoeg_g_strdup_printf ("Invalid type token 0x%08x at 0x%04x", token, D.24717);
    vinfo->info.message = D.24718;
    vinfo->exception_type = 12;
    D.24719 = ctx->list;
    D.24720 = monoeg_g_slist_prepend (D.24719, vinfo);
    ctx->list = D.24720;
  }
  ctx->valid = 0;
  D.24721 = 0B;
  return D.24721;
  <D.24709>:
  D.24714 = ctx->image;
  token.117 = (unsigned int) token;
  D.24722 = ctx->generic_context;
  type = mono_type_get_full (D.24714, token.117, D.24722);
  <D.24706>:
  if (type == 0B) goto <D.24723>; else goto <D.24725>;
  <D.24725>:
  D.24726 = mono_loader_get_last_error ();
  if (D.24726 != 0B) goto <D.24723>; else goto <D.24724>;
  <D.24723>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24717 = ctx->ip_offset;
    D.24727 = monoeg_g_strdup_printf ("Cannot load type from token 0x%08x for %s at 0x%04x", token, opcode, D.24717);
    vinfo->info.message = D.24727;
    vinfo->exception_type = 12;
    D.24719 = ctx->list;
    D.24728 = monoeg_g_slist_prepend (D.24719, vinfo);
    ctx->list = D.24728;
  }
  ctx->valid = 0;
  mono_loader_clear_error ();
  D.24721 = 0B;
  return D.24721;
  <D.24724>:
  D.24729 = mono_type_is_valid_in_context (ctx, type);
  if (D.24729 == 0) goto <D.24730>; else goto <D.24731>;
  <D.24730>:
  D.24721 = 0B;
  return D.24721;
  <D.24731>:
  D.24721 = type;
  return D.24721;
}


do_stelem (struct VerifyContext * ctx, int opcode, int token)
{
  int D.24733;
  unsigned int D.24740;
  gchar * D.24741;
  struct GSList * D.24742;
  struct GSList * D.24743;
  int D.24745;
  int D.24748;
  int D.24753;
  int D.24755;
  int D.24756;
  const char * D.24757;
  gchar * D.24758;
  struct GSList * D.24759;
  int D.24760;
  int D.24763;
  int D.24769;
  struct MonoType * D.24771;
  unsigned char D.24772;
  const char * D.24776;
  gchar * D.24777;
  struct GSList * D.24778;
  struct MonoClass * D.24783;
  unsigned int D.24784;
  unsigned int D.24785;
  gchar * D.24791;
  struct GSList * D.24792;
  struct MonoType * D.24796;
  int D.24797;
  gchar * D.24803;
  struct GSList * D.24804;
  int D.24809;
  struct MonoType * D.24812;
  struct MonoClass * D.24813;
  unsigned int D.24814;
  unsigned int D.24815;
  gchar * D.24821;
  struct GSList * D.24822;
  int D.24828;
  gchar * D.24834;
  struct GSList * D.24835;
  int D.24838;
  int D.24841;
  int D.24844;
  gchar * D.24850;
  struct GSList * D.24851;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct ILStackDesc * value;
  struct MonoType * type;

  D.24733 = check_underflow (ctx, 3);
  if (D.24733 == 0) goto <D.24734>; else goto <D.24735>;
  <D.24734>:
  return;
  <D.24735>:
  if (opcode == 164) goto <D.24736>; else goto <D.24737>;
  <D.24736>:
  type = verifier_load_type (ctx, token, "stelem.any");
  if (type == 0B) goto <D.24738>; else goto <D.24739>;
  <D.24738>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24740 = ctx->ip_offset;
    D.24741 = monoeg_g_strdup_printf ("Type (0x%08x) not found at 0x%04x", token, D.24740);
    vinfo->info.message = D.24741;
    vinfo->exception_type = 3;
    D.24742 = ctx->list;
    D.24743 = monoeg_g_slist_prepend (D.24742, vinfo);
    ctx->list = D.24743;
  }
  ctx->valid = 0;
  return;
  <D.24739>:
  goto <D.24744>;
  <D.24737>:
  type = mono_type_from_opcode (opcode);
  <D.24744>:
  value = stack_pop (ctx);
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.24745 = stack_slot_get_type (index);
  if (D.24745 != 1) goto <D.24746>; else goto <D.24747>;
  <D.24746>:
  D.24748 = stack_slot_get_type (index);
  if (D.24748 != 3) goto <D.24749>; else goto <D.24750>;
  <D.24749>:
  D.24753 = ctx->verifiable;
  if (D.24753 != 0) goto <D.24751>; else goto <D.24754>;
  <D.24754>:
  D.24755 = ctx->level;
  D.24756 = D.24755 & 128;
  if (D.24756 != 0) goto <D.24751>; else goto <D.24752>;
  <D.24751>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24757 = stack_slot_get_name (index);
    D.24740 = ctx->ip_offset;
    D.24758 = monoeg_g_strdup_printf ("Index type(%s) for stdelem.X is not an int or a native int at 0x%04x", D.24757, D.24740);
    vinfo->info.message = D.24758;
    vinfo->exception_type = 4;
    D.24742 = ctx->list;
    D.24759 = monoeg_g_slist_prepend (D.24742, vinfo);
    ctx->list = D.24759;
  }
  ctx->verifiable = 0;
  D.24755 = ctx->level;
  D.24760 = D.24755 & 16;
  if (D.24760 != 0) goto <D.24761>; else goto <D.24762>;
  <D.24761>:
  ctx->valid = 0;
  <D.24762>:
  <D.24752>:
  <D.24750>:
  <D.24747>:
  D.24763 = stack_slot_is_null_literal (array);
  if (D.24763 == 0) goto <D.24764>; else goto <D.24765>;
  <D.24764>:
  D.24769 = stack_slot_get_type (array);
  if (D.24769 != 6) goto <D.24766>; else goto <D.24770>;
  <D.24770>:
  D.24771 = array->type;
  D.24772 = D.24771->type;
  if (D.24772 != 29) goto <D.24766>; else goto <D.24767>;
  <D.24766>:
  D.24753 = ctx->verifiable;
  if (D.24753 != 0) goto <D.24773>; else goto <D.24775>;
  <D.24775>:
  D.24755 = ctx->level;
  D.24756 = D.24755 & 128;
  if (D.24756 != 0) goto <D.24773>; else goto <D.24774>;
  <D.24773>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24776 = stack_slot_get_name (array);
    D.24740 = ctx->ip_offset;
    D.24777 = monoeg_g_strdup_printf ("Invalid array type(%s) for stelem.X at 0x%04x", D.24776, D.24740);
    vinfo->info.message = D.24777;
    vinfo->exception_type = 4;
    D.24742 = ctx->list;
    D.24778 = monoeg_g_slist_prepend (D.24742, vinfo);
    ctx->list = D.24778;
  }
  ctx->verifiable = 0;
  D.24755 = ctx->level;
  D.24760 = D.24755 & 16;
  if (D.24760 != 0) goto <D.24779>; else goto <D.24780>;
  <D.24779>:
  ctx->valid = 0;
  <D.24780>:
  <D.24774>:
  goto <D.24768>;
  <D.24767>:
  if (opcode == 162) goto <D.24781>; else goto <D.24782>;
  <D.24781>:
  D.24771 = array->type;
  D.24783 = D.24771->data.klass;
  D.24784 = BIT_FIELD_REF <*D.24783, 32, 160>;
  D.24785 = D.24784 & 8;
  if (D.24785 != 0) goto <D.24786>; else goto <D.24787>;
  <D.24786>:
  D.24753 = ctx->verifiable;
  if (D.24753 != 0) goto <D.24788>; else goto <D.24790>;
  <D.24790>:
  D.24755 = ctx->level;
  D.24756 = D.24755 & 128;
  if (D.24756 != 0) goto <D.24788>; else goto <D.24789>;
  <D.24788>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24740 = ctx->ip_offset;
    D.24791 = monoeg_g_strdup_printf ("Invalid array type is not a reference type for stelem.ref 0x%04x", D.24740);
    vinfo->info.message = D.24791;
    vinfo->exception_type = 4;
    D.24742 = ctx->list;
    D.24792 = monoeg_g_slist_prepend (D.24742, vinfo);
    ctx->list = D.24792;
  }
  ctx->verifiable = 0;
  D.24755 = ctx->level;
  D.24760 = D.24755 & 16;
  if (D.24760 != 0) goto <D.24793>; else goto <D.24794>;
  <D.24793>:
  ctx->valid = 0;
  <D.24794>:
  <D.24789>:
  <D.24787>:
  goto <D.24795>;
  <D.24782>:
  D.24771 = array->type;
  D.24783 = D.24771->data.klass;
  D.24796 = &D.24783->byval_arg;
  D.24797 = verify_type_compatibility_full (ctx, D.24796, type, 1);
  if (D.24797 == 0) goto <D.24798>; else goto <D.24799>;
  <D.24798>:
  D.24753 = ctx->verifiable;
  if (D.24753 != 0) goto <D.24800>; else goto <D.24802>;
  <D.24802>:
  D.24755 = ctx->level;
  D.24756 = D.24755 & 128;
  if (D.24756 != 0) goto <D.24800>; else goto <D.24801>;
  <D.24800>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24740 = ctx->ip_offset;
    D.24803 = monoeg_g_strdup_printf ("Invalid array type on stack for stdelem.X at 0x%04x", D.24740);
    vinfo->info.message = D.24803;
    vinfo->exception_type = 4;
    D.24742 = ctx->list;
    D.24804 = monoeg_g_slist_prepend (D.24742, vinfo);
    ctx->list = D.24804;
  }
  ctx->verifiable = 0;
  D.24755 = ctx->level;
  D.24760 = D.24755 & 16;
  if (D.24760 != 0) goto <D.24805>; else goto <D.24806>;
  <D.24805>:
  ctx->valid = 0;
  <D.24806>:
  <D.24801>:
  <D.24799>:
  <D.24795>:
  <D.24768>:
  <D.24765>:
  if (opcode == 162) goto <D.24807>; else goto <D.24808>;
  <D.24807>:
  D.24809 = stack_slot_is_boxed_value (value);
  if (D.24809 == 0) goto <D.24810>; else goto <D.24811>;
  <D.24810>:
  D.24812 = value->type;
  D.24813 = mono_class_from_mono_type (D.24812);
  D.24814 = BIT_FIELD_REF <*D.24813, 32, 160>;
  D.24815 = D.24814 & 8;
  if (D.24815 != 0) goto <D.24816>; else goto <D.24817>;
  <D.24816>:
  D.24753 = ctx->verifiable;
  if (D.24753 != 0) goto <D.24818>; else goto <D.24820>;
  <D.24820>:
  D.24755 = ctx->level;
  D.24756 = D.24755 & 128;
  if (D.24756 != 0) goto <D.24818>; else goto <D.24819>;
  <D.24818>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24740 = ctx->ip_offset;
    D.24821 = monoeg_g_strdup_printf ("Invalid value is not a reference type for stelem.ref 0x%04x", D.24740);
    vinfo->info.message = D.24821;
    vinfo->exception_type = 4;
    D.24742 = ctx->list;
    D.24822 = monoeg_g_slist_prepend (D.24742, vinfo);
    ctx->list = D.24822;
  }
  ctx->verifiable = 0;
  D.24755 = ctx->level;
  D.24760 = D.24755 & 16;
  if (D.24760 != 0) goto <D.24823>; else goto <D.24824>;
  <D.24823>:
  ctx->valid = 0;
  <D.24824>:
  <D.24819>:
  <D.24817>:
  <D.24811>:
  goto <D.24825>;
  <D.24808>:
  if (opcode != 162) goto <D.24826>; else goto <D.24827>;
  <D.24826>:
  D.24828 = verify_stack_type_compatibility (ctx, type, value);
  if (D.24828 == 0) goto <D.24829>; else goto <D.24830>;
  <D.24829>:
  D.24753 = ctx->verifiable;
  if (D.24753 != 0) goto <D.24831>; else goto <D.24833>;
  <D.24833>:
  D.24755 = ctx->level;
  D.24756 = D.24755 & 128;
  if (D.24756 != 0) goto <D.24831>; else goto <D.24832>;
  <D.24831>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24740 = ctx->ip_offset;
    D.24834 = monoeg_g_strdup_printf ("Invalid value on stack for stdelem.X at 0x%04x", D.24740);
    vinfo->info.message = D.24834;
    vinfo->exception_type = 4;
    D.24742 = ctx->list;
    D.24835 = monoeg_g_slist_prepend (D.24742, vinfo);
    ctx->list = D.24835;
  }
  ctx->verifiable = 0;
  D.24755 = ctx->level;
  D.24760 = D.24755 & 16;
  if (D.24760 != 0) goto <D.24836>; else goto <D.24837>;
  <D.24836>:
  ctx->valid = 0;
  <D.24837>:
  <D.24832>:
  <D.24830>:
  D.24838 = stack_slot_is_boxed_value (value);
  if (D.24838 != 0) goto <D.24839>; else goto <D.24840>;
  <D.24839>:
  D.24812 = value->type;
  D.24841 = mono_type_is_reference (D.24812);
  if (D.24841 == 0) goto <D.24842>; else goto <D.24843>;
  <D.24842>:
  D.24844 = mono_type_is_reference (type);
  if (D.24844 == 0) goto <D.24845>; else goto <D.24846>;
  <D.24845>:
  D.24753 = ctx->verifiable;
  if (D.24753 != 0) goto <D.24847>; else goto <D.24849>;
  <D.24849>:
  D.24755 = ctx->level;
  D.24756 = D.24755 & 128;
  if (D.24756 != 0) goto <D.24847>; else goto <D.24848>;
  <D.24847>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24740 = ctx->ip_offset;
    D.24850 = monoeg_g_strdup_printf ("Cannot use stobj with a boxed source value that is not a reference type at 0x%04x", D.24740);
    vinfo->info.message = D.24850;
    vinfo->exception_type = 4;
    D.24742 = ctx->list;
    D.24851 = monoeg_g_slist_prepend (D.24742, vinfo);
    ctx->list = D.24851;
  }
  ctx->verifiable = 0;
  D.24755 = ctx->level;
  D.24760 = D.24755 & 16;
  if (D.24760 != 0) goto <D.24852>; else goto <D.24853>;
  <D.24852>:
  ctx->valid = 0;
  <D.24853>:
  <D.24848>:
  <D.24846>:
  <D.24843>:
  <D.24840>:
  <D.24827>:
  <D.24825>:
}


do_unbox_any (struct VerifyContext * ctx, int klass_token)
{
  int D.24857;
  int D.24862;
  int D.24864;
  struct MonoType * D.24866;
  struct MonoClass * D.24867;
  unsigned int D.24868;
  unsigned int D.24869;
  int D.24872;
  int D.24874;
  int D.24875;
  const char * D.24876;
  unsigned int D.24877;
  gchar * D.24878;
  struct GSList * D.24879;
  struct GSList * D.24880;
  int D.24881;
  struct ILStackDesc * D.24884;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, klass_token, "unbox.any");
  if (type == 0B) goto <D.24855>; else goto <D.24856>;
  <D.24855>:
  return;
  <D.24856>:
  D.24857 = check_underflow (ctx, 1);
  if (D.24857 == 0) goto <D.24858>; else goto <D.24859>;
  <D.24858>:
  return;
  <D.24859>:
  value = stack_pop (ctx);
  D.24862 = stack_slot_get_type (value);
  if (D.24862 != 6) goto <D.24860>; else goto <D.24863>;
  <D.24863>:
  D.24864 = stack_slot_is_boxed_value (value);
  if (D.24864 == 0) goto <D.24865>; else goto <D.24861>;
  <D.24865>:
  D.24866 = value->type;
  D.24867 = mono_class_from_mono_type (D.24866);
  D.24868 = BIT_FIELD_REF <*D.24867, 32, 160>;
  D.24869 = D.24868 & 8;
  if (D.24869 != 0) goto <D.24860>; else goto <D.24861>;
  <D.24860>:
  D.24872 = ctx->verifiable;
  if (D.24872 != 0) goto <D.24870>; else goto <D.24873>;
  <D.24873>:
  D.24874 = ctx->level;
  D.24875 = D.24874 & 128;
  if (D.24875 != 0) goto <D.24870>; else goto <D.24871>;
  <D.24870>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24876 = stack_slot_get_name (value);
    D.24877 = ctx->ip_offset;
    D.24878 = monoeg_g_strdup_printf ("Invalid type %s at stack for unbox.any operation at 0x%04x", D.24876, D.24877);
    vinfo->info.message = D.24878;
    vinfo->exception_type = 4;
    D.24879 = ctx->list;
    D.24880 = monoeg_g_slist_prepend (D.24879, vinfo);
    ctx->list = D.24880;
  }
  ctx->verifiable = 0;
  D.24874 = ctx->level;
  D.24881 = D.24874 & 16;
  if (D.24881 != 0) goto <D.24882>; else goto <D.24883>;
  <D.24882>:
  ctx->valid = 0;
  <D.24883>:
  <D.24871>:
  <D.24861>:
  D.24884 = stack_push (ctx);
  set_stack_value (ctx, D.24884, type, 0);
}


do_conversion (struct VerifyContext * ctx, int kind)
{
  int D.24886;
  int D.24889;
  int D.24892;
  int D.24894;
  int D.24895;
  const char * D.24896;
  unsigned int D.24897;
  gchar * D.24898;
  struct GSList * D.24899;
  struct GSList * D.24900;
  int D.24901;
  struct MonoClass * D.24904;
  struct MonoType * D.24905;
  struct MonoClass * D.24906;
  struct MonoType * D.24907;
  struct MonoClass * D.24908;
  struct MonoType * D.24909;
  struct MonoClass * D.24910;
  struct MonoType * D.24911;
  struct ILStackDesc * value;

  D.24886 = check_underflow (ctx, 1);
  if (D.24886 == 0) goto <D.24887>; else goto <D.24888>;
  <D.24887>:
  return;
  <D.24888>:
  value = stack_pop (ctx);
  D.24889 = stack_slot_get_type (value);
  switch (D.24889) <default: <D.18580>, case 1: <D.18575>, case 2: <D.18576>, case 3: <D.18577>, case 4: <D.18578>>
  <D.18575>:
  <D.18576>:
  <D.18577>:
  <D.18578>:
  goto <D.18579>;
  <D.18580>:
  D.24892 = ctx->verifiable;
  if (D.24892 != 0) goto <D.24890>; else goto <D.24893>;
  <D.24893>:
  D.24894 = ctx->level;
  D.24895 = D.24894 & 128;
  if (D.24895 != 0) goto <D.24890>; else goto <D.24891>;
  <D.24890>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24896 = stack_slot_get_name (value);
    D.24897 = ctx->ip_offset;
    D.24898 = monoeg_g_strdup_printf ("Invalid type (%s) at stack for conversion operation. Numeric type expected at 0x%04x", D.24896, D.24897);
    vinfo->info.message = D.24898;
    vinfo->exception_type = 4;
    D.24899 = ctx->list;
    D.24900 = monoeg_g_slist_prepend (D.24899, vinfo);
    ctx->list = D.24900;
  }
  ctx->verifiable = 0;
  D.24894 = ctx->level;
  D.24901 = D.24894 & 16;
  if (D.24901 != 0) goto <D.24902>; else goto <D.24903>;
  <D.24902>:
  ctx->valid = 0;
  <D.24903>:
  <D.24891>:
  <D.18579>:
  switch (kind) <default: <D.18587>, case 1: <D.18582>, case 2: <D.18584>, case 3: <D.18586>, case 4: <D.18585>>
  <D.18582>:
  D.24904 = mono_defaults.int32_class;
  D.24905 = &D.24904->byval_arg;
  stack_push_val (ctx, 1, D.24905);
  goto <D.18583>;
  <D.18584>:
  D.24906 = mono_defaults.int64_class;
  D.24907 = &D.24906->byval_arg;
  stack_push_val (ctx, 2, D.24907);
  goto <D.18583>;
  <D.18585>:
  D.24908 = mono_defaults.double_class;
  D.24909 = &D.24908->byval_arg;
  stack_push_val (ctx, 4, D.24909);
  goto <D.18583>;
  <D.18586>:
  D.24910 = mono_defaults.int_class;
  D.24911 = &D.24910->byval_arg;
  stack_push_val (ctx, 3, D.24911);
  goto <D.18583>;
  <D.18587>:
  monoeg_g_log (0B, 4, "unknown type %02x in conversion", kind);
  <D.18588>:
  goto <D.18588>;
  <D.18583>:
}


do_refanyval (struct VerifyContext * ctx, int token)
{
  int D.24914;
  int D.24921;
  struct MonoType * D.24923;
  unsigned char D.24924;
  const char * D.24925;
  unsigned int D.24926;
  gchar * D.24927;
  struct GSList * D.24928;
  struct GSList * D.24929;
  struct ILStackDesc * D.24930;
  struct ILStackDesc * top;
  struct MonoType * type;

  D.24914 = check_underflow (ctx, 1);
  if (D.24914 == 0) goto <D.24915>; else goto <D.24916>;
  <D.24915>:
  return;
  <D.24916>:
  type = get_boxable_mono_type (ctx, token, "refanyval");
  if (type == 0B) goto <D.24917>; else goto <D.24918>;
  <D.24917>:
  return;
  <D.24918>:
  top = stack_pop (ctx);
  D.24921 = top->stype;
  if (D.24921 != 5) goto <D.24919>; else goto <D.24922>;
  <D.24922>:
  D.24923 = top->type;
  D.24924 = D.24923->type;
  if (D.24924 != 22) goto <D.24919>; else goto <D.24920>;
  <D.24919>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24925 = stack_slot_get_name (top);
    D.24926 = ctx->ip_offset;
    D.24927 = monoeg_g_strdup_printf ("Expected a typedref as argument for refanyval, but found %s at 0x%04x", D.24925, D.24926);
    vinfo->info.message = D.24927;
    vinfo->exception_type = 3;
    D.24928 = ctx->list;
    D.24929 = monoeg_g_slist_prepend (D.24928, vinfo);
    ctx->list = D.24929;
  }
  ctx->valid = 0;
  <D.24920>:
  D.24930 = stack_push (ctx);
  set_stack_value (ctx, D.24930, type, 1);
}


do_ckfinite (struct VerifyContext * ctx)
{
  int D.24932;
  int D.24935;
  const char * D.24938;
  unsigned int D.24939;
  gchar * D.24940;
  struct GSList * D.24941;
  struct GSList * D.24942;
  struct ILStackDesc * top;

  D.24932 = check_underflow (ctx, 1);
  if (D.24932 == 0) goto <D.24933>; else goto <D.24934>;
  <D.24933>:
  return;
  <D.24934>:
  top = stack_pop (ctx);
  D.24935 = stack_slot_get_underlying_type (top);
  if (D.24935 != 4) goto <D.24936>; else goto <D.24937>;
  <D.24936>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24938 = stack_slot_get_name (top);
    D.24939 = ctx->ip_offset;
    D.24940 = monoeg_g_strdup_printf ("Expected float32 or float64 on stack for ckfinit but found %s at 0x%04x", D.24938, D.24939);
    vinfo->info.message = D.24940;
    vinfo->exception_type = 3;
    D.24941 = ctx->list;
    D.24942 = monoeg_g_slist_prepend (D.24941, vinfo);
    ctx->list = D.24942;
  }
  ctx->valid = 0;
  <D.24937>:
  stack_push_stack_val (ctx, top);
}


do_mkrefany (struct VerifyContext * ctx, int token)
{
  int D.24944;
  int D.24949;
  int D.24954;
  int D.24956;
  int D.24957;
  unsigned int D.24958;
  gchar * D.24959;
  struct GSList * D.24960;
  struct GSList * D.24961;
  int D.24962;
  int D.24965;
  const char * D.24971;
  gchar * D.24972;
  struct GSList * D.24973;
  struct MonoType * D.24977;
  int D.24978;
  int D.24981;
  gchar * D.24987;
  struct GSList * D.24988;
  int D.24991;
  int D.24994;
  gchar * D.25000;
  struct GSList * D.25001;
  struct ILStackDesc * D.25004;
  struct MonoClass * D.25005;
  struct MonoType * D.25006;
  struct ILStackDesc * top;
  struct MonoType * type;

  D.24944 = check_underflow (ctx, 1);
  if (D.24944 == 0) goto <D.24945>; else goto <D.24946>;
  <D.24945>:
  return;
  <D.24946>:
  type = get_boxable_mono_type (ctx, token, "refanyval");
  if (type == 0B) goto <D.24947>; else goto <D.24948>;
  <D.24947>:
  return;
  <D.24948>:
  top = stack_pop (ctx);
  D.24949 = stack_slot_is_managed_mutability_pointer (top);
  if (D.24949 != 0) goto <D.24950>; else goto <D.24951>;
  <D.24950>:
  D.24954 = ctx->verifiable;
  if (D.24954 != 0) goto <D.24952>; else goto <D.24955>;
  <D.24955>:
  D.24956 = ctx->level;
  D.24957 = D.24956 & 128;
  if (D.24957 != 0) goto <D.24952>; else goto <D.24953>;
  <D.24952>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24958 = ctx->ip_offset;
    D.24959 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with mkrefany at 0x%04x", D.24958);
    vinfo->info.message = D.24959;
    vinfo->exception_type = 4;
    D.24960 = ctx->list;
    D.24961 = monoeg_g_slist_prepend (D.24960, vinfo);
    ctx->list = D.24961;
  }
  ctx->verifiable = 0;
  D.24956 = ctx->level;
  D.24962 = D.24956 & 16;
  if (D.24962 != 0) goto <D.24963>; else goto <D.24964>;
  <D.24963>:
  ctx->valid = 0;
  <D.24964>:
  <D.24953>:
  <D.24951>:
  D.24965 = stack_slot_is_managed_pointer (top);
  if (D.24965 == 0) goto <D.24966>; else goto <D.24967>;
  <D.24966>:
  D.24954 = ctx->verifiable;
  if (D.24954 != 0) goto <D.24968>; else goto <D.24970>;
  <D.24970>:
  D.24956 = ctx->level;
  D.24957 = D.24956 & 128;
  if (D.24957 != 0) goto <D.24968>; else goto <D.24969>;
  <D.24968>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24971 = stack_slot_get_name (top);
    D.24958 = ctx->ip_offset;
    D.24972 = monoeg_g_strdup_printf ("Expected a managed pointer for mkrefany, but found %s at 0x%04x", D.24971, D.24958);
    vinfo->info.message = D.24972;
    vinfo->exception_type = 4;
    D.24960 = ctx->list;
    D.24973 = monoeg_g_slist_prepend (D.24960, vinfo);
    ctx->list = D.24973;
  }
  ctx->verifiable = 0;
  D.24956 = ctx->level;
  D.24962 = D.24956 & 16;
  if (D.24962 != 0) goto <D.24974>; else goto <D.24975>;
  <D.24974>:
  ctx->valid = 0;
  <D.24975>:
  <D.24969>:
  goto <D.24976>;
  <D.24967>:
  {
    struct MonoType * stack_type;

    D.24977 = top->type;
    stack_type = mono_type_get_type_byval (D.24977);
    D.24978 = mono_type_is_reference (type);
    if (D.24978 != 0) goto <D.24979>; else goto <D.24980>;
    <D.24979>:
    D.24981 = mono_metadata_type_equal (type, stack_type);
    if (D.24981 == 0) goto <D.24982>; else goto <D.24983>;
    <D.24982>:
    D.24954 = ctx->verifiable;
    if (D.24954 != 0) goto <D.24984>; else goto <D.24986>;
    <D.24986>:
    D.24956 = ctx->level;
    D.24957 = D.24956 & 128;
    if (D.24957 != 0) goto <D.24984>; else goto <D.24985>;
    <D.24984>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.24958 = ctx->ip_offset;
      D.24987 = monoeg_g_strdup_printf ("Type not compatible for mkrefany at 0x%04x", D.24958);
      vinfo->info.message = D.24987;
      vinfo->exception_type = 4;
      D.24960 = ctx->list;
      D.24988 = monoeg_g_slist_prepend (D.24960, vinfo);
      ctx->list = D.24988;
    }
    ctx->verifiable = 0;
    D.24956 = ctx->level;
    D.24962 = D.24956 & 16;
    if (D.24962 != 0) goto <D.24989>; else goto <D.24990>;
    <D.24989>:
    ctx->valid = 0;
    <D.24990>:
    <D.24985>:
    <D.24983>:
    <D.24980>:
    D.24991 = mono_type_is_reference (type);
    if (D.24991 == 0) goto <D.24992>; else goto <D.24993>;
    <D.24992>:
    D.24994 = verify_type_compatibility_full (ctx, type, stack_type, 1);
    if (D.24994 == 0) goto <D.24995>; else goto <D.24996>;
    <D.24995>:
    D.24954 = ctx->verifiable;
    if (D.24954 != 0) goto <D.24997>; else goto <D.24999>;
    <D.24999>:
    D.24956 = ctx->level;
    D.24957 = D.24956 & 128;
    if (D.24957 != 0) goto <D.24997>; else goto <D.24998>;
    <D.24997>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.24958 = ctx->ip_offset;
      D.25000 = monoeg_g_strdup_printf ("Type not compatible for mkrefany at 0x%04x", D.24958);
      vinfo->info.message = D.25000;
      vinfo->exception_type = 4;
      D.24960 = ctx->list;
      D.25001 = monoeg_g_slist_prepend (D.24960, vinfo);
      ctx->list = D.25001;
    }
    ctx->verifiable = 0;
    D.24956 = ctx->level;
    D.24962 = D.24956 & 16;
    if (D.24962 != 0) goto <D.25002>; else goto <D.25003>;
    <D.25002>:
    ctx->valid = 0;
    <D.25003>:
    <D.24998>:
    <D.24996>:
    <D.24993>:
  }
  <D.24976>:
  D.25004 = stack_push (ctx);
  D.25005 = mono_defaults.typed_reference_class;
  D.25006 = &D.25005->byval_arg;
  set_stack_value (ctx, D.25004, D.25006, 0);
}


do_load_token (struct VerifyContext * ctx, int token)
{
  int D.25008;
  struct MonoMethod * D.25011;
  unsigned int D.25012;
  unsigned int D.25013;
  unsigned int token.118;
  int D.25017;
  unsigned int D.25018;
  void * handle_class.119;
  struct MonoClass * D.25020;
  struct MonoClass * handle_class.120;
  unsigned int token.121;
  unsigned int D.25026;
  struct MonoImage * D.25027;
  int D.25028;
  int D.25031;
  unsigned int D.25032;
  gchar * D.25033;
  struct GSList * D.25034;
  struct GSList * D.25035;
  int D.25036;
  gchar * D.25037;
  struct GSList * D.25038;
  unsigned int token.122;
  struct MonoGenericContext * D.25040;
  gchar * D.25043;
  struct GSList * D.25044;
  struct MonoClass * D.25048;
  struct MonoClass * D.25052;
  struct MonoClass * D.25055;
  struct MonoType * D.25056;
  gchar * D.25058;
  struct GSList * D.25059;
  struct MonoType * D.25060;
  void * handle;
  struct MonoClass * handle_class;

  try
    {
      D.25008 = check_overflow (ctx);
      if (D.25008 == 0) goto <D.25009>; else goto <D.25010>;
      <D.25009>:
      return;
      <D.25010>:
      D.25011 = ctx->method;
      D.25012 = BIT_FIELD_REF <*D.25011, 32, 160>;
      D.25013 = D.25012 & 124;
      if (D.25013 != 0) goto <D.25014>; else goto <D.25015>;
      <D.25014>:
      D.25011 = ctx->method;
      token.118 = (unsigned int) token;
      handle = mono_method_get_wrapper_data (D.25011, token.118);
      D.25011 = ctx->method;
      D.25017 = token + 1;
      D.25018 = (unsigned int) D.25017;
      handle_class.119 = mono_method_get_wrapper_data (D.25011, D.25018);
      handle_class = handle_class.119;
      D.25020 = mono_defaults.typehandle_class;
      handle_class.120 = handle_class;
      if (D.25020 == handle_class.120) goto <D.25022>; else goto <D.25023>;
      <D.25022>:
      handle = &MEM[(struct MonoClass *)handle].byval_arg;
      <D.25023>:
      goto <D.25024>;
      <D.25015>:
      token.121 = (unsigned int) token;
      D.25026 = token.121 & 4278190080;
      switch (D.25026) <default: <D.18604>, case 16777216: <D.18596>, case 33554432: <D.18595>, case 67108864: <D.18598>, case 100663296: <D.18599>, case 167772160: <D.18601>, case 452984832: <D.18597>, case 721420288: <D.18600>>
      <D.18595>:
      <D.18596>:
      <D.18597>:
      <D.18598>:
      <D.18599>:
      <D.18600>:
      <D.18601>:
      D.25027 = ctx->image;
      token.118 = (unsigned int) token;
      D.25028 = token_bounds_check (D.25027, token.118);
      if (D.25028 == 0) goto <D.25029>; else goto <D.25030>;
      <D.25029>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.25031 = token & 16777215;
        D.25032 = ctx->ip_offset;
        D.25033 = monoeg_g_strdup_printf ("Table index out of range 0x%x for token %x for ldtoken at 0x%04x", D.25031, token, D.25032);
        vinfo->info.message = D.25033;
        vinfo->exception_type = 3;
        D.25034 = ctx->list;
        D.25035 = monoeg_g_slist_prepend (D.25034, vinfo);
        ctx->list = D.25035;
      }
      ctx->valid = 0;
      return;
      <D.25030>:
      goto <D.18603>;
      <D.18604>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.25036 = token >> 24;
        D.25032 = ctx->ip_offset;
        D.25037 = monoeg_g_strdup_printf ("Invalid table 0x%x for token 0x%x for ldtoken at 0x%04x", D.25036, token, D.25032);
        vinfo->info.message = D.25037;
        vinfo->exception_type = 3;
        D.25034 = ctx->list;
        D.25038 = monoeg_g_slist_prepend (D.25034, vinfo);
        ctx->list = D.25038;
      }
      ctx->valid = 0;
      return;
      <D.18603>:
      D.25027 = ctx->image;
      token.122 = (unsigned int) token;
      D.25040 = ctx->generic_context;
      handle = mono_ldtoken (D.25027, token.122, &handle_class, D.25040);
      <D.25024>:
      if (handle == 0B) goto <D.25041>; else goto <D.25042>;
      <D.25041>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.25032 = ctx->ip_offset;
        D.25043 = monoeg_g_strdup_printf ("Invalid token 0x%x for ldtoken at 0x%04x", token, D.25032);
        vinfo->info.message = D.25043;
        vinfo->exception_type = 3;
        D.25034 = ctx->list;
        D.25044 = monoeg_g_slist_prepend (D.25034, vinfo);
        ctx->list = D.25044;
      }
      ctx->valid = 0;
      return;
      <D.25042>:
      D.25020 = mono_defaults.typehandle_class;
      handle_class.120 = handle_class;
      if (D.25020 == handle_class.120) goto <D.25045>; else goto <D.25046>;
      <D.25045>:
      mono_type_is_valid_in_context (ctx, handle);
      goto <D.25047>;
      <D.25046>:
      D.25048 = mono_defaults.methodhandle_class;
      handle_class.120 = handle_class;
      if (D.25048 == handle_class.120) goto <D.25049>; else goto <D.25050>;
      <D.25049>:
      mono_method_is_valid_in_context (ctx, handle);
      goto <D.25051>;
      <D.25050>:
      D.25052 = mono_defaults.fieldhandle_class;
      handle_class.120 = handle_class;
      if (D.25052 == handle_class.120) goto <D.25053>; else goto <D.25054>;
      <D.25053>:
      D.25055 = MEM[(struct MonoClassField *)handle].parent;
      D.25056 = &D.25055->byval_arg;
      mono_type_is_valid_in_context (ctx, D.25056);
      goto <D.25057>;
      <D.25054>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.25032 = ctx->ip_offset;
        D.25058 = monoeg_g_strdup_printf ("Invalid ldtoken type %x at 0x%04x", token, D.25032);
        vinfo->info.message = D.25058;
        vinfo->exception_type = 12;
        D.25034 = ctx->list;
        D.25059 = monoeg_g_slist_prepend (D.25034, vinfo);
        ctx->list = D.25059;
      }
      ctx->valid = 0;
      <D.25057>:
      <D.25051>:
      <D.25047>:
      handle_class.120 = handle_class;
      D.25060 = mono_class_get_type (handle_class.120);
      stack_push_val (ctx, 6, D.25060);
    }
  finally
    {
      handle_class = {CLOBBER};
    }
}


is_correct_endfinally (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.25064;
  unsigned int i.123;
  unsigned int D.25066;
  unsigned int D.25069;
  unsigned int D.25072;
  unsigned int D.25073;
  unsigned int D.25076;
  int D.25078;
  <unnamed-unsigned:15> D.25079;
  int D.25080;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17848>;
  <D.17847>:
  D.25064 = header->clauses;
  i.123 = (unsigned int) i;
  D.25066 = i.123 * 24;
  clause = D.25064 + D.25066;
  D.25069 = clause->handler_offset;
  if (D.25069 <= offset) goto <D.25070>; else goto <D.25071>;
  <D.25070>:
  D.25069 = clause->handler_offset;
  D.25072 = clause->handler_len;
  D.25073 = D.25069 + D.25072;
  if (D.25073 > offset) goto <D.25074>; else goto <D.25075>;
  <D.25074>:
  D.25076 = clause->flags;
  if (D.25076 == 4) goto <D.25067>; else goto <D.25077>;
  <D.25077>:
  D.25076 = clause->flags;
  if (D.25076 == 2) goto <D.25067>; else goto <D.25068>;
  <D.25067>:
  D.25078 = 1;
  return D.25078;
  <D.25068>:
  <D.25075>:
  <D.25071>:
  i = i + 1;
  <D.17848>:
  D.25079 = header->num_clauses;
  D.25080 = (int) D.25079;
  if (D.25080 > i) goto <D.17847>; else goto <D.17849>;
  <D.17849>:
  D.25078 = 0;
  return D.25078;
}


do_leave (struct VerifyContext * ctx, int delta)
{
  unsigned int D.25082;
  int D.25083;
  int D.25086;
  gchar * D.25088;
  struct GSList * D.25089;
  struct GSList * D.25090;
  struct MonoMethodHeader * D.25091;
  unsigned int target.124;
  int D.25093;
  int D.25098;
  int D.25100;
  int D.25101;
  gchar * D.25102;
  struct GSList * D.25103;
  int D.25104;
  int target;

  D.25082 = ctx->ip_offset;
  D.25083 = (int) D.25082;
  target = D.25083 + delta;
  D.25086 = ctx->code_size;
  if (D.25086 <= target) goto <D.25084>; else goto <D.25087>;
  <D.25087>:
  if (target < 0) goto <D.25084>; else goto <D.25085>;
  <D.25084>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25082 = ctx->ip_offset;
    D.25088 = monoeg_g_strdup_printf ("Branch target out of code at 0x%04x", D.25082);
    vinfo->info.message = D.25088;
    vinfo->exception_type = 3;
    D.25089 = ctx->list;
    D.25090 = monoeg_g_slist_prepend (D.25089, vinfo);
    ctx->list = D.25090;
  }
  ctx->valid = 0;
  <D.25085>:
  D.25091 = ctx->header;
  D.25082 = ctx->ip_offset;
  target.124 = (unsigned int) target;
  D.25093 = is_correct_leave (D.25091, D.25082, target.124);
  if (D.25093 == 0) goto <D.25094>; else goto <D.25095>;
  <D.25094>:
  D.25098 = ctx->verifiable;
  if (D.25098 != 0) goto <D.25096>; else goto <D.25099>;
  <D.25099>:
  D.25100 = ctx->level;
  D.25101 = D.25100 & 128;
  if (D.25101 != 0) goto <D.25096>; else goto <D.25097>;
  <D.25096>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25082 = ctx->ip_offset;
    D.25102 = monoeg_g_strdup_printf ("Leave not allowed in finally block at 0x%04x", D.25082);
    vinfo->info.message = D.25102;
    vinfo->exception_type = 4;
    D.25089 = ctx->list;
    D.25103 = monoeg_g_slist_prepend (D.25089, vinfo);
    ctx->list = D.25103;
  }
  ctx->verifiable = 0;
  D.25100 = ctx->level;
  D.25104 = D.25100 & 16;
  if (D.25104 != 0) goto <D.25105>; else goto <D.25106>;
  <D.25105>:
  ctx->valid = 0;
  <D.25106>:
  <D.25097>:
  <D.25095>:
  ctx->eval.size = 0;
  ctx->target = target;
}


is_correct_leave (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.25107;
  unsigned int i.125;
  unsigned int D.25109;
  unsigned int D.25112;
  unsigned int D.25115;
  unsigned int D.25118;
  unsigned int D.25119;
  int D.25123;
  unsigned int D.25126;
  <unnamed-unsigned:15> D.25131;
  int D.25132;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17830>;
  <D.17829>:
  D.25107 = header->clauses;
  i.125 = (unsigned int) i;
  D.25109 = i.125 * 24;
  clause = D.25107 + D.25109;
  D.25112 = clause->flags;
  if (D.25112 == 2) goto <D.25113>; else goto <D.25114>;
  <D.25113>:
  D.25115 = clause->handler_offset;
  if (D.25115 <= offset) goto <D.25116>; else goto <D.25117>;
  <D.25116>:
  D.25115 = clause->handler_offset;
  D.25118 = clause->handler_len;
  D.25119 = D.25115 + D.25118;
  if (D.25119 > offset) goto <D.25120>; else goto <D.25121>;
  <D.25120>:
  D.25115 = clause->handler_offset;
  if (D.25115 > target) goto <D.25110>; else goto <D.25122>;
  <D.25122>:
  D.25115 = clause->handler_offset;
  D.25118 = clause->handler_len;
  D.25119 = D.25115 + D.25118;
  if (D.25119 <= target) goto <D.25110>; else goto <D.25111>;
  <D.25110>:
  D.25123 = 0;
  return D.25123;
  <D.25111>:
  <D.25121>:
  <D.25117>:
  <D.25114>:
  D.25112 = clause->flags;
  if (D.25112 == 1) goto <D.25124>; else goto <D.25125>;
  <D.25124>:
  D.25126 = clause->data.filter_offset;
  if (D.25126 <= offset) goto <D.25127>; else goto <D.25128>;
  <D.25127>:
  D.25115 = clause->handler_offset;
  if (D.25115 > offset) goto <D.25129>; else goto <D.25130>;
  <D.25129>:
  D.25123 = 0;
  return D.25123;
  <D.25130>:
  <D.25128>:
  <D.25125>:
  i = i + 1;
  <D.17830>:
  D.25131 = header->num_clauses;
  D.25132 = (int) D.25131;
  if (D.25132 > i) goto <D.17829>; else goto <D.17831>;
  <D.17831>:
  D.25123 = 1;
  return D.25123;
}


store_local (struct VerifyContext * ctx, guint32 arg)
{
  int D.25134;
  unsigned int D.25135;
  unsigned int D.25138;
  unsigned int D.25139;
  gchar * D.25140;
  struct GSList * D.25141;
  struct GSList * D.25142;
  int D.25143;
  struct MonoType * * D.25146;
  unsigned int D.25147;
  struct MonoType * * D.25148;
  struct MonoType * D.25149;
  unsigned int D.25150;
  unsigned int D.25151;
  int D.25154;
  int D.25159;
  int D.25161;
  int D.25162;
  gchar * D.25163;
  struct GSList * D.25164;
  int D.25165;
  int D.25168;
  gchar * D.25174;
  struct GSList * D.25175;
  struct ILStackDesc * value;

  D.25134 = ctx->num_locals;
  D.25135 = (unsigned int) D.25134;
  if (D.25135 <= arg) goto <D.25136>; else goto <D.25137>;
  <D.25136>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25138 = arg + 1;
    D.25139 = ctx->ip_offset;
    D.25140 = monoeg_g_strdup_printf ("Method doesn\'t have local var %d at 0x%04x", D.25138, D.25139);
    vinfo->info.message = D.25140;
    vinfo->exception_type = 3;
    D.25141 = ctx->list;
    D.25142 = monoeg_g_slist_prepend (D.25141, vinfo);
    ctx->list = D.25142;
  }
  ctx->valid = 0;
  return;
  <D.25137>:
  D.25143 = check_underflow (ctx, 1);
  if (D.25143 == 0) goto <D.25144>; else goto <D.25145>;
  <D.25144>:
  return;
  <D.25145>:
  value = stack_pop (ctx);
  D.25146 = ctx->locals;
  D.25147 = arg * 4;
  D.25148 = D.25146 + D.25147;
  D.25149 = *D.25148;
  D.25150 = BIT_FIELD_REF <*D.25149, 32, 32>;
  D.25151 = D.25150 & 1073741824;
  if (D.25151 != 0) goto <D.25152>; else goto <D.25153>;
  <D.25152>:
  D.25154 = stack_slot_is_managed_mutability_pointer (value);
  if (D.25154 != 0) goto <D.25155>; else goto <D.25156>;
  <D.25155>:
  D.25159 = ctx->verifiable;
  if (D.25159 != 0) goto <D.25157>; else goto <D.25160>;
  <D.25160>:
  D.25161 = ctx->level;
  D.25162 = D.25161 & 128;
  if (D.25162 != 0) goto <D.25157>; else goto <D.25158>;
  <D.25157>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25139 = ctx->ip_offset;
    D.25163 = monoeg_g_strdup_printf ("Cannot use a readonly managed reference when storing on a local variable at 0x%04x", D.25139);
    vinfo->info.message = D.25163;
    vinfo->exception_type = 4;
    D.25141 = ctx->list;
    D.25164 = monoeg_g_slist_prepend (D.25141, vinfo);
    ctx->list = D.25164;
  }
  ctx->verifiable = 0;
  D.25161 = ctx->level;
  D.25165 = D.25161 & 16;
  if (D.25165 != 0) goto <D.25166>; else goto <D.25167>;
  <D.25166>:
  ctx->valid = 0;
  <D.25167>:
  <D.25158>:
  <D.25156>:
  <D.25153>:
  D.25146 = ctx->locals;
  D.25147 = arg * 4;
  D.25148 = D.25146 + D.25147;
  D.25149 = *D.25148;
  D.25168 = verify_stack_type_compatibility (ctx, D.25149, value);
  if (D.25168 == 0) goto <D.25169>; else goto <D.25170>;
  <D.25169>:
  {
    char * expected;
    char * found;

    D.25146 = ctx->locals;
    D.25147 = arg * 4;
    D.25148 = D.25146 + D.25147;
    D.25149 = *D.25148;
    expected = mono_type_full_name (D.25149);
    found = stack_slot_full_name (value);
    D.25159 = ctx->verifiable;
    if (D.25159 != 0) goto <D.25171>; else goto <D.25173>;
    <D.25173>:
    D.25161 = ctx->level;
    D.25162 = D.25161 & 128;
    if (D.25162 != 0) goto <D.25171>; else goto <D.25172>;
    <D.25171>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.25139 = ctx->ip_offset;
      D.25174 = 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.25139);
      vinfo->info.message = D.25174;
      vinfo->exception_type = 4;
      D.25141 = ctx->list;
      D.25175 = monoeg_g_slist_prepend (D.25141, vinfo);
      ctx->list = D.25175;
    }
    ctx->verifiable = 0;
    D.25161 = ctx->level;
    D.25165 = D.25161 & 16;
    if (D.25165 != 0) goto <D.25176>; else goto <D.25177>;
    <D.25176>:
    ctx->valid = 0;
    <D.25177>:
    <D.25172>:
    monoeg_g_free (expected);
    monoeg_g_free (found);
  }
  <D.25170>:
}


do_cmp_op (struct VerifyContext * ctx, const unsigned char[6] * table, guint32 opcode)
{
  int D.25179;
  int D.25184;
  int D.25187;
  struct MonoClass * D.25190;
  struct MonoType * D.25191;
  int D.25192;
  int D.25195;
  int D.25201;
  int D.25203;
  unsigned int idxa.126;
  unsigned int D.25205;
  const unsigned char[6] * D.25206;
  int D.25211;
  int D.25213;
  int D.25214;
  const char * D.25215;
  const char * D.25216;
  unsigned int D.25217;
  gchar * D.25218;
  struct GSList * D.25219;
  struct GSList * D.25220;
  int D.25221;
  signed char res.127;
  const char * D.25231;
  const char * D.25232;
  gchar * D.25233;
  struct GSList * D.25234;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  int idxa;
  int idxb;
  unsigned char res;

  D.25179 = check_underflow (ctx, 2);
  if (D.25179 == 0) goto <D.25180>; else goto <D.25181>;
  <D.25180>:
  return;
  <D.25181>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  if (opcode == 3) goto <D.25182>; else goto <D.25183>;
  <D.25182>:
  D.25184 = stack_slot_get_type (a);
  if (D.25184 == 6) goto <D.25185>; else goto <D.25186>;
  <D.25185>:
  D.25187 = stack_slot_get_type (b);
  if (D.25187 == 6) goto <D.25188>; else goto <D.25189>;
  <D.25188>:
  D.25190 = mono_defaults.int32_class;
  D.25191 = &D.25190->byval_arg;
  stack_push_val (ctx, 1, D.25191);
  return;
  <D.25189>:
  <D.25186>:
  <D.25183>:
  idxa = stack_slot_get_underlying_type (a);
  D.25192 = stack_slot_is_managed_pointer (a);
  if (D.25192 != 0) goto <D.25193>; else goto <D.25194>;
  <D.25193>:
  idxa = 5;
  <D.25194>:
  idxb = stack_slot_get_underlying_type (b);
  D.25195 = stack_slot_is_managed_pointer (b);
  if (D.25195 != 0) goto <D.25196>; else goto <D.25197>;
  <D.25196>:
  idxb = 5;
  <D.25197>:
  D.25201 = stack_slot_is_complex_type_not_reference_type (a);
  if (D.25201 != 0) goto <D.25198>; else goto <D.25202>;
  <D.25202>:
  D.25203 = stack_slot_is_complex_type_not_reference_type (b);
  if (D.25203 != 0) goto <D.25198>; else goto <D.25199>;
  <D.25198>:
  res = 0;
  goto <D.25200>;
  <D.25199>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  idxa.126 = (unsigned int) idxa;
  D.25205 = idxa.126 * 6;
  D.25206 = table + D.25205;
  res = *D.25206[idxb];
  <D.25200>:
  if (res == 0) goto <D.25207>; else goto <D.25208>;
  <D.25207>:
  D.25211 = ctx->verifiable;
  if (D.25211 != 0) goto <D.25209>; else goto <D.25212>;
  <D.25212>:
  D.25213 = ctx->level;
  D.25214 = D.25213 & 128;
  if (D.25214 != 0) goto <D.25209>; else goto <D.25210>;
  <D.25209>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25215 = stack_slot_get_name (a);
    D.25216 = stack_slot_get_name (b);
    D.25217 = ctx->ip_offset;
    D.25218 = monoeg_g_strdup_printf ("Compare instruction applyed to ill formed stack (%s x %s) at 0x%04x", D.25215, D.25216, D.25217);
    vinfo->info.message = D.25218;
    vinfo->exception_type = 4;
    D.25219 = ctx->list;
    D.25220 = monoeg_g_slist_prepend (D.25219, vinfo);
    ctx->list = D.25220;
  }
  ctx->verifiable = 0;
  D.25213 = ctx->level;
  D.25221 = D.25213 & 16;
  if (D.25221 != 0) goto <D.25222>; else goto <D.25223>;
  <D.25222>:
  ctx->valid = 0;
  <D.25223>:
  <D.25210>:
  goto <D.25224>;
  <D.25208>:
  res.127 = (signed char) res;
  if (res.127 < 0) goto <D.25226>; else goto <D.25227>;
  <D.25226>:
  D.25211 = ctx->verifiable;
  if (D.25211 != 0) goto <D.25228>; else goto <D.25230>;
  <D.25230>:
  D.25213 = ctx->level;
  D.25214 = D.25213 & 128;
  if (D.25214 != 0) goto <D.25228>; else goto <D.25229>;
  <D.25228>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25231 = stack_slot_get_name (a);
    D.25232 = stack_slot_get_name (b);
    D.25217 = ctx->ip_offset;
    D.25233 = monoeg_g_strdup_printf ("Compare instruction is not verifiable (%s x %s) at 0x%04x", D.25231, D.25232, D.25217);
    vinfo->info.message = D.25233;
    vinfo->exception_type = 4;
    D.25219 = ctx->list;
    D.25234 = monoeg_g_slist_prepend (D.25219, vinfo);
    ctx->list = D.25234;
  }
  ctx->verifiable = 0;
  D.25213 = ctx->level;
  D.25221 = D.25213 & 16;
  if (D.25221 != 0) goto <D.25235>; else goto <D.25236>;
  <D.25235>:
  ctx->valid = 0;
  <D.25236>:
  <D.25229>:
  res = res & 127;
  <D.25227>:
  <D.25224>:
  D.25190 = mono_defaults.int32_class;
  D.25191 = &D.25190->byval_arg;
  stack_push_val (ctx, 1, D.25191);
}


store_arg (struct VerifyContext * ctx, guint32 arg)
{
  int D.25238;
  unsigned int D.25239;
  int D.25244;
  int D.25246;
  int D.25247;
  unsigned int D.25248;
  unsigned int D.25249;
  gchar * D.25250;
  struct GSList * D.25251;
  struct GSList * D.25252;
  int D.25253;
  int D.25256;
  int D.25259;
  struct MonoType * * D.25262;
  unsigned int D.25263;
  struct MonoType * * D.25264;
  struct MonoType * D.25265;
  int D.25266;
  const char * D.25272;
  gchar * D.25273;
  struct GSList * D.25274;
  struct MonoMethod * D.25279;
  short unsigned int D.25280;
  int D.25281;
  int D.25282;
  struct ILStackDesc * value;

  D.25238 = ctx->max_args;
  D.25239 = (unsigned int) D.25238;
  if (D.25239 <= arg) goto <D.25240>; else goto <D.25241>;
  <D.25240>:
  D.25244 = ctx->verifiable;
  if (D.25244 != 0) goto <D.25242>; else goto <D.25245>;
  <D.25245>:
  D.25246 = ctx->level;
  D.25247 = D.25246 & 128;
  if (D.25247 != 0) goto <D.25242>; else goto <D.25243>;
  <D.25242>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25248 = arg + 1;
    D.25249 = ctx->ip_offset;
    D.25250 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d at 0x%04x", D.25248, D.25249);
    vinfo->info.message = D.25250;
    vinfo->exception_type = 4;
    D.25251 = ctx->list;
    D.25252 = monoeg_g_slist_prepend (D.25251, vinfo);
    ctx->list = D.25252;
  }
  ctx->verifiable = 0;
  D.25246 = ctx->level;
  D.25253 = D.25246 & 16;
  if (D.25253 != 0) goto <D.25254>; else goto <D.25255>;
  <D.25254>:
  ctx->valid = 0;
  <D.25255>:
  <D.25243>:
  D.25256 = check_underflow (ctx, 1);
  if (D.25256 != 0) goto <D.25257>; else goto <D.25258>;
  <D.25257>:
  stack_pop (ctx);
  <D.25258>:
  return;
  <D.25241>:
  D.25259 = check_underflow (ctx, 1);
  if (D.25259 != 0) goto <D.25260>; else goto <D.25261>;
  <D.25260>:
  value = stack_pop (ctx);
  D.25262 = ctx->params;
  D.25263 = arg * 4;
  D.25264 = D.25262 + D.25263;
  D.25265 = *D.25264;
  D.25266 = verify_stack_type_compatibility (ctx, D.25265, value);
  if (D.25266 == 0) goto <D.25267>; else goto <D.25268>;
  <D.25267>:
  D.25244 = ctx->verifiable;
  if (D.25244 != 0) goto <D.25269>; else goto <D.25271>;
  <D.25271>:
  D.25246 = ctx->level;
  D.25247 = D.25246 & 128;
  if (D.25247 != 0) goto <D.25269>; else goto <D.25270>;
  <D.25269>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25272 = stack_slot_get_name (value);
    D.25249 = ctx->ip_offset;
    D.25273 = monoeg_g_strdup_printf ("Incompatible type %s in argument store at 0x%04x", D.25272, D.25249);
    vinfo->info.message = D.25273;
    vinfo->exception_type = 4;
    D.25251 = ctx->list;
    D.25274 = monoeg_g_slist_prepend (D.25251, vinfo);
    ctx->list = D.25274;
  }
  ctx->verifiable = 0;
  D.25246 = ctx->level;
  D.25253 = D.25246 & 16;
  if (D.25253 != 0) goto <D.25275>; else goto <D.25276>;
  <D.25275>:
  ctx->valid = 0;
  <D.25276>:
  <D.25270>:
  <D.25268>:
  <D.25261>:
  if (arg == 0) goto <D.25277>; else goto <D.25278>;
  <D.25277>:
  D.25279 = ctx->method;
  D.25280 = D.25279->flags;
  D.25281 = (int) D.25280;
  D.25282 = D.25281 & 16;
  if (D.25282 == 0) goto <D.25283>; else goto <D.25284>;
  <D.25283>:
  ctx->has_this_store = 1;
  <D.25284>:
  <D.25278>:
}


check_overflow (struct VerifyContext * ctx)
{
  short unsigned int D.25286;
  int D.25287;
  int D.25288;
  int D.25291;
  unsigned int D.25292;
  gchar * D.25293;
  struct GSList * D.25294;
  struct GSList * D.25295;
  int D.25296;

  D.25286 = ctx->eval.size;
  D.25287 = (int) D.25286;
  D.25288 = ctx->max_stack;
  if (D.25287 >= D.25288) goto <D.25289>; else goto <D.25290>;
  <D.25289>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25286 = ctx->eval.size;
    D.25287 = (int) D.25286;
    D.25291 = D.25287 + 1;
    D.25292 = ctx->ip_offset;
    D.25293 = monoeg_g_strdup_printf ("Method doesn\'t have stack-depth %d at 0x%04x", D.25291, D.25292);
    vinfo->info.message = D.25293;
    vinfo->exception_type = 3;
    D.25294 = ctx->list;
    D.25295 = monoeg_g_slist_prepend (D.25294, vinfo);
    ctx->list = D.25295;
  }
  ctx->valid = 0;
  D.25296 = 0;
  return D.25296;
  <D.25290>:
  D.25296 = 1;
  return D.25296;
}


stack_push (struct VerifyContext * ctx)
{
  short unsigned int D.25298;
  int D.25299;
  int D.25300;
  _Bool D.25301;
  long int D.25302;
  long int D.25303;
  short unsigned int D.25306;
  _Bool D.25307;
  long int D.25308;
  long int D.25309;
  struct ILCodeDesc * D.25312;
  int D.25313;
  struct ILStackDesc * D.25314;
  struct ILStackDesc * D.25315;
  short unsigned int D.25316;
  short unsigned int D.25317;
  unsigned int D.25318;
  unsigned int D.25319;

  D.25298 = ctx->eval.size;
  D.25299 = (int) D.25298;
  D.25300 = ctx->max_stack;
  D.25301 = D.25299 >= D.25300;
  D.25302 = (long int) D.25301;
  D.25303 = __builtin_expect (D.25302, 0);
  if (D.25303 != 0) goto <D.25304>; else goto <D.25305>;
  <D.25304>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1589, "ctx->eval.size < ctx->max_stack");
  <D.25305>:
  D.25298 = ctx->eval.size;
  D.25306 = ctx->eval.max_size;
  D.25307 = D.25298 > D.25306;
  D.25308 = (long int) D.25307;
  D.25309 = __builtin_expect (D.25308, 0);
  if (D.25309 != 0) goto <D.25310>; else goto <D.25311>;
  <D.25310>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1590, "ctx->eval.size <= ctx->eval.max_size");
  <D.25311>:
  D.25312 = &ctx->eval;
  D.25298 = ctx->eval.size;
  D.25299 = (int) D.25298;
  D.25313 = D.25299 + 1;
  ensure_stack_size (D.25312, D.25313);
  D.25315 = ctx->eval.stack;
  D.25298 = ctx->eval.size;
  D.25316 = D.25298;
  D.25317 = D.25316 + 1;
  ctx->eval.size = D.25317;
  D.25318 = (unsigned int) D.25316;
  D.25319 = D.25318 * 12;
  D.25314 = D.25315 + D.25319;
  return D.25314;
}


set_stack_value (struct VerifyContext * ctx, struct ILStackDesc * stack, struct MonoType * type, int take_addr)
{
  unsigned char D.25321;
  unsigned int D.25324;
  unsigned int D.25325;
  int D.25327;
  int D.25328;
  int D.25329;
  int D.25330;
  int D.25331;
  int D.25332;
  int D.25333;
  int D.25338;
  unsigned int D.25339;
  gchar * D.25340;
  struct GSList * D.25341;
  struct GSList * D.25342;
  gboolean D.25343;
  gchar * D.25344;
  struct GSList * D.25345;
  int mask;
  int type_kind;
  void handle_enum = <<< error >>>;

  mask = 0;
  D.25321 = type->type;
  type_kind = (int) D.25321;
  D.25324 = BIT_FIELD_REF <*type, 32, 32>;
  D.25325 = D.25324 & 1073741824;
  if (D.25325 != 0) goto <D.25322>; else goto <D.25326>;
  <D.25326>:
  if (take_addr != 0) goto <D.25322>; else goto <D.25323>;
  <D.25322>:
  mask = 256;
  <D.25323>:
  handle_enum:
  stack->type = type;
  switch (type_kind) <default: <D.18057>, case 2: <D.18030>, case 3: <D.18033>, case 4: <D.18028>, case 5: <D.18029>, case 6: <D.18031>, case 7: <D.18032>, case 8: <D.18034>, case 9: <D.18035>, case 10: <D.18049>, case 11: <D.18050>, case 12: <D.18051>, case 13: <D.18052>, case 14: <D.18043>, case 15: <D.18040>, case 17: <D.18054>, case 18: <D.18042>, case 19: <D.18047>, case 20: <D.18046>, case 21: <D.18053>, case 22: <D.18041>, case 24: <D.18037>, case 25: <D.18038>, case 27: <D.18039>, case 28: <D.18044>, case 29: <D.18045>, case 30: <D.18048>>
  <D.18028>:
  <D.18029>:
  <D.18030>:
  <D.18031>:
  <D.18032>:
  <D.18033>:
  <D.18034>:
  <D.18035>:
  D.25327 = mask | 1;
  stack->stype = D.25327;
  goto <D.18036>;
  <D.18037>:
  <D.18038>:
  D.25328 = mask | 3;
  stack->stype = D.25328;
  goto <D.18036>;
  <D.18039>:
  <D.18040>:
  <D.18041>:
  D.25329 = mask | 5;
  stack->stype = D.25329;
  goto <D.18036>;
  <D.18042>:
  <D.18043>:
  <D.18044>:
  <D.18045>:
  <D.18046>:
  <D.18047>:
  <D.18048>:
  D.25330 = mask | 6;
  stack->stype = D.25330;
  goto <D.18036>;
  <D.18049>:
  <D.18050>:
  D.25331 = mask | 2;
  stack->stype = D.25331;
  goto <D.18036>;
  <D.18051>:
  <D.18052>:
  D.25332 = mask | 4;
  stack->stype = D.25332;
  goto <D.18036>;
  <D.18053>:
  <D.18054>:
  D.25333 = mono_type_is_enum_type (type);
  if (D.25333 != 0) goto <D.25334>; else goto <D.25335>;
  <D.25334>:
  {
    struct MonoType * utype;

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

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.25321 = type->type;
      D.25338 = (int) D.25321;
      D.25339 = ctx->ip_offset;
      D.25340 = monoeg_g_strdup_printf ("Could not resolve underlying type of %x at %d", D.25338, D.25339);
      vinfo->info.message = D.25340;
      vinfo->exception_type = 3;
      D.25341 = ctx->list;
      D.25342 = monoeg_g_slist_prepend (D.25341, vinfo);
      ctx->list = D.25342;
    }
    ctx->valid = 0;
    D.25343 = 0;
    return D.25343;
    <D.25337>:
    type = utype;
    D.25321 = type->type;
    type_kind = (int) D.25321;
    goto handle_enum;
  }
  <D.25335>:
  D.25330 = mask | 6;
  stack->stype = D.25330;
  goto <D.18036>;
  <D.18057>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25321 = type->type;
    D.25338 = (int) D.25321;
    D.25339 = ctx->ip_offset;
    D.25344 = monoeg_g_strdup_printf ("Illegal value set on stack 0x%02x at %d", D.25338, D.25339);
    vinfo->info.message = D.25344;
    vinfo->exception_type = 3;
    D.25341 = ctx->list;
    D.25345 = monoeg_g_slist_prepend (D.25341, vinfo);
    ctx->list = D.25345;
  }
  ctx->valid = 0;
  D.25343 = 0;
  return D.25343;
  <D.18036>:
  D.25343 = 1;
  return D.25343;
}


do_load_function_ptr (struct VerifyContext * ctx, guint32 token, gboolean virtual)
{
  int D.25349;
  int D.25354;
  struct MonoMethod * D.25357;
  unsigned int D.25358;
  unsigned int D.25359;
  unsigned int D.25364;
  gchar * D.25365;
  struct GSList * D.25366;
  struct GSList * D.25367;
  unsigned int D.25372;
  struct MonoImage * D.25375;
  int D.25376;
  gchar * D.25377;
  struct GSList * D.25378;
  int token.128;
  const char * iftmp.129;
  int D.25386;
  int D.25391;
  int D.25393;
  int D.25394;
  gchar * D.25395;
  struct GSList * D.25396;
  int D.25397;
  int D.25404;
  struct MonoType * D.25406;
  unsigned char D.25407;
  gchar * D.25411;
  struct GSList * D.25412;
  short unsigned int D.25415;
  int D.25416;
  int D.25417;
  gchar * D.25423;
  struct GSList * D.25424;
  struct MonoClass * D.25427;
  struct MonoType * D.25428;
  int D.25429;
  gchar * D.25435;
  struct GSList * D.25436;
  int D.25439;
  int D.25442;
  gchar * D.25448;
  struct GSList * D.25449;
  struct MonoType * D.25452;
  struct ILStackDesc * top;
  struct MonoMethod * method;

  if (virtual != 0) goto <D.25347>; else goto <D.25348>;
  <D.25347>:
  D.25349 = check_underflow (ctx, 1);
  if (D.25349 == 0) goto <D.25350>; else goto <D.25351>;
  <D.25350>:
  return;
  <D.25351>:
  <D.25348>:
  if (virtual == 0) goto <D.25352>; else goto <D.25353>;
  <D.25352>:
  D.25354 = check_overflow (ctx);
  if (D.25354 == 0) goto <D.25355>; else goto <D.25356>;
  <D.25355>:
  return;
  <D.25356>:
  <D.25353>:
  D.25357 = ctx->method;
  D.25358 = BIT_FIELD_REF <*D.25357, 32, 160>;
  D.25359 = D.25358 & 124;
  if (D.25359 != 0) goto <D.25360>; else goto <D.25361>;
  <D.25360>:
  D.25357 = ctx->method;
  method = mono_method_get_wrapper_data (D.25357, token);
  if (method == 0B) goto <D.25362>; else goto <D.25363>;
  <D.25362>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25364 = ctx->ip_offset;
    D.25365 = monoeg_g_strdup_printf ("Invalid token %x for ldftn  at 0x%04x", token, D.25364);
    vinfo->info.message = D.25365;
    vinfo->exception_type = 12;
    D.25366 = ctx->list;
    D.25367 = monoeg_g_slist_prepend (D.25366, vinfo);
    ctx->list = D.25367;
  }
  ctx->valid = 0;
  return;
  <D.25363>:
  goto <D.25368>;
  <D.25361>:
  D.25372 = token >> 24;
  if (D.25372 != 6) goto <D.25373>; else goto <D.25369>;
  <D.25373>:
  D.25372 = token >> 24;
  if (D.25372 != 10) goto <D.25374>; else goto <D.25369>;
  <D.25374>:
  D.25372 = token >> 24;
  if (D.25372 != 43) goto <D.25370>; else goto <D.25369>;
  <D.25369>:
  D.25375 = ctx->image;
  D.25376 = token_bounds_check (D.25375, token);
  if (D.25376 == 0) goto <D.25370>; else goto <D.25371>;
  <D.25370>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25364 = ctx->ip_offset;
    D.25377 = monoeg_g_strdup_printf ("Invalid token %x for ldftn  at 0x%04x", token, D.25364);
    vinfo->info.message = D.25377;
    vinfo->exception_type = 12;
    D.25366 = ctx->list;
    D.25378 = monoeg_g_slist_prepend (D.25366, vinfo);
    ctx->list = D.25378;
  }
  ctx->valid = 0;
  return;
  <D.25371>:
  token.128 = (int) token;
  if (virtual != 0) goto <D.25381>; else goto <D.25382>;
  <D.25381>:
  iftmp.129 = "ldvirtfrn";
  goto <D.25383>;
  <D.25382>:
  iftmp.129 = "ldftn";
  <D.25383>:
  method = verifier_load_method (ctx, token.128, iftmp.129);
  if (method == 0B) goto <D.25384>; else goto <D.25385>;
  <D.25384>:
  return;
  <D.25385>:
  <D.25368>:
  D.25386 = mono_method_is_constructor (method);
  if (D.25386 != 0) goto <D.25387>; else goto <D.25388>;
  <D.25387>:
  D.25391 = ctx->verifiable;
  if (D.25391 != 0) goto <D.25389>; else goto <D.25392>;
  <D.25392>:
  D.25393 = ctx->level;
  D.25394 = D.25393 & 128;
  if (D.25394 != 0) goto <D.25389>; else goto <D.25390>;
  <D.25389>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25364 = ctx->ip_offset;
    D.25395 = monoeg_g_strdup_printf ("Cannot use ldftn with a constructor at 0x%04x", D.25364);
    vinfo->info.message = D.25395;
    vinfo->exception_type = 4;
    D.25366 = ctx->list;
    D.25396 = monoeg_g_slist_prepend (D.25366, vinfo);
    ctx->list = D.25396;
  }
  ctx->verifiable = 0;
  D.25393 = ctx->level;
  D.25397 = D.25393 & 16;
  if (D.25397 != 0) goto <D.25398>; else goto <D.25399>;
  <D.25398>:
  ctx->valid = 0;
  <D.25399>:
  <D.25390>:
  <D.25388>:
  if (virtual != 0) goto <D.25400>; else goto <D.25401>;
  <D.25400>:
  {
    struct ILStackDesc * top;

    top = stack_pop (ctx);
    D.25404 = stack_slot_get_type (top);
    if (D.25404 != 6) goto <D.25402>; else goto <D.25405>;
    <D.25405>:
    D.25406 = top->type;
    D.25407 = D.25406->type;
    if (D.25407 == 17) goto <D.25402>; else goto <D.25403>;
    <D.25402>:
    D.25391 = ctx->verifiable;
    if (D.25391 != 0) goto <D.25408>; else goto <D.25410>;
    <D.25410>:
    D.25393 = ctx->level;
    D.25394 = D.25393 & 128;
    if (D.25394 != 0) goto <D.25408>; else goto <D.25409>;
    <D.25408>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.25364 = ctx->ip_offset;
      D.25411 = monoeg_g_strdup_printf ("Invalid argument to ldvirtftn at 0x%04x", D.25364);
      vinfo->info.message = D.25411;
      vinfo->exception_type = 4;
      D.25366 = ctx->list;
      D.25412 = monoeg_g_slist_prepend (D.25366, vinfo);
      ctx->list = D.25412;
    }
    ctx->verifiable = 0;
    D.25393 = ctx->level;
    D.25397 = D.25393 & 16;
    if (D.25397 != 0) goto <D.25413>; else goto <D.25414>;
    <D.25413>:
    ctx->valid = 0;
    <D.25414>:
    <D.25409>:
    <D.25403>:
    D.25415 = method->flags;
    D.25416 = (int) D.25415;
    D.25417 = D.25416 & 16;
    if (D.25417 != 0) goto <D.25418>; else goto <D.25419>;
    <D.25418>:
    D.25391 = ctx->verifiable;
    if (D.25391 != 0) goto <D.25420>; else goto <D.25422>;
    <D.25422>:
    D.25393 = ctx->level;
    D.25394 = D.25393 & 128;
    if (D.25394 != 0) goto <D.25420>; else goto <D.25421>;
    <D.25420>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.25364 = ctx->ip_offset;
      D.25423 = monoeg_g_strdup_printf ("Cannot use ldvirtftn with a constructor at 0x%04x", D.25364);
      vinfo->info.message = D.25423;
      vinfo->exception_type = 4;
      D.25366 = ctx->list;
      D.25424 = monoeg_g_slist_prepend (D.25366, vinfo);
      ctx->list = D.25424;
    }
    ctx->verifiable = 0;
    D.25393 = ctx->level;
    D.25397 = D.25393 & 16;
    if (D.25397 != 0) goto <D.25425>; else goto <D.25426>;
    <D.25425>:
    ctx->valid = 0;
    <D.25426>:
    <D.25421>:
    <D.25419>:
    D.25427 = method->klass;
    D.25428 = &D.25427->byval_arg;
    D.25429 = verify_stack_type_compatibility (ctx, D.25428, top);
    if (D.25429 == 0) goto <D.25430>; else goto <D.25431>;
    <D.25430>:
    D.25391 = ctx->verifiable;
    if (D.25391 != 0) goto <D.25432>; else goto <D.25434>;
    <D.25434>:
    D.25393 = ctx->level;
    D.25394 = D.25393 & 128;
    if (D.25394 != 0) goto <D.25432>; else goto <D.25433>;
    <D.25432>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.25364 = ctx->ip_offset;
      D.25435 = monoeg_g_strdup_printf ("Unexpected object for ldvirtftn at 0x%04x", D.25364);
      vinfo->info.message = D.25435;
      vinfo->exception_type = 4;
      D.25366 = ctx->list;
      D.25436 = monoeg_g_slist_prepend (D.25366, vinfo);
      ctx->list = D.25436;
    }
    ctx->verifiable = 0;
    D.25393 = ctx->level;
    D.25397 = D.25393 & 16;
    if (D.25397 != 0) goto <D.25437>; else goto <D.25438>;
    <D.25437>:
    ctx->valid = 0;
    <D.25438>:
    <D.25433>:
    <D.25431>:
  }
  <D.25401>:
  D.25393 = ctx->level;
  D.25439 = D.25393 & 64;
  if (D.25439 == 0) goto <D.25440>; else goto <D.25441>;
  <D.25440>:
  D.25357 = ctx->method;
  D.25442 = mono_method_can_access_method_full (D.25357, method, 0B);
  if (D.25442 == 0) goto <D.25443>; else goto <D.25444>;
  <D.25443>:
  D.25391 = ctx->verifiable;
  if (D.25391 != 0) goto <D.25445>; else goto <D.25447>;
  <D.25447>:
  D.25393 = ctx->level;
  D.25394 = D.25393 & 128;
  if (D.25394 != 0) goto <D.25445>; else goto <D.25446>;
  <D.25445>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25364 = ctx->ip_offset;
    D.25448 = monoeg_g_strdup_printf ("Loaded method is not visible for ldftn/ldvirtftn at 0x%04x", D.25364);
    vinfo->info.message = D.25448;
    vinfo->exception_type = 9;
    D.25366 = ctx->list;
    D.25449 = monoeg_g_slist_prepend (D.25366, vinfo);
    ctx->list = D.25449;
  }
  ctx->verifiable = 0;
  D.25393 = ctx->level;
  D.25397 = D.25393 & 16;
  if (D.25397 != 0) goto <D.25450>; else goto <D.25451>;
  <D.25450>:
  ctx->valid = 0;
  <D.25451>:
  <D.25446>:
  <D.25444>:
  <D.25441>:
  D.25452 = mono_type_create_fnptr_from_mono_method (ctx, method);
  top = stack_push_val (ctx, 5, D.25452);
  top->method = method;
}


mono_type_create_fnptr_from_mono_method (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethodSignature * D.25454;
  struct GSList * D.25455;
  struct GSList * D.25456;
  struct MonoType * D.25457;
  struct MonoType * res;

  res = monoeg_malloc0 (8);
  D.25454 = mono_method_signature (method);
  res->data.method = D.25454;
  res->type = 27;
  D.25455 = ctx->funptrs;
  D.25456 = monoeg_g_slist_prepend (D.25455, res);
  ctx->funptrs = D.25456;
  D.25457 = res;
  return D.25457;
}


push_arg (struct VerifyContext * ctx, unsigned int arg, int take_addr)
{
  int D.25459;
  unsigned int D.25460;
  unsigned int D.25465;
  gchar * D.25466;
  struct GSList * D.25467;
  struct GSList * D.25468;
  int D.25472;
  int D.25474;
  int D.25475;
  gchar * D.25476;
  struct GSList * D.25477;
  int D.25478;
  int D.25481;
  struct MonoClass * D.25484;
  struct MonoType * D.25485;
  int D.25487;
  struct MonoType * * D.25490;
  unsigned int D.25491;
  struct MonoType * * D.25492;
  struct MonoType * D.25493;
  unsigned int D.25494;
  unsigned int D.25495;
  unsigned int D.25503;
  gchar * D.25504;
  struct GSList * D.25505;
  int D.25508;
  struct MonoMethod * D.25513;
  short unsigned int D.25514;
  int D.25515;
  int D.25516;
  int D.25522;
  int D.25523;
  int D.25524;
  int D.25527;
  struct MonoClass * D.25530;
  unsigned int D.25531;
  unsigned int D.25532;
  int D.25535;
  struct ILStackDesc * top;

  D.25459 = ctx->max_args;
  D.25460 = (unsigned int) D.25459;
  if (D.25460 <= arg) goto <D.25461>; else goto <D.25462>;
  <D.25461>:
  if (take_addr != 0) goto <D.25463>; else goto <D.25464>;
  <D.25463>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25465 = arg + 1;
    D.25466 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d", D.25465);
    vinfo->info.message = D.25466;
    vinfo->exception_type = 3;
    D.25467 = ctx->list;
    D.25468 = monoeg_g_slist_prepend (D.25467, vinfo);
    ctx->list = D.25468;
  }
  ctx->valid = 0;
  goto <D.25469>;
  <D.25464>:
  D.25472 = ctx->verifiable;
  if (D.25472 != 0) goto <D.25470>; else goto <D.25473>;
  <D.25473>:
  D.25474 = ctx->level;
  D.25475 = D.25474 & 128;
  if (D.25475 != 0) goto <D.25470>; else goto <D.25471>;
  <D.25470>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25465 = arg + 1;
    D.25476 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d", D.25465);
    vinfo->info.message = D.25476;
    vinfo->exception_type = 4;
    D.25467 = ctx->list;
    D.25477 = monoeg_g_slist_prepend (D.25467, vinfo);
    ctx->list = D.25477;
  }
  ctx->verifiable = 0;
  D.25474 = ctx->level;
  D.25478 = D.25474 & 16;
  if (D.25478 != 0) goto <D.25479>; else goto <D.25480>;
  <D.25479>:
  ctx->valid = 0;
  <D.25480>:
  <D.25471>:
  D.25481 = check_overflow (ctx);
  if (D.25481 != 0) goto <D.25482>; else goto <D.25483>;
  <D.25482>:
  D.25484 = mono_defaults.int32_class;
  D.25485 = &D.25484->byval_arg;
  stack_push_val (ctx, 1, D.25485);
  <D.25483>:
  <D.25469>:
  goto <D.25486>;
  <D.25462>:
  D.25487 = check_overflow (ctx);
  if (D.25487 != 0) goto <D.25488>; else goto <D.25489>;
  <D.25488>:
  D.25490 = ctx->params;
  D.25491 = arg * 4;
  D.25492 = D.25490 + D.25491;
  D.25493 = *D.25492;
  check_unverifiable_type (ctx, D.25493);
  D.25490 = ctx->params;
  D.25491 = arg * 4;
  D.25492 = D.25490 + D.25491;
  D.25493 = *D.25492;
  D.25494 = BIT_FIELD_REF <*D.25493, 32, 32>;
  D.25495 = D.25494 & 1073741824;
  if (D.25495 != 0) goto <D.25496>; else goto <D.25497>;
  <D.25496>:
  if (take_addr != 0) goto <D.25498>; else goto <D.25499>;
  <D.25498>:
  D.25472 = ctx->verifiable;
  if (D.25472 != 0) goto <D.25500>; else goto <D.25502>;
  <D.25502>:
  D.25474 = ctx->level;
  D.25475 = D.25474 & 128;
  if (D.25475 != 0) goto <D.25500>; else goto <D.25501>;
  <D.25500>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25503 = ctx->ip_offset;
    D.25504 = monoeg_g_strdup_printf ("ByRef of ByRef at 0x%04x", D.25503);
    vinfo->info.message = D.25504;
    vinfo->exception_type = 4;
    D.25467 = ctx->list;
    D.25505 = monoeg_g_slist_prepend (D.25467, vinfo);
    ctx->list = D.25505;
  }
  ctx->verifiable = 0;
  D.25474 = ctx->level;
  D.25478 = D.25474 & 16;
  if (D.25478 != 0) goto <D.25506>; else goto <D.25507>;
  <D.25506>:
  ctx->valid = 0;
  <D.25507>:
  <D.25501>:
  <D.25499>:
  <D.25497>:
  top = stack_push (ctx);
  D.25490 = ctx->params;
  D.25491 = arg * 4;
  D.25492 = D.25490 + D.25491;
  D.25493 = *D.25492;
  D.25508 = set_stack_value (ctx, top, D.25493, take_addr);
  if (D.25508 == 0) goto <D.25509>; else goto <D.25510>;
  <D.25509>:
  return;
  <D.25510>:
  if (arg == 0) goto <D.25511>; else goto <D.25512>;
  <D.25511>:
  D.25513 = ctx->method;
  D.25514 = D.25513->flags;
  D.25515 = (int) D.25514;
  D.25516 = D.25515 & 16;
  if (D.25516 == 0) goto <D.25517>; else goto <D.25518>;
  <D.25517>:
  if (take_addr != 0) goto <D.25519>; else goto <D.25520>;
  <D.25519>:
  ctx->has_this_store = 1;
  goto <D.25521>;
  <D.25520>:
  D.25522 = top->stype;
  D.25523 = D.25522 | 2048;
  top->stype = D.25523;
  <D.25521>:
  D.25513 = ctx->method;
  D.25524 = mono_method_is_constructor (D.25513);
  if (D.25524 != 0) goto <D.25525>; else goto <D.25526>;
  <D.25525>:
  D.25527 = ctx->super_ctor_called;
  if (D.25527 == 0) goto <D.25528>; else goto <D.25529>;
  <D.25528>:
  D.25513 = ctx->method;
  D.25530 = D.25513->klass;
  D.25531 = BIT_FIELD_REF <*D.25530, 32, 160>;
  D.25532 = D.25531 & 8;
  if (D.25532 == 0) goto <D.25533>; else goto <D.25534>;
  <D.25533>:
  D.25522 = top->stype;
  D.25535 = D.25522 | 8192;
  top->stype = D.25535;
  <D.25534>:
  <D.25529>:
  <D.25526>:
  <D.25518>:
  <D.25512>:
  <D.25489>:
  <D.25486>:
}


check_unverifiable_type (struct VerifyContext * ctx, struct MonoType * type)
{
  unsigned char D.25539;
  int D.25543;
  int D.25545;
  int D.25546;
  unsigned int D.25547;
  gchar * D.25548;
  struct GSList * D.25549;
  struct GSList * D.25550;
  int D.25551;
  gboolean D.25554;

  D.25539 = type->type;
  if (D.25539 == 15) goto <D.25537>; else goto <D.25540>;
  <D.25540>:
  D.25539 = type->type;
  if (D.25539 == 27) goto <D.25537>; else goto <D.25538>;
  <D.25537>:
  D.25543 = ctx->verifiable;
  if (D.25543 != 0) goto <D.25541>; else goto <D.25544>;
  <D.25544>:
  D.25545 = ctx->level;
  D.25546 = D.25545 & 128;
  if (D.25546 != 0) goto <D.25541>; else goto <D.25542>;
  <D.25541>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25547 = ctx->ip_offset;
    D.25548 = monoeg_g_strdup_printf ("Unmanaged pointer is not a verifiable type at 0x%04x", D.25547);
    vinfo->info.message = D.25548;
    vinfo->exception_type = 4;
    D.25549 = ctx->list;
    D.25550 = monoeg_g_slist_prepend (D.25549, vinfo);
    ctx->list = D.25550;
  }
  ctx->verifiable = 0;
  D.25545 = ctx->level;
  D.25551 = D.25545 & 16;
  if (D.25551 != 0) goto <D.25552>; else goto <D.25553>;
  <D.25552>:
  ctx->valid = 0;
  <D.25553>:
  <D.25542>:
  D.25554 = 0;
  return D.25554;
  <D.25538>:
  D.25554 = 1;
  return D.25554;
}


push_local (struct VerifyContext * ctx, guint32 arg, int take_addr)
{
  int D.25556;
  unsigned int D.25557;
  unsigned int D.25560;
  gchar * D.25561;
  struct GSList * D.25562;
  struct GSList * D.25563;
  int D.25565;
  struct MonoType * * D.25568;
  unsigned int D.25569;
  struct MonoType * * D.25570;
  struct MonoType * D.25571;
  unsigned int D.25572;
  unsigned int D.25573;
  int D.25580;
  int D.25582;
  int D.25583;
  unsigned int D.25584;
  gchar * D.25585;
  struct GSList * D.25586;
  int D.25587;
  struct ILStackDesc * D.25590;

  D.25556 = ctx->num_locals;
  D.25557 = (unsigned int) D.25556;
  if (D.25557 <= arg) goto <D.25558>; else goto <D.25559>;
  <D.25558>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25560 = arg + 1;
    D.25561 = monoeg_g_strdup_printf ("Method doesn\'t have local %d", D.25560);
    vinfo->info.message = D.25561;
    vinfo->exception_type = 3;
    D.25562 = ctx->list;
    D.25563 = monoeg_g_slist_prepend (D.25562, vinfo);
    ctx->list = D.25563;
  }
  ctx->valid = 0;
  goto <D.25564>;
  <D.25559>:
  D.25565 = check_overflow (ctx);
  if (D.25565 != 0) goto <D.25566>; else goto <D.25567>;
  <D.25566>:
  D.25568 = ctx->locals;
  D.25569 = arg * 4;
  D.25570 = D.25568 + D.25569;
  D.25571 = *D.25570;
  check_unverifiable_type (ctx, D.25571);
  D.25568 = ctx->locals;
  D.25569 = arg * 4;
  D.25570 = D.25568 + D.25569;
  D.25571 = *D.25570;
  D.25572 = BIT_FIELD_REF <*D.25571, 32, 32>;
  D.25573 = D.25572 & 1073741824;
  if (D.25573 != 0) goto <D.25574>; else goto <D.25575>;
  <D.25574>:
  if (take_addr != 0) goto <D.25576>; else goto <D.25577>;
  <D.25576>:
  D.25580 = ctx->verifiable;
  if (D.25580 != 0) goto <D.25578>; else goto <D.25581>;
  <D.25581>:
  D.25582 = ctx->level;
  D.25583 = D.25582 & 128;
  if (D.25583 != 0) goto <D.25578>; else goto <D.25579>;
  <D.25578>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25584 = ctx->ip_offset;
    D.25585 = monoeg_g_strdup_printf ("ByRef of ByRef at 0x%04x", D.25584);
    vinfo->info.message = D.25585;
    vinfo->exception_type = 4;
    D.25562 = ctx->list;
    D.25586 = monoeg_g_slist_prepend (D.25562, vinfo);
    ctx->list = D.25586;
  }
  ctx->verifiable = 0;
  D.25582 = ctx->level;
  D.25587 = D.25582 & 16;
  if (D.25587 != 0) goto <D.25588>; else goto <D.25589>;
  <D.25588>:
  ctx->valid = 0;
  <D.25589>:
  <D.25579>:
  <D.25577>:
  <D.25575>:
  D.25590 = stack_push (ctx);
  D.25568 = ctx->locals;
  D.25569 = arg * 4;
  D.25570 = D.25568 + D.25569;
  D.25571 = *D.25570;
  set_stack_value (ctx, D.25590, D.25571, take_addr);
  <D.25567>:
  <D.25564>:
}


do_localloc (struct VerifyContext * ctx)
{
  short unsigned int D.25591;
  unsigned int D.25594;
  gchar * D.25595;
  struct GSList * D.25596;
  struct GSList * D.25597;
  struct MonoMethodHeader * D.25598;
  int D.25599;
  gchar * D.25602;
  struct GSList * D.25603;
  struct ILStackDesc * D.25604;
  struct MonoClass * D.25605;
  struct MonoType * D.25606;
  int D.25609;
  int D.25611;
  int D.25612;
  gchar * D.25613;
  struct GSList * D.25614;
  int D.25615;
  struct ILStackDesc * top;

  D.25591 = ctx->eval.size;
  if (D.25591 != 1) goto <D.25592>; else goto <D.25593>;
  <D.25592>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25594 = ctx->ip_offset;
    D.25595 = monoeg_g_strdup_printf ("Stack must have only size item in localloc at 0x%04x", D.25594);
    vinfo->info.message = D.25595;
    vinfo->exception_type = 3;
    D.25596 = ctx->list;
    D.25597 = monoeg_g_slist_prepend (D.25596, vinfo);
    ctx->list = D.25597;
  }
  ctx->valid = 0;
  return;
  <D.25593>:
  D.25598 = ctx->header;
  D.25594 = ctx->ip_offset;
  D.25599 = in_any_exception_block (D.25598, D.25594);
  if (D.25599 != 0) goto <D.25600>; else goto <D.25601>;
  <D.25600>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25594 = ctx->ip_offset;
    D.25602 = monoeg_g_strdup_printf ("Stack must have only size item in localloc at 0x%04x", D.25594);
    vinfo->info.message = D.25602;
    vinfo->exception_type = 3;
    D.25596 = ctx->list;
    D.25603 = monoeg_g_slist_prepend (D.25596, vinfo);
    ctx->list = D.25603;
  }
  ctx->valid = 0;
  return;
  <D.25601>:
  top = stack_pop (ctx);
  D.25604 = stack_push (ctx);
  D.25605 = mono_defaults.int_class;
  D.25606 = &D.25605->byval_arg;
  set_stack_value (ctx, D.25604, D.25606, 0);
  D.25609 = ctx->verifiable;
  if (D.25609 != 0) goto <D.25607>; else goto <D.25610>;
  <D.25610>:
  D.25611 = ctx->level;
  D.25612 = D.25611 & 128;
  if (D.25612 != 0) goto <D.25607>; else goto <D.25608>;
  <D.25607>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25594 = ctx->ip_offset;
    D.25613 = monoeg_g_strdup_printf ("Instruction localloc in never verifiable at 0x%04x", D.25594);
    vinfo->info.message = D.25613;
    vinfo->exception_type = 4;
    D.25596 = ctx->list;
    D.25614 = monoeg_g_slist_prepend (D.25596, vinfo);
    ctx->list = D.25614;
  }
  ctx->verifiable = 0;
  D.25611 = ctx->level;
  D.25615 = D.25611 & 16;
  if (D.25615 != 0) goto <D.25616>; else goto <D.25617>;
  <D.25616>:
  ctx->valid = 0;
  <D.25617>:
  <D.25608>:
}


in_any_exception_block (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.25619;
  unsigned int i.130;
  unsigned int D.25621;
  unsigned int D.25622;
  unsigned int D.25625;
  unsigned int D.25626;
  gboolean D.25629;
  unsigned int D.25630;
  unsigned int D.25633;
  <unnamed-unsigned:15> D.25638;
  int D.25639;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17800>;
  <D.17799>:
  D.25619 = header->clauses;
  i.130 = (unsigned int) i;
  D.25621 = i.130 * 24;
  clause = D.25619 + D.25621;
  D.25622 = clause->handler_offset;
  if (D.25622 <= offset) goto <D.25623>; else goto <D.25624>;
  <D.25623>:
  D.25622 = clause->handler_offset;
  D.25625 = clause->handler_len;
  D.25626 = D.25622 + D.25625;
  if (D.25626 > offset) goto <D.25627>; else goto <D.25628>;
  <D.25627>:
  D.25629 = 1;
  return D.25629;
  <D.25628>:
  <D.25624>:
  D.25630 = clause->flags;
  if (D.25630 == 1) goto <D.25631>; else goto <D.25632>;
  <D.25631>:
  D.25633 = clause->data.filter_offset;
  if (D.25633 <= offset) goto <D.25634>; else goto <D.25635>;
  <D.25634>:
  D.25622 = clause->handler_offset;
  if (D.25622 > offset) goto <D.25636>; else goto <D.25637>;
  <D.25636>:
  D.25629 = 1;
  return D.25629;
  <D.25637>:
  <D.25635>:
  <D.25632>:
  i = i + 1;
  <D.17800>:
  D.25638 = header->num_clauses;
  D.25639 = (int) D.25638;
  if (D.25639 > i) goto <D.17799>; else goto <D.17801>;
  <D.17801>:
  D.25629 = 0;
  return D.25629;
}


do_endfilter (struct VerifyContext * ctx)
{
  int D.25641;
  int D.25642;
  short unsigned int D.25645;
  int D.25650;
  int D.25652;
  unsigned int D.25653;
  gchar * D.25654;
  struct GSList * D.25655;
  struct GSList * D.25656;
  int D.25657;
  struct ILStackDesc * D.25662;
  int D.25663;
  gchar * D.25669;
  struct GSList * D.25670;
  unsigned int D.25677;
  unsigned int D.25678;
  gchar * D.25681;
  struct GSList * D.25682;
  unsigned int D.25689;
  unsigned int D.25690;
  gchar * D.25691;
  struct GSList * D.25692;
  int D.25697;
  gchar * D.25699;
  struct GSList * D.25700;
  gchar * D.25704;
  struct GSList * D.25705;
  struct MonoExceptionClause * clause;

  D.25641 = ctx->level;
  D.25642 = D.25641 & 32;
  if (D.25642 == 0) goto <D.25643>; else goto <D.25644>;
  <D.25643>:
  D.25645 = ctx->eval.size;
  if (D.25645 != 1) goto <D.25646>; else goto <D.25647>;
  <D.25646>:
  D.25650 = ctx->verifiable;
  if (D.25650 != 0) goto <D.25648>; else goto <D.25651>;
  <D.25651>:
  D.25641 = ctx->level;
  D.25652 = D.25641 & 128;
  if (D.25652 != 0) goto <D.25648>; else goto <D.25649>;
  <D.25648>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25653 = ctx->ip_offset;
    D.25654 = monoeg_g_strdup_printf ("Stack size must have one item for endfilter at 0x%04x", D.25653);
    vinfo->info.message = D.25654;
    vinfo->exception_type = 4;
    D.25655 = ctx->list;
    D.25656 = monoeg_g_slist_prepend (D.25655, vinfo);
    ctx->list = D.25656;
  }
  ctx->verifiable = 0;
  D.25641 = ctx->level;
  D.25657 = D.25641 & 16;
  if (D.25657 != 0) goto <D.25658>; else goto <D.25659>;
  <D.25658>:
  ctx->valid = 0;
  <D.25659>:
  <D.25649>:
  <D.25647>:
  D.25645 = ctx->eval.size;
  if (D.25645 != 0) goto <D.25660>; else goto <D.25661>;
  <D.25660>:
  D.25662 = stack_pop (ctx);
  D.25663 = stack_slot_get_type (D.25662);
  if (D.25663 != 1) goto <D.25664>; else goto <D.25665>;
  <D.25664>:
  D.25650 = ctx->verifiable;
  if (D.25650 != 0) goto <D.25666>; else goto <D.25668>;
  <D.25668>:
  D.25641 = ctx->level;
  D.25652 = D.25641 & 128;
  if (D.25652 != 0) goto <D.25666>; else goto <D.25667>;
  <D.25666>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25653 = ctx->ip_offset;
    D.25669 = monoeg_g_strdup_printf ("Stack item type is not an int32 for endfilter at 0x%04x", D.25653);
    vinfo->info.message = D.25669;
    vinfo->exception_type = 4;
    D.25655 = ctx->list;
    D.25670 = monoeg_g_slist_prepend (D.25655, vinfo);
    ctx->list = D.25670;
  }
  ctx->verifiable = 0;
  D.25641 = ctx->level;
  D.25657 = D.25641 & 16;
  if (D.25657 != 0) goto <D.25671>; else goto <D.25672>;
  <D.25671>:
  ctx->valid = 0;
  <D.25672>:
  <D.25667>:
  <D.25665>:
  <D.25661>:
  <D.25644>:
  D.25653 = ctx->ip_offset;
  clause = is_correct_endfilter (ctx, D.25653);
  if (clause != 0B) goto <D.25673>; else goto <D.25674>;
  <D.25673>:
  D.25641 = ctx->level;
  D.25642 = D.25641 & 32;
  if (D.25642 == 0) goto <D.25675>; else goto <D.25676>;
  <D.25675>:
  D.25653 = ctx->ip_offset;
  D.25677 = clause->handler_offset;
  D.25678 = D.25677 + 4294967294;
  if (D.25653 != D.25678) goto <D.25679>; else goto <D.25680>;
  <D.25679>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25653 = ctx->ip_offset;
    D.25681 = monoeg_g_strdup_printf ("endfilter is not the last instruction of the filter clause at 0x%04x", D.25653);
    vinfo->info.message = D.25681;
    vinfo->exception_type = 3;
    D.25655 = ctx->list;
    D.25682 = monoeg_g_slist_prepend (D.25655, vinfo);
    ctx->list = D.25682;
  }
  ctx->valid = 0;
  <D.25680>:
  goto <D.25683>;
  <D.25676>:
  D.25653 = ctx->ip_offset;
  D.25677 = clause->handler_offset;
  D.25678 = D.25677 + 4294967294;
  if (D.25653 != D.25678) goto <D.25686>; else goto <D.25687>;
  <D.25686>:
  D.25677 = clause->handler_offset;
  D.25653 = ctx->ip_offset;
  if (D.25677 > D.25653) goto <D.25684>; else goto <D.25688>;
  <D.25688>:
  D.25653 = ctx->ip_offset;
  D.25677 = clause->handler_offset;
  D.25689 = clause->handler_len;
  D.25690 = D.25677 + D.25689;
  if (D.25653 >= D.25690) goto <D.25684>; else goto <D.25685>;
  <D.25684>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25653 = ctx->ip_offset;
    D.25691 = monoeg_g_strdup_printf ("endfilter is not the last instruction of the filter clause at 0x%04x", D.25653);
    vinfo->info.message = D.25691;
    vinfo->exception_type = 3;
    D.25655 = ctx->list;
    D.25692 = monoeg_g_slist_prepend (D.25655, vinfo);
    ctx->list = D.25692;
  }
  ctx->valid = 0;
  <D.25685>:
  <D.25687>:
  <D.25683>:
  goto <D.25693>;
  <D.25674>:
  D.25641 = ctx->level;
  D.25642 = D.25641 & 32;
  if (D.25642 == 0) goto <D.25696>; else goto <D.25694>;
  <D.25696>:
  D.25653 = ctx->ip_offset;
  D.25697 = is_unverifiable_endfilter (ctx, D.25653);
  if (D.25697 == 0) goto <D.25698>; else goto <D.25694>;
  <D.25698>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25653 = ctx->ip_offset;
    D.25699 = monoeg_g_strdup_printf ("endfilter outside filter clause at 0x%04x", D.25653);
    vinfo->info.message = D.25699;
    vinfo->exception_type = 3;
    D.25655 = ctx->list;
    D.25700 = monoeg_g_slist_prepend (D.25655, vinfo);
    ctx->list = D.25700;
  }
  ctx->valid = 0;
  goto <D.25695>;
  <D.25694>:
  D.25650 = ctx->verifiable;
  if (D.25650 != 0) goto <D.25701>; else goto <D.25703>;
  <D.25703>:
  D.25641 = ctx->level;
  D.25652 = D.25641 & 128;
  if (D.25652 != 0) goto <D.25701>; else goto <D.25702>;
  <D.25701>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25653 = ctx->ip_offset;
    D.25704 = monoeg_g_strdup_printf ("endfilter outside filter clause at 0x%04x", D.25653);
    vinfo->info.message = D.25704;
    vinfo->exception_type = 4;
    D.25655 = ctx->list;
    D.25705 = monoeg_g_slist_prepend (D.25655, vinfo);
    ctx->list = D.25705;
  }
  ctx->verifiable = 0;
  D.25641 = ctx->level;
  D.25657 = D.25641 & 16;
  if (D.25657 != 0) goto <D.25706>; else goto <D.25707>;
  <D.25706>:
  ctx->valid = 0;
  <D.25707>:
  <D.25702>:
  <D.25695>:
  <D.25693>:
  ctx->eval.size = 0;
}


is_correct_endfilter (struct VerifyContext * ctx, guint offset)
{
  struct MonoMethodHeader * D.25708;
  struct MonoExceptionClause * D.25709;
  unsigned int i.131;
  unsigned int D.25711;
  unsigned int D.25712;
  unsigned int D.25717;
  unsigned int D.25720;
  struct MonoExceptionClause * D.25723;
  int D.25724;
  int D.25725;
  unsigned int D.25730;
  unsigned int D.25731;
  <unnamed-unsigned:15> D.25734;
  int D.25735;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17858>;
  <D.17857>:
  D.25708 = ctx->header;
  D.25709 = D.25708->clauses;
  i.131 = (unsigned int) i;
  D.25711 = i.131 * 24;
  clause = D.25709 + D.25711;
  D.25712 = clause->flags;
  if (D.25712 != 1) goto <D.25713>; else goto <D.25714>;
  <D.25713>:
  // predicted unlikely by continue predictor.
  goto <D.17856>;
  <D.25714>:
  D.25712 = clause->flags;
  if (D.25712 == 1) goto <D.25715>; else goto <D.25716>;
  <D.25715>:
  D.25717 = clause->data.filter_offset;
  if (D.25717 <= offset) goto <D.25718>; else goto <D.25719>;
  <D.25718>:
  D.25720 = clause->handler_offset;
  if (D.25720 > offset) goto <D.25721>; else goto <D.25722>;
  <D.25721>:
  D.25723 = clause;
  return D.25723;
  <D.25722>:
  <D.25719>:
  <D.25716>:
  D.25724 = ctx->level;
  D.25725 = D.25724 & 32;
  if (D.25725 != 0) goto <D.25726>; else goto <D.25727>;
  <D.25726>:
  D.25720 = clause->handler_offset;
  if (D.25720 <= offset) goto <D.25728>; else goto <D.25729>;
  <D.25728>:
  D.25720 = clause->handler_offset;
  D.25730 = clause->handler_len;
  D.25731 = D.25720 + D.25730;
  if (D.25731 > offset) goto <D.25732>; else goto <D.25733>;
  <D.25732>:
  D.25723 = clause;
  return D.25723;
  <D.25733>:
  <D.25729>:
  <D.25727>:
  <D.17856>:
  i = i + 1;
  <D.17858>:
  D.25708 = ctx->header;
  D.25734 = D.25708->num_clauses;
  D.25735 = (int) D.25734;
  if (D.25735 > i) goto <D.17857>; else goto <D.17859>;
  <D.17859>:
  D.25723 = 0B;
  return D.25723;
}


is_unverifiable_endfilter (struct VerifyContext * ctx, guint offset)
{
  struct MonoMethodHeader * D.25737;
  struct MonoExceptionClause * D.25738;
  unsigned int i.132;
  unsigned int D.25740;
  unsigned int D.25741;
  unsigned int D.25744;
  unsigned int D.25745;
  int D.25748;
  <unnamed-unsigned:15> D.25749;
  int D.25750;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17867>;
  <D.17866>:
  D.25737 = ctx->header;
  D.25738 = D.25737->clauses;
  i.132 = (unsigned int) i;
  D.25740 = i.132 * 24;
  clause = D.25738 + D.25740;
  D.25741 = clause->try_offset;
  if (D.25741 <= offset) goto <D.25742>; else goto <D.25743>;
  <D.25742>:
  D.25741 = clause->try_offset;
  D.25744 = clause->try_len;
  D.25745 = D.25741 + D.25744;
  if (D.25745 > offset) goto <D.25746>; else goto <D.25747>;
  <D.25746>:
  D.25748 = 1;
  return D.25748;
  <D.25747>:
  <D.25743>:
  i = i + 1;
  <D.17867>:
  D.25737 = ctx->header;
  D.25749 = D.25737->num_clauses;
  D.25750 = (int) D.25749;
  if (D.25750 > i) goto <D.17866>; else goto <D.17868>;
  <D.17868>:
  D.25748 = 0;
  return D.25748;
}


do_initobj (struct VerifyContext * ctx, int token)
{
  int D.25754;
  int D.25757;
  int D.25762;
  int D.25764;
  int D.25765;
  unsigned int D.25766;
  gchar * D.25767;
  struct GSList * D.25768;
  struct GSList * D.25769;
  int D.25770;
  int D.25773;
  gchar * D.25779;
  struct GSList * D.25780;
  struct MonoType * D.25783;
  int D.25784;
  int D.25787;
  gchar * D.25793;
  struct GSList * D.25794;
  int D.25798;
  int D.25801;
  gchar * D.25807;
  struct GSList * D.25808;
  int D.25812;
  gchar * D.25818;
  struct GSList * D.25819;
  struct ILStackDesc * obj;
  struct MonoType * stack;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "initobj");
  if (type == 0B) goto <D.25752>; else goto <D.25753>;
  <D.25752>:
  return;
  <D.25753>:
  D.25754 = check_underflow (ctx, 1);
  if (D.25754 == 0) goto <D.25755>; else goto <D.25756>;
  <D.25755>:
  return;
  <D.25756>:
  obj = stack_pop (ctx);
  D.25757 = stack_slot_is_managed_pointer (obj);
  if (D.25757 == 0) goto <D.25758>; else goto <D.25759>;
  <D.25758>:
  D.25762 = ctx->verifiable;
  if (D.25762 != 0) goto <D.25760>; else goto <D.25763>;
  <D.25763>:
  D.25764 = ctx->level;
  D.25765 = D.25764 & 128;
  if (D.25765 != 0) goto <D.25760>; else goto <D.25761>;
  <D.25760>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25766 = ctx->ip_offset;
    D.25767 = monoeg_g_strdup_printf ("Invalid object address for initobj at 0x%04x", D.25766);
    vinfo->info.message = D.25767;
    vinfo->exception_type = 4;
    D.25768 = ctx->list;
    D.25769 = monoeg_g_slist_prepend (D.25768, vinfo);
    ctx->list = D.25769;
  }
  ctx->verifiable = 0;
  D.25764 = ctx->level;
  D.25770 = D.25764 & 16;
  if (D.25770 != 0) goto <D.25771>; else goto <D.25772>;
  <D.25771>:
  ctx->valid = 0;
  <D.25772>:
  <D.25761>:
  <D.25759>:
  D.25773 = stack_slot_is_managed_mutability_pointer (obj);
  if (D.25773 != 0) goto <D.25774>; else goto <D.25775>;
  <D.25774>:
  D.25762 = ctx->verifiable;
  if (D.25762 != 0) goto <D.25776>; else goto <D.25778>;
  <D.25778>:
  D.25764 = ctx->level;
  D.25765 = D.25764 & 128;
  if (D.25765 != 0) goto <D.25776>; else goto <D.25777>;
  <D.25776>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25766 = ctx->ip_offset;
    D.25779 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with initobj at 0x%04x", D.25766);
    vinfo->info.message = D.25779;
    vinfo->exception_type = 4;
    D.25768 = ctx->list;
    D.25780 = monoeg_g_slist_prepend (D.25768, vinfo);
    ctx->list = D.25780;
  }
  ctx->verifiable = 0;
  D.25764 = ctx->level;
  D.25770 = D.25764 & 16;
  if (D.25770 != 0) goto <D.25781>; else goto <D.25782>;
  <D.25781>:
  ctx->valid = 0;
  <D.25782>:
  <D.25777>:
  <D.25775>:
  D.25783 = obj->type;
  stack = mono_type_get_type_byval (D.25783);
  D.25784 = mono_type_is_reference (stack);
  if (D.25784 != 0) goto <D.25785>; else goto <D.25786>;
  <D.25785>:
  D.25787 = verify_type_compatibility (ctx, stack, type);
  if (D.25787 == 0) goto <D.25788>; else goto <D.25789>;
  <D.25788>:
  D.25762 = ctx->verifiable;
  if (D.25762 != 0) goto <D.25790>; else goto <D.25792>;
  <D.25792>:
  D.25764 = ctx->level;
  D.25765 = D.25764 & 128;
  if (D.25765 != 0) goto <D.25790>; else goto <D.25791>;
  <D.25790>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25766 = ctx->ip_offset;
    D.25793 = monoeg_g_strdup_printf ("Type token of initobj not compatible with value on stack at 0x%04x", D.25766);
    vinfo->info.message = D.25793;
    vinfo->exception_type = 4;
    D.25768 = ctx->list;
    D.25794 = monoeg_g_slist_prepend (D.25768, vinfo);
    ctx->list = D.25794;
  }
  ctx->verifiable = 0;
  D.25764 = ctx->level;
  D.25770 = D.25764 & 16;
  if (D.25770 != 0) goto <D.25795>; else goto <D.25796>;
  <D.25795>:
  ctx->valid = 0;
  <D.25796>:
  <D.25791>:
  goto <D.25797>;
  <D.25789>:
  D.25764 = ctx->level;
  D.25798 = D.25764 & 32;
  if (D.25798 == 0) goto <D.25799>; else goto <D.25800>;
  <D.25799>:
  D.25801 = mono_metadata_type_equal (type, stack);
  if (D.25801 == 0) goto <D.25802>; else goto <D.25803>;
  <D.25802>:
  D.25762 = ctx->verifiable;
  if (D.25762 != 0) goto <D.25804>; else goto <D.25806>;
  <D.25806>:
  D.25764 = ctx->level;
  D.25765 = D.25764 & 128;
  if (D.25765 != 0) goto <D.25804>; else goto <D.25805>;
  <D.25804>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25766 = ctx->ip_offset;
    D.25807 = monoeg_g_strdup_printf ("Type token of initobj not compatible with value on stack at 0x%04x", D.25766);
    vinfo->info.message = D.25807;
    vinfo->exception_type = 4;
    D.25768 = ctx->list;
    D.25808 = monoeg_g_slist_prepend (D.25768, vinfo);
    ctx->list = D.25808;
  }
  ctx->verifiable = 0;
  D.25764 = ctx->level;
  D.25770 = D.25764 & 16;
  if (D.25770 != 0) goto <D.25809>; else goto <D.25810>;
  <D.25809>:
  ctx->valid = 0;
  <D.25810>:
  <D.25805>:
  <D.25803>:
  <D.25800>:
  <D.25797>:
  goto <D.25811>;
  <D.25786>:
  D.25812 = verify_type_compatibility (ctx, stack, type);
  if (D.25812 == 0) goto <D.25813>; else goto <D.25814>;
  <D.25813>:
  {
    char * expected_name;
    char * stack_name;

    expected_name = mono_type_full_name (type);
    stack_name = mono_type_full_name (stack);
    D.25762 = ctx->verifiable;
    if (D.25762 != 0) goto <D.25815>; else goto <D.25817>;
    <D.25817>:
    D.25764 = ctx->level;
    D.25765 = D.25764 & 128;
    if (D.25765 != 0) goto <D.25815>; else goto <D.25816>;
    <D.25815>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.25766 = ctx->ip_offset;
      D.25818 = monoeg_g_strdup_printf ("Initobj %s not compatible with value on stack %s at 0x%04x", expected_name, stack_name, D.25766);
      vinfo->info.message = D.25818;
      vinfo->exception_type = 4;
      D.25768 = ctx->list;
      D.25819 = monoeg_g_slist_prepend (D.25768, vinfo);
      ctx->list = D.25819;
    }
    ctx->verifiable = 0;
    D.25764 = ctx->level;
    D.25770 = D.25764 & 16;
    if (D.25770 != 0) goto <D.25820>; else goto <D.25821>;
    <D.25820>:
    ctx->valid = 0;
    <D.25821>:
    <D.25816>:
    monoeg_g_free (expected_name);
    monoeg_g_free (stack_name);
  }
  <D.25814>:
  <D.25811>:
}


get_boxable_mono_type (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoType * D.25825;
  unsigned int D.25826;
  unsigned int D.25827;
  unsigned char D.25830;
  unsigned int D.25833;
  gchar * D.25834;
  struct GSList * D.25835;
  struct GSList * D.25836;
  gchar * D.25839;
  struct GSList * D.25840;
  int D.25845;
  int D.25847;
  int D.25848;
  gchar * D.25849;
  struct GSList * D.25850;
  int D.25851;
  gchar * D.25856;
  struct GSList * D.25857;
  struct MonoGenericContainer * D.25858;
  gchar * D.25866;
  struct GSList * D.25867;
  struct MonoType * type;
  struct MonoClass * class;

  type = verifier_load_type (ctx, token, opcode);
  if (type == 0B) goto <D.25823>; else goto <D.25824>;
  <D.25823>:
  D.25825 = 0B;
  return D.25825;
  <D.25824>:
  D.25826 = BIT_FIELD_REF <*type, 32, 32>;
  D.25827 = D.25826 & 1073741824;
  if (D.25827 != 0) goto <D.25828>; else goto <D.25829>;
  <D.25828>:
  D.25830 = type->type;
  if (D.25830 != 22) goto <D.25831>; else goto <D.25832>;
  <D.25831>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25833 = ctx->ip_offset;
    D.25834 = monoeg_g_strdup_printf ("Invalid use of byref type for %s at 0x%04x", opcode, D.25833);
    vinfo->info.message = D.25834;
    vinfo->exception_type = 3;
    D.25835 = ctx->list;
    D.25836 = monoeg_g_slist_prepend (D.25835, vinfo);
    ctx->list = D.25836;
  }
  ctx->valid = 0;
  D.25825 = 0B;
  return D.25825;
  <D.25832>:
  <D.25829>:
  D.25830 = type->type;
  if (D.25830 == 1) goto <D.25837>; else goto <D.25838>;
  <D.25837>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25833 = ctx->ip_offset;
    D.25839 = monoeg_g_strdup_printf ("Invalid use of void type for %s at 0x%04x", opcode, D.25833);
    vinfo->info.message = D.25839;
    vinfo->exception_type = 3;
    D.25835 = ctx->list;
    D.25840 = monoeg_g_slist_prepend (D.25835, vinfo);
    ctx->list = D.25840;
  }
  ctx->valid = 0;
  D.25825 = 0B;
  return D.25825;
  <D.25838>:
  D.25830 = type->type;
  if (D.25830 == 22) goto <D.25841>; else goto <D.25842>;
  <D.25841>:
  D.25845 = ctx->verifiable;
  if (D.25845 != 0) goto <D.25843>; else goto <D.25846>;
  <D.25846>:
  D.25847 = ctx->level;
  D.25848 = D.25847 & 128;
  if (D.25848 != 0) goto <D.25843>; else goto <D.25844>;
  <D.25843>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25833 = ctx->ip_offset;
    D.25849 = monoeg_g_strdup_printf ("Invalid use of typedbyref for %s at 0x%04x", opcode, D.25833);
    vinfo->info.message = D.25849;
    vinfo->exception_type = 4;
    D.25835 = ctx->list;
    D.25850 = monoeg_g_slist_prepend (D.25835, vinfo);
    ctx->list = D.25850;
  }
  ctx->verifiable = 0;
  D.25847 = ctx->level;
  D.25851 = D.25847 & 16;
  if (D.25851 != 0) goto <D.25852>; else goto <D.25853>;
  <D.25852>:
  ctx->valid = 0;
  <D.25853>:
  <D.25844>:
  <D.25842>:
  class = mono_class_from_mono_type (type);
  if (class == 0B) goto <D.25854>; else goto <D.25855>;
  <D.25854>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25833 = ctx->ip_offset;
    D.25856 = monoeg_g_strdup_printf ("Could not retrieve type token for %s at 0x%04x", opcode, D.25833);
    vinfo->info.message = D.25856;
    vinfo->exception_type = 3;
    D.25835 = ctx->list;
    D.25857 = monoeg_g_slist_prepend (D.25835, vinfo);
    ctx->list = D.25857;
  }
  ctx->valid = 0;
  <D.25855>:
  D.25858 = class->generic_container;
  if (D.25858 != 0B) goto <D.25859>; else goto <D.25860>;
  <D.25859>:
  D.25830 = type->type;
  if (D.25830 != 21) goto <D.25861>; else goto <D.25862>;
  <D.25861>:
  D.25845 = ctx->verifiable;
  if (D.25845 != 0) goto <D.25863>; else goto <D.25865>;
  <D.25865>:
  D.25847 = ctx->level;
  D.25848 = D.25847 & 128;
  if (D.25848 != 0) goto <D.25863>; else goto <D.25864>;
  <D.25863>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25833 = ctx->ip_offset;
    D.25866 = monoeg_g_strdup_printf ("Cannot use the generic type definition in a boxable type position for %s at 0x%04x", opcode, D.25833);
    vinfo->info.message = D.25866;
    vinfo->exception_type = 4;
    D.25835 = ctx->list;
    D.25867 = monoeg_g_slist_prepend (D.25835, vinfo);
    ctx->list = D.25867;
  }
  ctx->verifiable = 0;
  D.25847 = ctx->level;
  D.25851 = D.25847 & 16;
  if (D.25851 != 0) goto <D.25868>; else goto <D.25869>;
  <D.25868>:
  ctx->valid = 0;
  <D.25869>:
  <D.25864>:
  <D.25862>:
  <D.25860>:
  check_unverifiable_type (ctx, type);
  D.25825 = type;
  return D.25825;
}


check_underflow (struct VerifyContext * ctx, int size)
{
  short unsigned int D.25871;
  int D.25872;
  unsigned int D.25875;
  gchar * D.25876;
  struct GSList * D.25877;
  struct GSList * D.25878;
  int D.25879;

  D.25871 = ctx->eval.size;
  D.25872 = (int) D.25871;
  if (D.25872 < size) goto <D.25873>; else goto <D.25874>;
  <D.25873>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25871 = ctx->eval.size;
    D.25872 = (int) D.25871;
    D.25875 = ctx->ip_offset;
    D.25876 = monoeg_g_strdup_printf ("Stack underflow, required %d, but have %d at 0x%04x", size, D.25872, D.25875);
    vinfo->info.message = D.25876;
    vinfo->exception_type = 3;
    D.25877 = ctx->list;
    D.25878 = monoeg_g_slist_prepend (D.25877, vinfo);
    ctx->list = D.25878;
  }
  ctx->valid = 0;
  D.25879 = 0;
  return D.25879;
  <D.25874>:
  D.25879 = 1;
  return D.25879;
}


is_correct_rethrow (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.25881;
  unsigned int i.133;
  unsigned int D.25883;
  unsigned int D.25884;
  unsigned int D.25887;
  unsigned int D.25888;
  int D.25891;
  unsigned int D.25892;
  unsigned int D.25895;
  <unnamed-unsigned:15> D.25900;
  int D.25901;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17839>;
  <D.17838>:
  D.25881 = header->clauses;
  i.133 = (unsigned int) i;
  D.25883 = i.133 * 24;
  clause = D.25881 + D.25883;
  D.25884 = clause->handler_offset;
  if (D.25884 <= offset) goto <D.25885>; else goto <D.25886>;
  <D.25885>:
  D.25884 = clause->handler_offset;
  D.25887 = clause->handler_len;
  D.25888 = D.25884 + D.25887;
  if (D.25888 > offset) goto <D.25889>; else goto <D.25890>;
  <D.25889>:
  D.25891 = 1;
  return D.25891;
  <D.25890>:
  <D.25886>:
  D.25892 = clause->flags;
  if (D.25892 == 1) goto <D.25893>; else goto <D.25894>;
  <D.25893>:
  D.25895 = clause->data.filter_offset;
  if (D.25895 <= offset) goto <D.25896>; else goto <D.25897>;
  <D.25896>:
  D.25884 = clause->handler_offset;
  if (D.25884 > offset) goto <D.25898>; else goto <D.25899>;
  <D.25898>:
  D.25891 = 1;
  return D.25891;
  <D.25899>:
  <D.25897>:
  <D.25894>:
  i = i + 1;
  <D.17839>:
  D.25900 = header->num_clauses;
  D.25901 = (int) D.25900;
  if (D.25901 > i) goto <D.17838>; else goto <D.17840>;
  <D.17840>:
  D.25891 = 0;
  return D.25891;
}


do_sizeof (struct VerifyContext * ctx, int token)
{
  unsigned int D.25905;
  unsigned int D.25906;
  unsigned char D.25909;
  unsigned int D.25912;
  gchar * D.25913;
  struct GSList * D.25914;
  struct GSList * D.25915;
  gchar * D.25918;
  struct GSList * D.25919;
  int D.25920;
  struct ILStackDesc * D.25923;
  struct MonoClass * D.25924;
  struct MonoType * D.25925;
  struct MonoType * type;

  type = verifier_load_type (ctx, token, "sizeof");
  if (type == 0B) goto <D.25903>; else goto <D.25904>;
  <D.25903>:
  return;
  <D.25904>:
  D.25905 = BIT_FIELD_REF <*type, 32, 32>;
  D.25906 = D.25905 & 1073741824;
  if (D.25906 != 0) goto <D.25907>; else goto <D.25908>;
  <D.25907>:
  D.25909 = type->type;
  if (D.25909 != 22) goto <D.25910>; else goto <D.25911>;
  <D.25910>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25912 = ctx->ip_offset;
    D.25913 = monoeg_g_strdup_printf ("Invalid use of byref type at 0x%04x", D.25912);
    vinfo->info.message = D.25913;
    vinfo->exception_type = 3;
    D.25914 = ctx->list;
    D.25915 = monoeg_g_slist_prepend (D.25914, vinfo);
    ctx->list = D.25915;
  }
  ctx->valid = 0;
  return;
  <D.25911>:
  <D.25908>:
  D.25909 = type->type;
  if (D.25909 == 1) goto <D.25916>; else goto <D.25917>;
  <D.25916>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25912 = ctx->ip_offset;
    D.25918 = monoeg_g_strdup_printf ("Invalid use of void type at 0x%04x", D.25912);
    vinfo->info.message = D.25918;
    vinfo->exception_type = 3;
    D.25914 = ctx->list;
    D.25919 = monoeg_g_slist_prepend (D.25914, vinfo);
    ctx->list = D.25919;
  }
  ctx->valid = 0;
  return;
  <D.25917>:
  D.25920 = check_overflow (ctx);
  if (D.25920 != 0) goto <D.25921>; else goto <D.25922>;
  <D.25921>:
  D.25923 = stack_push (ctx);
  D.25924 = mono_defaults.uint32_class;
  D.25925 = &D.25924->byval_arg;
  set_stack_value (ctx, D.25923, D.25925, 0);
  <D.25922>:
}


do_refanytype (struct VerifyContext * ctx)
{
  int D.25927;
  int D.25932;
  struct MonoType * D.25934;
  unsigned char D.25935;
  const char * D.25936;
  unsigned int D.25937;
  gchar * D.25938;
  struct GSList * D.25939;
  struct GSList * D.25940;
  struct ILStackDesc * D.25941;
  struct MonoClass * D.25942;
  struct MonoType * D.25943;
  struct ILStackDesc * top;

  D.25927 = check_underflow (ctx, 1);
  if (D.25927 == 0) goto <D.25928>; else goto <D.25929>;
  <D.25928>:
  return;
  <D.25929>:
  top = stack_pop (ctx);
  D.25932 = top->stype;
  if (D.25932 != 5) goto <D.25930>; else goto <D.25933>;
  <D.25933>:
  D.25934 = top->type;
  D.25935 = D.25934->type;
  if (D.25935 != 22) goto <D.25930>; else goto <D.25931>;
  <D.25930>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25936 = stack_slot_get_name (top);
    D.25937 = ctx->ip_offset;
    D.25938 = monoeg_g_strdup_printf ("Expected a typedref as argument for refanytype, but found %s at 0x%04x", D.25936, D.25937);
    vinfo->info.message = D.25938;
    vinfo->exception_type = 3;
    D.25939 = ctx->list;
    D.25940 = monoeg_g_slist_prepend (D.25939, vinfo);
    ctx->list = D.25940;
  }
  ctx->valid = 0;
  <D.25931>:
  D.25941 = stack_push (ctx);
  D.25942 = mono_defaults.typehandle_class;
  D.25943 = &D.25942->byval_arg;
  set_stack_value (ctx, D.25941, D.25943, 0);
}


mono_method_is_constructor (struct MonoMethod * method)
{
  gboolean D.25945;
  int iftmp.134;
  short unsigned int D.25949;
  unsigned int D.25950;
  unsigned int D.25951;
  int D.17534;
  int iftmp.135;
  int D.17530;
  const char[6] * D.25956;
  unsigned char D.25957;
  int D.25958;
  unsigned char D.25959;
  int D.25960;
  const unsigned char * D.25965;
  unsigned char D.25966;
  int D.25967;
  const unsigned char * D.25968;
  unsigned char D.25969;
  int D.25970;
  const unsigned char * D.25975;
  unsigned char D.25976;
  int D.25977;
  const unsigned char * D.25978;
  unsigned char D.25979;
  int D.25980;
  const unsigned char * D.25985;
  unsigned char D.25986;
  int D.25987;
  const unsigned char * D.25988;
  unsigned char D.25989;
  int D.25990;
  const char * D.25992;

  D.25949 = method->flags;
  D.25950 = (unsigned int) D.25949;
  D.25951 = D.25950 & 6160;
  if (D.25951 == 6144) goto <D.25952>; else goto <D.25947>;
  <D.25952>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = method->name;
      D.25956 = ".ctor";
      D.25957 = MEM[(const unsigned char *)D.25956];
      D.25958 = (int) D.25957;
      D.25959 = *__s2;
      D.25960 = (int) D.25959;
      __result = D.25958 - D.25960;
      {
        if (__s1_len != 0) goto <D.25961>; else goto <D.25962>;
        <D.25961>:
        if (__result == 0) goto <D.25963>; else goto <D.25964>;
        <D.25963>:
        D.25965 = &MEM[(void *)".ctor" + 1B];
        D.25966 = *D.25965;
        D.25967 = (int) D.25966;
        D.25968 = __s2 + 1;
        D.25969 = *D.25968;
        D.25970 = (int) D.25969;
        __result = D.25967 - D.25970;
        if (__s1_len > 1) goto <D.25971>; else goto <D.25972>;
        <D.25971>:
        if (__result == 0) goto <D.25973>; else goto <D.25974>;
        <D.25973>:
        D.25975 = &MEM[(void *)".ctor" + 2B];
        D.25976 = *D.25975;
        D.25977 = (int) D.25976;
        D.25978 = __s2 + 2;
        D.25979 = *D.25978;
        D.25980 = (int) D.25979;
        __result = D.25977 - D.25980;
        if (__s1_len > 2) goto <D.25981>; else goto <D.25982>;
        <D.25981>:
        if (__result == 0) goto <D.25983>; else goto <D.25984>;
        <D.25983>:
        D.25985 = &MEM[(void *)".ctor" + 3B];
        D.25986 = *D.25985;
        D.25987 = (int) D.25986;
        D.25988 = __s2 + 3;
        D.25989 = *D.25988;
        D.25990 = (int) D.25989;
        __result = D.25987 - D.25990;
        <D.25984>:
        <D.25982>:
        <D.25974>:
        <D.25972>:
        <D.25964>:
        <D.25962>:
      }
      D.17530 = __result;
    }
    iftmp.135 = D.17530;
    goto <D.25991>;
    <D.25955>:
    D.25992 = method->name;
    iftmp.135 = __builtin_strcmp (".ctor", D.25992);
    <D.25991>:
    D.17534 = iftmp.135;
  }
  if (D.17534 == 0) goto <D.25993>; else goto <D.25947>;
  <D.25993>:
  iftmp.134 = 1;
  goto <D.25948>;
  <D.25947>:
  iftmp.134 = 0;
  <D.25948>:
  D.25945 = iftmp.134;
  return D.25945;
}


mono_verify_corlib ()
{
  char * D.25995;

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


mono_verifier_is_enabled_for_method (struct MonoMethod * method)
{
  gboolean D.25997;
  int iftmp.136;
  struct MonoClass * D.26002;
  int D.26003;
  unsigned int D.26005;
  unsigned int D.26006;

  D.26002 = method->klass;
  D.26003 = mono_verifier_is_enabled_for_class (D.26002);
  if (D.26003 != 0) goto <D.26004>; else goto <D.25999>;
  <D.26004>:
  D.26005 = BIT_FIELD_REF <*method, 32, 160>;
  D.26006 = D.26005 & 124;
  if (D.26006 == 0) goto <D.26000>; else goto <D.26007>;
  <D.26007>:
  D.26005 = BIT_FIELD_REF <*method, 32, 160>;
  D.26006 = D.26005 & 124;
  if (D.26006 == 68) goto <D.26000>; else goto <D.25999>;
  <D.26000>:
  iftmp.136 = 1;
  goto <D.26001>;
  <D.25999>:
  iftmp.136 = 0;
  <D.26001>:
  D.25997 = iftmp.136;
  return D.25997;
}


mono_verifier_is_enabled_for_class (struct MonoClass * klass)
{
  gboolean D.26009;
  int iftmp.137;
  int verify_all.138;
  <unnamed type> verifier_mode.139;
  struct MonoImage * D.26019;
  struct MonoAssembly * D.26020;
  unsigned char D.26022;
  struct MonoImage * D.26023;

  verify_all.138 = verify_all;
  if (verify_all.138 != 0) goto <D.26011>; else goto <D.26016>;
  <D.26016>:
  verifier_mode.139 = verifier_mode;
  if (verifier_mode.139 != 0) goto <D.26018>; else goto <D.26012>;
  <D.26018>:
  D.26019 = klass->image;
  D.26020 = D.26019->assembly;
  if (D.26020 == 0B) goto <D.26013>; else goto <D.26021>;
  <D.26021>:
  D.26019 = klass->image;
  D.26020 = D.26019->assembly;
  D.26022 = D.26020->in_gac;
  if (D.26022 == 0) goto <D.26013>; else goto <D.26012>;
  <D.26013>:
  D.26019 = klass->image;
  D.26023 = mono_defaults.corlib;
  if (D.26019 != D.26023) goto <D.26011>; else goto <D.26012>;
  <D.26011>:
  iftmp.137 = 1;
  goto <D.26014>;
  <D.26012>:
  iftmp.137 = 0;
  <D.26014>:
  D.26009 = iftmp.137;
  return D.26009;
}


mono_verifier_is_enabled_for_image (struct MonoImage * image)
{
  gboolean D.26025;
  int iftmp.140;
  int verify_all.141;
  <unnamed type> verifier_mode.142;

  verify_all.141 = verify_all;
  if (verify_all.141 != 0) goto <D.26027>; else goto <D.26031>;
  <D.26031>:
  verifier_mode.142 = verifier_mode;
  if (verifier_mode.142 != 0) goto <D.26027>; else goto <D.26028>;
  <D.26027>:
  iftmp.140 = 1;
  goto <D.26029>;
  <D.26028>:
  iftmp.140 = 0;
  <D.26029>:
  D.26025 = iftmp.140;
  return D.26025;
}


mono_verifier_is_method_full_trust (struct MonoMethod * method)
{
  gboolean D.26034;
  int iftmp.143;
  struct MonoClass * D.26038;
  int D.26039;
  unsigned int D.26041;
  unsigned int D.26042;

  D.26038 = method->klass;
  D.26039 = mono_verifier_is_class_full_trust (D.26038);
  if (D.26039 != 0) goto <D.26040>; else goto <D.26036>;
  <D.26040>:
  D.26041 = BIT_FIELD_REF <*method, 32, 160>;
  D.26042 = D.26041 & 512;
  if (D.26042 == 0) goto <D.26043>; else goto <D.26036>;
  <D.26043>:
  iftmp.143 = 1;
  goto <D.26037>;
  <D.26036>:
  iftmp.143 = 0;
  <D.26037>:
  D.26034 = iftmp.143;
  return D.26034;
}


mono_verifier_is_class_full_trust (struct MonoClass * klass)
{
  int iftmp.144;
  <unnamed type> D.26046;
  int iftmp.145;
  struct MonoImage * D.26052;
  struct MonoAssembly * D.26053;
  unsigned char D.26055;
  int verify_all.146;
  <unnamed type> verifier_mode.147;
  gboolean D.26064;
  int iftmp.148;
  struct MonoImage * D.26070;
  int iftmp.149;
  gboolean trusted_location;

  D.26046 = mono_security_get_mode ();
  if (D.26046 != 1) goto <D.26047>; else goto <D.26048>;
  <D.26047>:
  D.26052 = klass->image;
  D.26053 = D.26052->assembly;
  if (D.26053 != 0B) goto <D.26054>; else goto <D.26050>;
  <D.26054>:
  D.26052 = klass->image;
  D.26053 = D.26052->assembly;
  D.26055 = D.26053->in_gac;
  if (D.26055 != 0) goto <D.26056>; else goto <D.26050>;
  <D.26056>:
  iftmp.145 = 1;
  goto <D.26051>;
  <D.26050>:
  iftmp.145 = 0;
  <D.26051>:
  iftmp.144 = iftmp.145;
  goto <D.26057>;
  <D.26048>:
  D.26052 = klass->image;
  iftmp.144 = mono_security_core_clr_is_platform_image (D.26052);
  <D.26057>:
  trusted_location = iftmp.144;
  verify_all.146 = verify_all;
  if (verify_all.146 != 0) goto <D.26059>; else goto <D.26060>;
  <D.26059>:
  verifier_mode.147 = verifier_mode;
  if (verifier_mode.147 == 0) goto <D.26062>; else goto <D.26063>;
  <D.26062>:
  if (trusted_location != 0) goto <D.26066>; else goto <D.26069>;
  <D.26069>:
  D.26052 = klass->image;
  D.26070 = mono_defaults.corlib;
  if (D.26052 == D.26070) goto <D.26066>; else goto <D.26067>;
  <D.26066>:
  iftmp.148 = 1;
  goto <D.26068>;
  <D.26067>:
  iftmp.148 = 0;
  <D.26068>:
  D.26064 = iftmp.148;
  return D.26064;
  <D.26063>:
  <D.26060>:
  verifier_mode.147 = verifier_mode;
  if (verifier_mode.147 <= 1) goto <D.26072>; else goto <D.26075>;
  <D.26075>:
  if (trusted_location != 0) goto <D.26072>; else goto <D.26076>;
  <D.26076>:
  D.26052 = klass->image;
  D.26070 = mono_defaults.corlib;
  if (D.26052 == D.26070) goto <D.26072>; else goto <D.26073>;
  <D.26072>:
  iftmp.149 = 1;
  goto <D.26074>;
  <D.26073>:
  iftmp.149 = 0;
  <D.26074>:
  D.26064 = iftmp.149;
  return D.26064;
}


mono_method_verify_with_current_settings (struct MonoMethod * method, gboolean skip_visibility, gboolean is_fulltrust)
{
  struct GSList * D.26078;
  int iftmp.150;
  <unnamed type> verifier_mode.151;
  int iftmp.152;
  int D.26088;
  int D.26090;
  int iftmp.153;
  int D.26095;

  verifier_mode.151 = verifier_mode;
  if (verifier_mode.151 != 3) goto <D.26081>; else goto <D.26082>;
  <D.26081>:
  iftmp.150 = 32;
  goto <D.26083>;
  <D.26082>:
  iftmp.150 = 0;
  <D.26083>:
  if (is_fulltrust == 0) goto <D.26087>; else goto <D.26085>;
  <D.26087>:
  D.26088 = mono_verifier_is_method_full_trust (method);
  if (D.26088 == 0) goto <D.26089>; else goto <D.26085>;
  <D.26089>:
  iftmp.152 = 16;
  goto <D.26086>;
  <D.26085>:
  iftmp.152 = 0;
  <D.26086>:
  D.26090 = iftmp.150 | iftmp.152;
  if (skip_visibility != 0) goto <D.26092>; else goto <D.26093>;
  <D.26092>:
  iftmp.153 = 64;
  goto <D.26094>;
  <D.26093>:
  iftmp.153 = 0;
  <D.26094>:
  D.26095 = D.26090 | iftmp.153;
  D.26078 = mono_method_verify (method, D.26095);
  return D.26078;
}


mono_verifier_verify_class (struct MonoClass * class)
{
  struct MonoClass * D.26097;
  struct MonoClass * D.26100;
  unsigned int D.26103;
  unsigned int D.26104;
  unsigned char D.26107;
  struct MonoImage * D.26112;
  unsigned int D.26113;
  unsigned int D.26114;
  unsigned int D.26117;
  gboolean D.26120;
  unsigned int D.26125;
  unsigned int D.26126;
  unsigned char D.26128;
  struct MonoGenericClass * D.26130;
  struct MonoGenericContainer * D.26133;
  struct MonoGenericClass * D.26136;
  struct MonoGenericContainer * D.26141;
  struct MonoType * D.26144;
  int D.26145;
  unsigned int D.26150;
  int D.26155;
  int D.26158;
  int D.26163;
  int D.26168;
  unsigned int D.26171;
  unsigned int D.26172;
  int D.26175;
  int D.26178;

  D.26097 = class->parent;
  if (D.26097 == 0B) goto <D.26098>; else goto <D.26099>;
  <D.26098>:
  D.26100 = mono_defaults.object_class;
  if (D.26100 != class) goto <D.26101>; else goto <D.26102>;
  <D.26101>:
  D.26103 = class->flags;
  D.26104 = D.26103 & 32;
  if (D.26104 == 0) goto <D.26105>; else goto <D.26106>;
  <D.26105>:
  D.26107 = class->byval_arg.type;
  if (D.26107 != 19) goto <D.26108>; else goto <D.26109>;
  <D.26108>:
  D.26107 = class->byval_arg.type;
  if (D.26107 != 30) goto <D.26110>; else goto <D.26111>;
  <D.26110>:
  D.26112 = class->image;
  D.26113 = BIT_FIELD_REF <*D.26112, 32, 128>;
  D.26114 = D.26113 & 8;
  if (D.26114 == 0) goto <D.26115>; else goto <D.26116>;
  <D.26115>:
  D.26117 = class->type_token;
  if (D.26117 != 33554433) goto <D.26118>; else goto <D.26119>;
  <D.26118>:
  D.26120 = 0;
  return D.26120;
  <D.26119>:
  <D.26116>:
  <D.26111>:
  <D.26109>:
  <D.26106>:
  <D.26102>:
  <D.26099>:
  D.26097 = class->parent;
  if (D.26097 != 0B) goto <D.26121>; else goto <D.26122>;
  <D.26121>:
  D.26097 = class->parent;
  D.26125 = D.26097->flags;
  D.26126 = D.26125 & 32;
  if (D.26126 != 0) goto <D.26123>; else goto <D.26127>;
  <D.26127>:
  D.26097 = class->parent;
  D.26128 = D.26097->byval_arg.type;
  if (D.26128 == 19) goto <D.26123>; else goto <D.26129>;
  <D.26129>:
  D.26097 = class->parent;
  D.26128 = D.26097->byval_arg.type;
  if (D.26128 == 30) goto <D.26123>; else goto <D.26124>;
  <D.26123>:
  D.26120 = 0;
  return D.26120;
  <D.26124>:
  D.26130 = class->generic_class;
  if (D.26130 == 0B) goto <D.26131>; else goto <D.26132>;
  <D.26131>:
  D.26097 = class->parent;
  D.26133 = D.26097->generic_container;
  if (D.26133 != 0B) goto <D.26134>; else goto <D.26135>;
  <D.26134>:
  D.26120 = 0;
  return D.26120;
  <D.26135>:
  <D.26132>:
  D.26097 = class->parent;
  D.26136 = D.26097->generic_class;
  if (D.26136 != 0B) goto <D.26137>; else goto <D.26138>;
  <D.26137>:
  D.26130 = class->generic_class;
  if (D.26130 == 0B) goto <D.26139>; else goto <D.26140>;
  <D.26139>:
  {
    struct MonoGenericContext * context;

    context = mono_class_get_context (class);
    D.26141 = class->generic_container;
    if (D.26141 != 0B) goto <D.26142>; else goto <D.26143>;
    <D.26142>:
    D.26141 = class->generic_container;
    context = &D.26141->context;
    <D.26143>:
    D.26097 = class->parent;
    D.26144 = &D.26097->byval_arg;
    D.26145 = mono_type_is_valid_type_in_context (D.26144, context);
    if (D.26145 == 0) goto <D.26146>; else goto <D.26147>;
    <D.26146>:
    D.26120 = 0;
    return D.26120;
    <D.26147>:
  }
  <D.26140>:
  <D.26138>:
  <D.26122>:
  D.26141 = class->generic_container;
  if (D.26141 != 0B) goto <D.26148>; else goto <D.26149>;
  <D.26148>:
  D.26103 = class->flags;
  D.26150 = D.26103 & 24;
  if (D.26150 == 16) goto <D.26151>; else goto <D.26152>;
  <D.26151>:
  D.26120 = 0;
  return D.26120;
  <D.26152>:
  <D.26149>:
  D.26141 = class->generic_container;
  if (D.26141 != 0B) goto <D.26153>; else goto <D.26154>;
  <D.26153>:
  D.26155 = verify_generic_parameters (class);
  if (D.26155 == 0) goto <D.26156>; else goto <D.26157>;
  <D.26156>:
  D.26120 = 0;
  return D.26120;
  <D.26157>:
  <D.26154>:
  D.26158 = verify_class_for_overlapping_reference_fields (class);
  if (D.26158 == 0) goto <D.26159>; else goto <D.26160>;
  <D.26159>:
  D.26120 = 0;
  return D.26120;
  <D.26160>:
  D.26130 = class->generic_class;
  if (D.26130 != 0B) goto <D.26161>; else goto <D.26162>;
  <D.26161>:
  D.26163 = mono_class_is_valid_generic_instantiation (0B, class);
  if (D.26163 == 0) goto <D.26164>; else goto <D.26165>;
  <D.26164>:
  D.26120 = 0;
  return D.26120;
  <D.26165>:
  <D.26162>:
  D.26130 = class->generic_class;
  if (D.26130 == 0B) goto <D.26166>; else goto <D.26167>;
  <D.26166>:
  D.26168 = verify_class_fields (class);
  if (D.26168 == 0) goto <D.26169>; else goto <D.26170>;
  <D.26169>:
  D.26120 = 0;
  return D.26120;
  <D.26170>:
  <D.26167>:
  D.26171 = BIT_FIELD_REF <*class, 32, 160>;
  D.26172 = D.26171 & 8;
  if (D.26172 != 0) goto <D.26173>; else goto <D.26174>;
  <D.26173>:
  D.26175 = verify_valuetype_layout (class);
  if (D.26175 == 0) goto <D.26176>; else goto <D.26177>;
  <D.26176>:
  D.26120 = 0;
  return D.26120;
  <D.26177>:
  <D.26174>:
  D.26178 = verify_interfaces (class);
  if (D.26178 == 0) goto <D.26179>; else goto <D.26180>;
  <D.26179>:
  D.26120 = 0;
  return D.26120;
  <D.26180>:
  D.26120 = 1;
  return D.26120;
}


verify_generic_parameters (struct MonoClass * class)
{
  <unnamed-signed:31> D.26182;
  unsigned int D.26183;
  struct MonoGenericParamFull * D.26184;
  unsigned int i.154;
  unsigned int D.26186;
  struct MonoGenericParamFull * D.26187;
  struct MonoClass * * D.26188;
  unsigned int D.26191;
  unsigned int D.26192;
  int D.26193;
  unsigned int D.26194;
  unsigned int D.26195;
  int D.26196;
  struct MonoGenericContext * D.26198;
  int D.26199;
  int D.26201;
  int D.26204;
  struct MonoGenericClass * D.26206;
  int D.26209;
  struct MonoClass * D.26211;
  int D.26212;
  gboolean D.26213;
  int i;
  struct MonoGenericContainer * gc;
  struct MonoBitSet * used_args;
  void fail = <<< error >>>;

  gc = class->generic_container;
  D.26182 = gc->type_argc;
  D.26183 = (unsigned int) D.26182;
  used_args = mono_bitset_new (D.26183, 0);
  i = 0;
  goto <D.19574>;
  <D.19573>:
  {
    struct MonoGenericParamInfo * param_info;
    struct MonoClass * * constraints;

    D.26184 = gc->type_params;
    i.154 = (unsigned int) i;
    D.26186 = i.154 * 32;
    D.26187 = D.26184 + D.26186;
    param_info = &D.26187->info;
    D.26188 = param_info->constraints;
    if (D.26188 == 0B) goto <D.26189>; else goto <D.26190>;
    <D.26189>:
    // predicted unlikely by continue predictor.
    goto <D.19566>;
    <D.26190>:
    mono_bitset_clear_all (used_args);
    i.154 = (unsigned int) i;
    D.26191 = i.154 / 32;
    D.26192 = used_args->data[D.26191];
    D.26193 = i & 31;
    D.26194 = 1 << D.26193;
    D.26195 = D.26192 | D.26194;
    used_args->data[D.26191] = D.26195;
    constraints = param_info->constraints;
    goto <D.19571>;
    <D.19570>:
    {
      struct MonoClass * ctr;
      struct MonoType * constraint_type;

      ctr = *constraints;
      constraint_type = &ctr->byval_arg;
      D.26196 = mono_class_can_access_class (class, ctr);
      if (D.26196 == 0) goto fail; else goto <D.26197>;
      <D.26197>:
      D.26198 = &gc->context;
      D.26199 = mono_type_is_valid_type_in_context (constraint_type, D.26198);
      if (D.26199 == 0) goto fail; else goto <D.26200>;
      <D.26200>:
      D.26201 = mono_type_is_generic_argument (constraint_type);
      if (D.26201 != 0) goto <D.26202>; else goto <D.26203>;
      <D.26202>:
      D.26204 = recursive_mark_constraint_args (used_args, gc, constraint_type);
      if (D.26204 == 0) goto fail; else goto <D.26205>;
      <D.26205>:
      <D.26203>:
      D.26206 = ctr->generic_class;
      if (D.26206 != 0B) goto <D.26207>; else goto <D.26208>;
      <D.26207>:
      D.26209 = mono_class_is_valid_generic_instantiation (0B, ctr);
      if (D.26209 == 0) goto fail; else goto <D.26210>;
      <D.26210>:
      <D.26208>:
    }
    constraints = constraints + 4;
    <D.19571>:
    D.26211 = *constraints;
    if (D.26211 != 0B) goto <D.19570>; else goto <D.19572>;
    <D.19572>:
  }
  <D.19566>:
  i = i + 1;
  <D.19574>:
  D.26182 = gc->type_argc;
  D.26212 = (int) D.26182;
  if (D.26212 > i) goto <D.19573>; else goto <D.19575>;
  <D.19575>:
  mono_bitset_free (used_args);
  D.26213 = 1;
  return D.26213;
  fail:
  mono_bitset_free (used_args);
  D.26213 = 0;
  return D.26213;
}


recursive_mark_constraint_args (struct MonoBitSet * used_args, struct MonoGenericContainer * gc, struct MonoType * type)
{
  int D.26215;
  _Bool D.26216;
  long int D.26217;
  long int D.26218;
  struct MonoGenericParam * D.26221;
  short unsigned int D.26222;
  unsigned int idx.155;
  unsigned int D.26224;
  unsigned int D.26225;
  int D.26226;
  unsigned int D.26227;
  unsigned int D.26228;
  gboolean D.26231;
  unsigned int D.26232;
  unsigned int D.26233;
  unsigned int D.26234;
  struct MonoGenericParamFull * D.26235;
  unsigned int D.26236;
  struct MonoGenericParamFull * D.26237;
  struct MonoClass * * D.26238;
  int D.26241;
  int D.26244;
  struct MonoClass * D.26247;
  int idx;
  struct MonoClass * * constraints;
  struct MonoGenericParamInfo * param_info;

  D.26215 = mono_type_is_generic_argument (type);
  D.26216 = D.26215 == 0;
  D.26217 = (long int) D.26216;
  D.26218 = __builtin_expect (D.26217, 0);
  if (D.26218 != 0) goto <D.26219>; else goto <D.26220>;
  <D.26219>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 6206, "mono_type_is_generic_argument (type)");
  <D.26220>:
  D.26221 = type->data.generic_param;
  D.26222 = D.26221->num;
  idx = (int) D.26222;
  idx.155 = (unsigned int) idx;
  D.26224 = idx.155 / 32;
  D.26225 = used_args->data[D.26224];
  D.26226 = idx & 31;
  D.26227 = 1 << D.26226;
  D.26228 = D.26225 & D.26227;
  if (D.26228 != 0) goto <D.26229>; else goto <D.26230>;
  <D.26229>:
  D.26231 = 0;
  return D.26231;
  <D.26230>:
  idx.155 = (unsigned int) idx;
  D.26232 = idx.155 / 32;
  D.26233 = used_args->data[D.26232];
  D.26226 = idx & 31;
  D.26227 = 1 << D.26226;
  D.26234 = D.26233 | D.26227;
  used_args->data[D.26232] = D.26234;
  D.26235 = gc->type_params;
  idx.155 = (unsigned int) idx;
  D.26236 = idx.155 * 32;
  D.26237 = D.26235 + D.26236;
  param_info = &D.26237->info;
  D.26238 = param_info->constraints;
  if (D.26238 == 0B) goto <D.26239>; else goto <D.26240>;
  <D.26239>:
  D.26231 = 1;
  return D.26231;
  <D.26240>:
  constraints = param_info->constraints;
  goto <D.19556>;
  <D.19555>:
  {
    struct MonoClass * ctr;
    struct MonoType * constraint_type;

    ctr = *constraints;
    constraint_type = &ctr->byval_arg;
    D.26241 = mono_type_is_generic_argument (constraint_type);
    if (D.26241 != 0) goto <D.26242>; else goto <D.26243>;
    <D.26242>:
    D.26244 = recursive_mark_constraint_args (used_args, gc, constraint_type);
    if (D.26244 == 0) goto <D.26245>; else goto <D.26246>;
    <D.26245>:
    D.26231 = 0;
    return D.26231;
    <D.26246>:
    <D.26243>:
  }
  constraints = constraints + 4;
  <D.19556>:
  D.26247 = *constraints;
  if (D.26247 != 0B) goto <D.19555>; else goto <D.19557>;
  <D.19557>:
  D.26231 = 1;
  return D.26231;
}


verify_class_for_overlapping_reference_fields (struct MonoClass * class)
{
  unsigned int D.26249;
  unsigned int D.26250;
  gboolean D.26253;
  struct MonoType * D.26254;
  int D.26255;
  _Bool D.26256;
  short unsigned int D.26260;
  int D.26261;
  int D.26262;
  int D.19474;
  int iftmp.156;
  int D.19473;
  const char[9] * D.26267;
  unsigned char D.26268;
  int D.26269;
  unsigned char D.26270;
  int D.26271;
  const unsigned char * D.26276;
  unsigned char D.26277;
  int D.26278;
  const unsigned char * D.26279;
  unsigned char D.26280;
  int D.26281;
  const unsigned char * D.26286;
  unsigned char D.26287;
  int D.26288;
  const unsigned char * D.26289;
  unsigned char D.26290;
  int D.26291;
  const unsigned char * D.26296;
  unsigned char D.26297;
  int D.26298;
  const unsigned char * D.26299;
  unsigned char D.26300;
  int D.26301;
  const char * D.26303;
  int D.26304;
  struct MonoClassField * D.26305;
  unsigned int j.157;
  unsigned int D.26307;
  struct MonoType * D.26312;
  short unsigned int D.26313;
  int D.26314;
  int D.26315;
  int D.19486;
  int iftmp.158;
  int D.19485;
  unsigned char D.26320;
  int D.26321;
  const unsigned char * D.26326;
  unsigned char D.26327;
  int D.26328;
  const unsigned char * D.26333;
  unsigned char D.26334;
  int D.26335;
  const unsigned char * D.26340;
  unsigned char D.26341;
  int D.26342;
  const char * D.26344;
  int D.26346;
  int D.26347;
  int D.26350;
  int D.26353;
  int D.26354;
  unsigned int j.159;
  unsigned int D.26365;
  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.26249 = class->flags;
      D.26250 = D.26249 & 24;
      if (D.26250 != 16) goto <D.26251>; else goto <D.26252>;
      <D.26251>:
      D.26253 = 1;
      return D.26253;
      <D.26252>:
      goto <D.19475>;
      <D.19491>:
      {
        int fieldEnd;
        gboolean is_valuetype;

        fieldEnd = get_field_end (field);
        D.26254 = field->type;
        D.26255 = mono_type_is_reference (D.26254);
        D.26256 = D.26255 == 0;
        is_valuetype = (gboolean) D.26256;
        i = i + 1;
        D.26254 = field->type;
        D.26260 = D.26254->attrs;
        D.26261 = (int) D.26260;
        D.26262 = D.26261 & 1536;
        if (D.26262 != 0) goto <D.26263>; else goto <D.26257>;
        <D.26263>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.26267 = "_Deleted";
            D.26268 = MEM[(const unsigned char *)D.26267];
            D.26269 = (int) D.26268;
            D.26270 = *__s2;
            D.26271 = (int) D.26270;
            __result = D.26269 - D.26271;
            {
              if (__s2_len != 0) goto <D.26272>; else goto <D.26273>;
              <D.26272>:
              if (__result == 0) goto <D.26274>; else goto <D.26275>;
              <D.26274>:
              D.26276 = &MEM[(void *)"_Deleted" + 1B];
              D.26277 = *D.26276;
              D.26278 = (int) D.26277;
              D.26279 = __s2 + 1;
              D.26280 = *D.26279;
              D.26281 = (int) D.26280;
              __result = D.26278 - D.26281;
              if (__s2_len > 1) goto <D.26282>; else goto <D.26283>;
              <D.26282>:
              if (__result == 0) goto <D.26284>; else goto <D.26285>;
              <D.26284>:
              D.26286 = &MEM[(void *)"_Deleted" + 2B];
              D.26287 = *D.26286;
              D.26288 = (int) D.26287;
              D.26289 = __s2 + 2;
              D.26290 = *D.26289;
              D.26291 = (int) D.26290;
              __result = D.26288 - D.26291;
              if (__s2_len > 2) goto <D.26292>; else goto <D.26293>;
              <D.26292>:
              if (__result == 0) goto <D.26294>; else goto <D.26295>;
              <D.26294>:
              D.26296 = &MEM[(void *)"_Deleted" + 3B];
              D.26297 = *D.26296;
              D.26298 = (int) D.26297;
              D.26299 = __s2 + 3;
              D.26300 = *D.26299;
              D.26301 = (int) D.26300;
              __result = D.26298 - D.26301;
              <D.26295>:
              <D.26293>:
              <D.26285>:
              <D.26283>:
              <D.26275>:
              <D.26273>:
            }
            D.19473 = __result;
          }
          iftmp.156 = -D.19473;
          goto <D.26302>;
          <D.26266>:
          D.26303 = mono_field_get_name (field);
          iftmp.156 = __builtin_strcmp (D.26303, "_Deleted");
          <D.26302>:
          D.19474 = iftmp.156;
        }
        if (D.19474 == 0) goto <D.26258>; else goto <D.26257>;
        <D.26257>:
        D.26254 = field->type;
        D.26260 = D.26254->attrs;
        D.26261 = (int) D.26260;
        D.26304 = D.26261 & 16;
        if (D.26304 != 0) goto <D.26258>; else goto <D.26259>;
        <D.26258>:
        // predicted unlikely by continue predictor.
        goto <D.19475>;
        <D.26259>:
        j = i;
        goto <D.19489>;
        <D.19488>:
        {
          struct MonoClassField * other;
          int otherEnd;

          D.26305 = class->fields;
          j.157 = (unsigned int) j;
          D.26307 = j.157 * 16;
          other = D.26305 + D.26307;
          otherEnd = get_field_end (other);
          D.26312 = other->type;
          D.26313 = D.26312->attrs;
          D.26314 = (int) D.26313;
          D.26315 = D.26314 & 1536;
          if (D.26315 != 0) goto <D.26316>; else goto <D.26308>;
          <D.26316>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = mono_field_get_name (other);
              D.26267 = "_Deleted";
              D.26268 = MEM[(const unsigned char *)D.26267];
              D.26269 = (int) D.26268;
              D.26320 = *__s2;
              D.26321 = (int) D.26320;
              __result = D.26269 - D.26321;
              {
                if (__s2_len != 0) goto <D.26322>; else goto <D.26323>;
                <D.26322>:
                if (__result == 0) goto <D.26324>; else goto <D.26325>;
                <D.26324>:
                D.26276 = &MEM[(void *)"_Deleted" + 1B];
                D.26277 = *D.26276;
                D.26278 = (int) D.26277;
                D.26326 = __s2 + 1;
                D.26327 = *D.26326;
                D.26328 = (int) D.26327;
                __result = D.26278 - D.26328;
                if (__s2_len > 1) goto <D.26329>; else goto <D.26330>;
                <D.26329>:
                if (__result == 0) goto <D.26331>; else goto <D.26332>;
                <D.26331>:
                D.26286 = &MEM[(void *)"_Deleted" + 2B];
                D.26287 = *D.26286;
                D.26288 = (int) D.26287;
                D.26333 = __s2 + 2;
                D.26334 = *D.26333;
                D.26335 = (int) D.26334;
                __result = D.26288 - D.26335;
                if (__s2_len > 2) goto <D.26336>; else goto <D.26337>;
                <D.26336>:
                if (__result == 0) goto <D.26338>; else goto <D.26339>;
                <D.26338>:
                D.26296 = &MEM[(void *)"_Deleted" + 3B];
                D.26297 = *D.26296;
                D.26298 = (int) D.26297;
                D.26340 = __s2 + 3;
                D.26341 = *D.26340;
                D.26342 = (int) D.26341;
                __result = D.26298 - D.26342;
                <D.26339>:
                <D.26337>:
                <D.26332>:
                <D.26330>:
                <D.26325>:
                <D.26323>:
              }
              D.19485 = __result;
            }
            iftmp.158 = -D.19485;
            goto <D.26343>;
            <D.26319>:
            D.26344 = mono_field_get_name (other);
            iftmp.158 = __builtin_strcmp (D.26344, "_Deleted");
            <D.26343>:
            D.19486 = iftmp.158;
          }
          if (D.19486 == 0) goto <D.26309>; else goto <D.26308>;
          <D.26308>:
          if (is_valuetype != 0) goto <D.26345>; else goto <D.26310>;
          <D.26345>:
          D.26312 = other->type;
          D.26346 = mono_type_is_reference (D.26312);
          if (D.26346 == 0) goto <D.26309>; else goto <D.26310>;
          <D.26310>:
          D.26312 = other->type;
          D.26313 = D.26312->attrs;
          D.26314 = (int) D.26313;
          D.26347 = D.26314 & 16;
          if (D.26347 != 0) goto <D.26309>; else goto <D.26311>;
          <D.26309>:
          // predicted unlikely by continue predictor.
          goto <D.19487>;
          <D.26311>:
          if (is_valuetype == 0) goto <D.26348>; else goto <D.26349>;
          <D.26348>:
          D.26312 = other->type;
          D.26350 = mono_type_is_reference (D.26312);
          if (D.26350 != 0) goto <D.26351>; else goto <D.26352>;
          <D.26351>:
          D.26353 = field->offset;
          D.26354 = other->offset;
          if (D.26353 == D.26354) goto <D.26355>; else goto <D.26356>;
          <D.26355>:
          if (is_fulltrust != 0) goto <D.26357>; else goto <D.26358>;
          <D.26357>:
          // predicted unlikely by continue predictor.
          goto <D.19487>;
          <D.26358>:
          <D.26356>:
          <D.26352>:
          <D.26349>:
          D.26353 = field->offset;
          if (D.26353 < otherEnd) goto <D.26362>; else goto <D.26359>;
          <D.26362>:
          if (otherEnd <= fieldEnd) goto <D.26360>; else goto <D.26359>;
          <D.26359>:
          D.26354 = other->offset;
          D.26353 = field->offset;
          if (D.26354 >= D.26353) goto <D.26363>; else goto <D.26361>;
          <D.26363>:
          D.26354 = other->offset;
          if (D.26354 < fieldEnd) goto <D.26360>; else goto <D.26361>;
          <D.26360>:
          D.26253 = 0;
          return D.26253;
          <D.26361>:
        }
        <D.19487>:
        j = j + 1;
        <D.19489>:
        j.159 = (unsigned int) j;
        D.26365 = class->field.count;
        if (j.159 < D.26365) goto <D.19488>; else goto <D.19490>;
        <D.19490>:
      }
      <D.19475>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.19491>; else goto <D.19492>;
      <D.19492>:
      D.26253 = 1;
      return D.26253;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


get_field_end (struct MonoClassField * field)
{
  struct MonoType * D.26368;
  int D.26371;
  int D.26372;
  int align;
  int size;

  try
    {
      D.26368 = field->type;
      size = mono_type_size (D.26368, &align);
      if (size == 0) goto <D.26369>; else goto <D.26370>;
      <D.26369>:
      size = 4;
      <D.26370>:
      D.26372 = field->offset;
      D.26371 = D.26372 + size;
      return D.26371;
    }
  finally
    {
      align = {CLOBBER};
    }
}


verify_class_fields (struct MonoClass * class)
{
  struct MonoGenericContainer * D.26375;
  struct MonoType * D.26378;
  int D.26379;
  gboolean D.26382;
  void * D.26383;
  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.26375 = class->generic_container;
      if (D.26375 != 0B) goto <D.26376>; else goto <D.26377>;
      <D.26376>:
      D.26375 = class->generic_container;
      context = &D.26375->context;
      <D.26377>:
      goto <D.19520>;
      <D.19519>:
      D.26378 = field->type;
      D.26379 = mono_type_is_valid_type_in_context (D.26378, context);
      if (D.26379 == 0) goto <D.26380>; else goto <D.26381>;
      <D.26380>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26382 = 0;
      return D.26382;
      <D.26381>:
      D.26383 = monoeg_g_hash_table_lookup (unique_fields, field);
      if (D.26383 != 0B) goto <D.26384>; else goto <D.26385>;
      <D.26384>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26382 = 0;
      return D.26382;
      <D.26385>:
      monoeg_g_hash_table_insert_replace (unique_fields, field, field, 0);
      <D.19520>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.19519>; else goto <D.19521>;
      <D.19521>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26382 = 1;
      return D.26382;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


field_equals (const void * _a, const void * _b)
{
  gboolean D.26388;
  int iftmp.160;
  int D.19511;
  const char * D.26392;
  const char * D.26393;
  struct MonoType * D.26395;
  struct MonoType * D.26396;
  int D.26397;
  const struct MonoClassField * a;
  const struct MonoClassField * b;

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

    D.26392 = a->name;
    D.26393 = b->name;
    D.19511 = __builtin_strcmp (D.26392, D.26393);
  }
  if (D.19511 == 0) goto <D.26394>; else goto <D.26390>;
  <D.26394>:
  D.26395 = a->type;
  D.26396 = b->type;
  D.26397 = mono_metadata_type_equal (D.26395, D.26396);
  if (D.26397 != 0) goto <D.26398>; else goto <D.26390>;
  <D.26398>:
  iftmp.160 = 1;
  goto <D.26391>;
  <D.26390>:
  iftmp.160 = 0;
  <D.26391>:
  D.26388 = iftmp.160;
  return D.26388;
}


field_hash (const void * key)
{
  guint D.26400;
  const char * D.26401;
  unsigned int D.26402;
  struct MonoType * D.26403;
  unsigned int D.26404;
  const struct MonoClassField * field;

  field = key;
  D.26401 = field->name;
  D.26402 = monoeg_g_str_hash (D.26401);
  D.26403 = field->type;
  D.26404 = mono_metadata_type_hash (D.26403);
  D.26400 = D.26402 ^ D.26404;
  return D.26400;
}


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

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


verify_valuetype_layout_with_target (struct MonoClass * class, struct MonoClass * target_class)
{
  unsigned int D.26408;
  unsigned int D.26409;
  gboolean D.26412;
  unsigned char D.26413;
  unsigned int type.161;
  unsigned int D.26417;
  unsigned int D.26419;
  struct MonoType * D.26420;
  short unsigned int D.26423;
  int D.26424;
  int D.26425;
  struct MonoClass * D.26428;
  int D.26433;
  int type;
  void * iter;
  struct MonoClassField * field;
  struct MonoClass * field_class;

  try
    {
      iter = 0B;
      D.26408 = BIT_FIELD_REF <*class, 32, 160>;
      D.26409 = D.26408 & 8;
      if (D.26409 == 0) goto <D.26410>; else goto <D.26411>;
      <D.26410>:
      D.26412 = 1;
      return D.26412;
      <D.26411>:
      D.26413 = class->byval_arg.type;
      type = (int) D.26413;
      type.161 = (unsigned int) type;
      D.26417 = type.161 + 4294967294;
      if (D.26417 <= 11) goto <D.26414>; else goto <D.26418>;
      <D.26418>:
      type.161 = (unsigned int) type;
      D.26419 = type.161 + 4294967272;
      if (D.26419 <= 1) goto <D.26414>; else goto <D.26415>;
      <D.26414>:
      D.26412 = 1;
      return D.26412;
      <D.26415>:
      goto <D.19538>;
      <D.19539>:
      D.26420 = field->type;
      if (D.26420 == 0B) goto <D.26421>; else goto <D.26422>;
      <D.26421>:
      D.26412 = 0;
      return D.26412;
      <D.26422>:
      D.26420 = field->type;
      D.26423 = D.26420->attrs;
      D.26424 = (int) D.26423;
      D.26425 = D.26424 & 272;
      if (D.26425 != 0) goto <D.26426>; else goto <D.26427>;
      <D.26426>:
      // predicted unlikely by continue predictor.
      goto <D.19538>;
      <D.26427>:
      D.26420 = field->type;
      D.26428 = mono_class_from_mono_type (D.26420);
      field_class = mono_class_get_generic_type_definition (D.26428);
      if (field_class == target_class) goto <D.26429>; else goto <D.26431>;
      <D.26431>:
      if (class == field_class) goto <D.26429>; else goto <D.26432>;
      <D.26432>:
      D.26433 = verify_valuetype_layout_with_target (field_class, target_class);
      if (D.26433 == 0) goto <D.26429>; else goto <D.26430>;
      <D.26429>:
      D.26412 = 0;
      return D.26412;
      <D.26430>:
      <D.19538>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.19539>; else goto <D.19540>;
      <D.19540>:
      D.26412 = 1;
      return D.26412;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


verify_interfaces (struct MonoClass * class)
{
  struct MonoClass * * D.26436;
  unsigned int i.162;
  unsigned int D.26438;
  struct MonoClass * * D.26439;
  unsigned int D.26440;
  unsigned int D.26441;
  gboolean D.26444;
  short unsigned int D.26445;
  int D.26446;
  int i;

  i = 0;
  goto <D.19528>;
  <D.19527>:
  {
    struct MonoClass * iface;

    D.26436 = class->interfaces;
    i.162 = (unsigned int) i;
    D.26438 = i.162 * 4;
    D.26439 = D.26436 + D.26438;
    iface = *D.26439;
    D.26440 = iface->flags;
    D.26441 = D.26440 & 32;
    if (D.26441 == 0) goto <D.26442>; else goto <D.26443>;
    <D.26442>:
    D.26444 = 0;
    return D.26444;
    <D.26443>:
  }
  i = i + 1;
  <D.19528>:
  D.26445 = class->interface_count;
  D.26446 = (int) D.26445;
  if (D.26446 > i) goto <D.19527>; else goto <D.19529>;
  <D.19529>:
  D.26444 = 1;
  return D.26444;
}


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

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


mono_verifier_is_method_valid_generic_instantiation (struct MonoMethod * method)
{
  unsigned int D.26450;
  unsigned int D.26451;
  gboolean D.26454;

  D.26450 = BIT_FIELD_REF <*method, 32, 160>;
  D.26451 = D.26450 & 4096;
  if (D.26451 == 0) goto <D.26452>; else goto <D.26453>;
  <D.26452>:
  D.26454 = 1;
  return D.26454;
  <D.26453>:
  D.26454 = mono_method_is_valid_generic_instantiation (0B, method);
  return D.26454;
}


