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

  tmp = list;
  goto <D.18174>;
  <D.18173>:
  info = tmp->data;
  D.19979 = info->info.message;
  monoeg_g_free (D.19979);
  monoeg_g_free (info);
  tmp = tmp->next;
  <D.18174>:
  if (tmp != 0B) goto <D.18173>; else goto <D.18175>;
  <D.18175>:
  monoeg_g_slist_free (list);
}


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

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


mono_delegate_signature_equal (struct MonoMethodSignature * delegate_sig, struct MonoMethodSignature * method_sig, gboolean is_static_ldftn)
{
  _Bool D.19982;
  short unsigned int D.19983;
  int D.19984;
  int D.19985;
  short unsigned int D.19986;
  int D.19987;
  gboolean D.19990;
  unsigned char D.19991;
  unsigned char D.19992;
  unsigned char D.19993;
  unsigned char D.19994;
  int D.19997;
  int D.19998;
  struct MonoType * D.20001;
  struct MonoType * D.20002;
  int D.20003;
  int i;
  int method_offset;

  D.19982 = is_static_ldftn != 0;
  method_offset = (int) D.19982;
  D.19983 = delegate_sig->param_count;
  D.19984 = (int) D.19983;
  D.19985 = D.19984 + method_offset;
  D.19986 = method_sig->param_count;
  D.19987 = (int) D.19986;
  if (D.19985 != D.19987) goto <D.19988>; else goto <D.19989>;
  <D.19988>:
  D.19990 = 0;
  return D.19990;
  <D.19989>:
  D.19991 = BIT_FIELD_REF <*delegate_sig, 8, 112>;
  D.19992 = BIT_FIELD_REF <*method_sig, 8, 112>;
  D.19993 = D.19991 ^ D.19992;
  D.19994 = D.19993 & 63;
  if (D.19994 != 0) goto <D.19995>; else goto <D.19996>;
  <D.19995>:
  D.19990 = 0;
  return D.19990;
  <D.19996>:
  i = 0;
  goto <D.18656>;
  <D.18655>:
  {
    struct MonoType * p1;
    struct MonoType * p2;

    p1 = delegate_sig->params[i];
    D.19997 = i + method_offset;
    p2 = method_sig->params[D.19997];
    D.19998 = mono_delegate_param_equal (p1, p2);
    if (D.19998 == 0) goto <D.19999>; else goto <D.20000>;
    <D.19999>:
    D.19990 = 0;
    return D.19990;
    <D.20000>:
  }
  i = i + 1;
  <D.18656>:
  D.19983 = delegate_sig->param_count;
  D.19984 = (int) D.19983;
  if (D.19984 > i) goto <D.18655>; else goto <D.18657>;
  <D.18657>:
  D.20001 = method_sig->ret;
  D.20002 = delegate_sig->ret;
  D.20003 = mono_delegate_ret_equal (D.20002, D.20001);
  if (D.20003 == 0) goto <D.20004>; else goto <D.20005>;
  <D.20004>:
  D.19990 = 0;
  return D.19990;
  <D.20005>:
  D.19990 = 1;
  return D.19990;
}


mono_delegate_param_equal (struct MonoType * delegate, struct MonoType * method)
{
  int D.20007;
  gboolean D.20010;

  D.20007 = mono_metadata_type_equal_full (delegate, method, 1);
  if (D.20007 != 0) goto <D.20008>; else goto <D.20009>;
  <D.20008>:
  D.20010 = 1;
  return D.20010;
  <D.20009>:
  D.20010 = mono_delegate_type_equal (method, delegate);
  return D.20010;
}


mono_delegate_type_equal (struct MonoType * target, struct MonoType * candidate)
{
  unsigned char D.20012;
  unsigned char D.20013;
  unsigned char D.20014;
  unsigned char D.20015;
  gboolean D.20018;
  unsigned char D.20019;
  int D.20020;
  unsigned char D.20021;
  _Bool D.20022;
  struct MonoType * D.20025;
  struct MonoType * D.20026;
  struct MonoMethodSignature * D.20029;
  struct MonoMethodSignature * D.20030;
  struct MonoClass * D.20031;
  struct MonoClass * D.20032;
  struct MonoClass * D.20035;
  struct MonoClass * D.20036;
  struct MonoClass * D.20037;
  struct MonoClass * D.20038;
  struct MonoClass * D.20041;
  struct MonoClass * D.20042;
  _Bool D.20043;
  int iftmp.0;
  struct MonoGenericParam * D.20048;
  short unsigned int D.20049;
  struct MonoGenericParam * D.20050;
  short unsigned int D.20051;
  int iftmp.1;

  D.20012 = BIT_FIELD_REF <*candidate, 8, 88>;
  D.20013 = BIT_FIELD_REF <*target, 8, 88>;
  D.20014 = D.20012 ^ D.20013;
  D.20015 = D.20014 & 64;
  if (D.20015 != 0) goto <D.20016>; else goto <D.20017>;
  <D.20016>:
  D.20018 = 0;
  return D.20018;
  <D.20017>:
  D.20019 = target->type;
  D.20020 = (int) D.20019;
  switch (D.20020) <default: <D.18637>, case 1: <D.18608>, case 2: <D.18611>, case 3: <D.18614>, case 4: <D.18609>, case 5: <D.18610>, case 6: <D.18612>, case 7: <D.18613>, case 8: <D.18615>, case 9: <D.18616>, case 10: <D.18617>, case 11: <D.18618>, case 12: <D.18619>, case 13: <D.18620>, case 14: <D.18623>, case 15: <D.18625>, case 17: <D.18634>, case 18: <D.18631>, case 19: <D.18635>, case 20: <D.18633>, case 21: <D.18627>, case 22: <D.18624>, case 24: <D.18621>, case 25: <D.18622>, case 27: <D.18626>, case 28: <D.18630>, case 29: <D.18632>, case 30: <D.18636>>
  <D.18608>:
  <D.18609>:
  <D.18610>:
  <D.18611>:
  <D.18612>:
  <D.18613>:
  <D.18614>:
  <D.18615>:
  <D.18616>:
  <D.18617>:
  <D.18618>:
  <D.18619>:
  <D.18620>:
  <D.18621>:
  <D.18622>:
  <D.18623>:
  <D.18624>:
  D.20021 = candidate->type;
  D.20019 = target->type;
  D.20022 = D.20021 == D.20019;
  D.20018 = (gboolean) D.20022;
  return D.20018;
  <D.18625>:
  D.20021 = candidate->type;
  if (D.20021 != 15) goto <D.20023>; else goto <D.20024>;
  <D.20023>:
  D.20018 = 0;
  return D.20018;
  <D.20024>:
  D.20025 = candidate->data.type;
  D.20026 = target->data.type;
  D.20018 = mono_delegate_type_equal (D.20026, D.20025);
  return D.20018;
  <D.18626>:
  D.20021 = candidate->type;
  if (D.20021 != 27) goto <D.20027>; else goto <D.20028>;
  <D.20027>:
  D.20018 = 0;
  return D.20018;
  <D.20028>:
  D.20029 = mono_type_get_signature (candidate);
  D.20030 = mono_type_get_signature (target);
  D.20018 = mono_delegate_signature_equal (D.20030, D.20029, 0);
  return D.20018;
  <D.18627>:
  {
    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.20018 = verifier_class_is_assignable_from (target_klass, candidate_klass);
    return D.20018;
  }
  <D.18630>:
  D.20018 = mono_type_is_reference (candidate);
  return D.20018;
  <D.18631>:
  D.20031 = mono_class_from_mono_type (candidate);
  D.20032 = target->data.klass;
  D.20018 = verifier_class_is_assignable_from (D.20032, D.20031);
  return D.20018;
  <D.18632>:
  D.20021 = candidate->type;
  if (D.20021 != 29) goto <D.20033>; else goto <D.20034>;
  <D.20033>:
  D.20018 = 0;
  return D.20018;
  <D.20034>:
  D.20035 = mono_class_from_mono_type (candidate);
  D.20036 = D.20035->element_class;
  D.20037 = mono_class_from_mono_type (target);
  D.20038 = D.20037->element_class;
  D.20018 = verifier_class_is_assignable_from (D.20038, D.20036);
  return D.20018;
  <D.18633>:
  D.20021 = candidate->type;
  if (D.20021 != 20) goto <D.20039>; else goto <D.20040>;
  <D.20039>:
  D.20018 = 0;
  return D.20018;
  <D.20040>:
  D.20018 = is_array_type_compatible (target, candidate);
  return D.20018;
  <D.18634>:
  D.20041 = mono_class_from_mono_type (candidate);
  D.20042 = mono_class_from_mono_type (target);
  D.20043 = D.20041 == D.20042;
  D.20018 = (gboolean) D.20043;
  return D.20018;
  <D.18635>:
  D.20021 = candidate->type;
  if (D.20021 == 19) goto <D.20047>; else goto <D.20045>;
  <D.20047>:
  D.20048 = target->data.generic_param;
  D.20049 = D.20048->num;
  D.20050 = candidate->data.generic_param;
  D.20051 = D.20050->num;
  if (D.20049 == D.20051) goto <D.20052>; else goto <D.20045>;
  <D.20052>:
  iftmp.0 = 1;
  goto <D.20046>;
  <D.20045>:
  iftmp.0 = 0;
  <D.20046>:
  D.20018 = iftmp.0;
  return D.20018;
  D.20018 = 0;
  return D.20018;
  <D.18636>:
  D.20021 = candidate->type;
  if (D.20021 == 30) goto <D.20056>; else goto <D.20054>;
  <D.20056>:
  D.20048 = target->data.generic_param;
  D.20049 = D.20048->num;
  D.20050 = candidate->data.generic_param;
  D.20051 = D.20050->num;
  if (D.20049 == D.20051) goto <D.20057>; else goto <D.20054>;
  <D.20057>:
  iftmp.1 = 1;
  goto <D.20055>;
  <D.20054>:
  iftmp.1 = 0;
  <D.20055>:
  D.20018 = iftmp.1;
  return D.20018;
  D.20018 = 0;
  return D.20018;
  <D.18637>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "verify.c", 2594);
  D.20018 = 0;
  return D.20018;
}


verifier_class_is_assignable_from (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.20061;
  int D.20062;
  unsigned int D.20068;
  unsigned int D.20069;
  unsigned char D.20071;
  unsigned int D.20075;
  unsigned int D.20076;
  unsigned char D.20078;
  int D.20080;
  unsigned char D.20083;
  struct MonoClass * D.20086;
  struct MonoClass * D.20087;
  int D.20088;
  struct MonoClass * D.20091;
  int D.20092;
  struct MonoClass * D.20095;
  int D.20096;
  struct MonoClass * D.20099;
  int D.20100;
  struct MonoClass * D.20103;
  int D.20104;
  int D.20108;
  struct MonoClass * * D.20111;
  long unsigned int D.20112;
  long unsigned int D.20113;
  struct MonoClass * * D.20114;
  int D.20115;
  short unsigned int D.20118;
  int D.20119;
  struct MonoClass * * D.20120;
  struct MonoClass * * D.20121;
  int D.20122;
  short unsigned int D.20125;
  int D.20126;
  struct MonoClass * D.20128;
  unsigned char D.20129;
  unsigned char D.20130;
  int D.20133;
  int D.20136;
  struct MonoGenericClass * D.20144;
  struct MonoClass * D.20148;
  struct MonoClass * D.20151;
  struct MonoGenericInst * D.20154;
  struct MonoType * D.20155;
  struct MonoClass * iface_gtd;

  if (target == candidate) goto <D.20059>; else goto <D.20060>;
  <D.20059>:
  D.20061 = 1;
  return D.20061;
  <D.20060>:
  D.20062 = mono_class_has_variant_generic_params (target);
  if (D.20062 != 0) goto <D.20063>; else goto <D.20064>;
  <D.20063>:
  D.20068 = target->flags;
  D.20069 = D.20068 & 32;
  if (D.20069 != 0) goto <D.20065>; else goto <D.20070>;
  <D.20070>:
  D.20071 = target->byval_arg.type;
  if (D.20071 == 19) goto <D.20065>; else goto <D.20072>;
  <D.20072>:
  D.20071 = target->byval_arg.type;
  if (D.20071 == 30) goto <D.20065>; else goto <D.20066>;
  <D.20065>:
  D.20075 = candidate->flags;
  D.20076 = D.20075 & 32;
  if (D.20076 != 0) goto <D.20073>; else goto <D.20077>;
  <D.20077>:
  D.20078 = candidate->byval_arg.type;
  if (D.20078 == 19) goto <D.20073>; else goto <D.20079>;
  <D.20079>:
  D.20078 = candidate->byval_arg.type;
  if (D.20078 == 30) goto <D.20073>; else goto <D.20074>;
  <D.20073>:
  D.20080 = mono_class_is_variant_compatible (target, candidate, 1);
  if (D.20080 != 0) goto <D.20081>; else goto <D.20082>;
  <D.20081>:
  D.20061 = 1;
  return D.20061;
  <D.20082>:
  <D.20074>:
  D.20083 = candidate->rank;
  if (D.20083 == 1) goto <D.20084>; else goto <D.20085>;
  <D.20084>:
  D.20086 = candidate->element_class;
  D.20087 = mono_defaults.generic_ilist_class;
  D.20088 = verifier_inflate_and_check_compat (target, D.20087, D.20086);
  if (D.20088 != 0) goto <D.20089>; else goto <D.20090>;
  <D.20089>:
  D.20061 = 1;
  return D.20061;
  <D.20090>:
  D.20086 = candidate->element_class;
  D.20091 = get_icollection_class ();
  D.20092 = verifier_inflate_and_check_compat (target, D.20091, D.20086);
  if (D.20092 != 0) goto <D.20093>; else goto <D.20094>;
  <D.20093>:
  D.20061 = 1;
  return D.20061;
  <D.20094>:
  D.20086 = candidate->element_class;
  D.20095 = get_ienumerable_class ();
  D.20096 = verifier_inflate_and_check_compat (target, D.20095, D.20086);
  if (D.20096 != 0) goto <D.20097>; else goto <D.20098>;
  <D.20097>:
  D.20061 = 1;
  return D.20061;
  <D.20098>:
  D.20086 = candidate->element_class;
  D.20099 = get_ireadonlylist_class ();
  D.20100 = verifier_inflate_and_check_compat (target, D.20099, D.20086);
  if (D.20100 != 0) goto <D.20101>; else goto <D.20102>;
  <D.20101>:
  D.20061 = 1;
  return D.20061;
  <D.20102>:
  D.20086 = candidate->element_class;
  D.20103 = get_ireadonlycollection_class ();
  D.20104 = verifier_inflate_and_check_compat (target, D.20103, D.20086);
  if (D.20104 != 0) goto <D.20105>; else goto <D.20106>;
  <D.20105>:
  D.20061 = 1;
  return D.20061;
  <D.20106>:
  goto <D.20107>;
  <D.20085>:
  {
    struct MonoError error;
    int i;

    try
      {
        goto <D.18504>;
        <D.18503>:
        mono_class_setup_interfaces (candidate, &error);
        D.20108 = mono_error_ok (&error);
        if (D.20108 == 0) goto <D.20109>; else goto <D.20110>;
        <D.20109>:
        mono_error_cleanup (&error);
        D.20061 = 0;
        return D.20061;
        <D.20110>:
        i = 0;
        goto <D.18497>;
        <D.18496>:
        {
          struct MonoClass * iface;

          D.20111 = candidate->interfaces_packed;
          D.20112 = (long unsigned int) i;
          D.20113 = D.20112 * 8;
          D.20114 = D.20111 + D.20113;
          iface = *D.20114;
          D.20115 = mono_class_is_variant_compatible (target, iface, 1);
          if (D.20115 != 0) goto <D.20116>; else goto <D.20117>;
          <D.20116>:
          D.20061 = 1;
          return D.20061;
          <D.20117>:
        }
        i = i + 1;
        <D.18497>:
        D.20118 = candidate->interface_offsets_count;
        D.20119 = (int) D.20118;
        if (D.20119 > i) goto <D.18496>; else goto <D.18498>;
        <D.18498>:
        i = 0;
        goto <D.18501>;
        <D.18500>:
        {
          struct MonoClass * iface;

          D.20120 = candidate->interfaces;
          D.20112 = (long unsigned int) i;
          D.20113 = D.20112 * 8;
          D.20121 = D.20120 + D.20113;
          iface = *D.20121;
          D.20122 = mono_class_is_variant_compatible (target, iface, 1);
          if (D.20122 != 0) goto <D.20123>; else goto <D.20124>;
          <D.20123>:
          D.20061 = 1;
          return D.20061;
          <D.20124>:
        }
        i = i + 1;
        <D.18501>:
        D.20125 = candidate->interface_count;
        D.20126 = (int) D.20125;
        if (D.20126 > i) goto <D.18500>; else goto <D.18502>;
        <D.18502>:
        candidate = candidate->parent;
        <D.18504>:
        if (candidate != 0B) goto <D.20127>; else goto <D.18505>;
        <D.20127>:
        D.20128 = mono_defaults.object_class;
        if (D.20128 != candidate) goto <D.18503>; else goto <D.18505>;
        <D.18505>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.20107>:
  goto <D.20067>;
  <D.20066>:
  D.20129 = BIT_FIELD_REF <*target, 8, 280>;
  D.20130 = D.20129 & 1;
  if (D.20130 != 0) goto <D.20131>; else goto <D.20132>;
  <D.20131>:
  D.20133 = mono_class_is_variant_compatible (target, candidate, 1);
  if (D.20133 != 0) goto <D.20134>; else goto <D.20135>;
  <D.20134>:
  D.20061 = 1;
  return D.20061;
  <D.20135>:
  <D.20132>:
  <D.20067>:
  D.20061 = 0;
  return D.20061;
  <D.20064>:
  D.20136 = mono_class_is_assignable_from (target, candidate);
  if (D.20136 != 0) goto <D.20137>; else goto <D.20138>;
  <D.20137>:
  D.20061 = 1;
  return D.20061;
  <D.20138>:
  D.20068 = target->flags;
  D.20069 = D.20068 & 32;
  if (D.20069 == 0) goto <D.20142>; else goto <D.20139>;
  <D.20142>:
  D.20071 = target->byval_arg.type;
  if (D.20071 != 19) goto <D.20143>; else goto <D.20139>;
  <D.20143>:
  D.20071 = target->byval_arg.type;
  if (D.20071 != 30) goto <D.20140>; else goto <D.20139>;
  <D.20139>:
  D.20144 = target->generic_class;
  if (D.20144 == 0B) goto <D.20140>; else goto <D.20145>;
  <D.20145>:
  D.20083 = candidate->rank;
  if (D.20083 != 1) goto <D.20140>; else goto <D.20141>;
  <D.20140>:
  D.20061 = 0;
  return D.20061;
  <D.20141>:
  D.20144 = target->generic_class;
  iface_gtd = D.20144->container_class;
  D.20087 = mono_defaults.generic_ilist_class;
  if (D.20087 != iface_gtd) goto <D.20146>; else goto <D.20147>;
  <D.20146>:
  D.20148 = get_icollection_class ();
  if (D.20148 != iface_gtd) goto <D.20149>; else goto <D.20150>;
  <D.20149>:
  D.20151 = get_ienumerable_class ();
  if (D.20151 != iface_gtd) goto <D.20152>; else goto <D.20153>;
  <D.20152>:
  D.20061 = 0;
  return D.20061;
  <D.20153>:
  <D.20150>:
  <D.20147>:
  D.20144 = target->generic_class;
  D.20154 = D.20144->context.class_inst;
  D.20155 = D.20154->type_argv[0];
  target = mono_class_from_mono_type (D.20155);
  candidate = candidate->element_class;
  D.20061 = 1;
  return D.20061;
}


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

  generic_ireadonlylist_class.2 = generic_ireadonlylist_class;
  if (generic_ireadonlylist_class.2 == 0B) goto <D.20160>; else goto <D.20161>;
  <D.20160>:
  D.20162 = mono_defaults.corlib;
  generic_ireadonlylist_class.3 = mono_class_from_name (D.20162, "System.Collections.Generic", "IReadOnlyList`1");
  generic_ireadonlylist_class = generic_ireadonlylist_class.3;
  <D.20161>:
  D.20164 = generic_ireadonlylist_class;
  return D.20164;
}


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

  generic_ireadonlycollection_class.4 = generic_ireadonlycollection_class;
  if (generic_ireadonlycollection_class.4 == 0B) goto <D.20167>; else goto <D.20168>;
  <D.20167>:
  D.20169 = mono_defaults.corlib;
  generic_ireadonlycollection_class.5 = mono_class_from_name (D.20169, "System.Collections.Generic", "IReadOnlyCollection`1");
  generic_ireadonlycollection_class = generic_ireadonlycollection_class.5;
  <D.20168>:
  D.20171 = generic_ireadonlycollection_class;
  return D.20171;
}


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

  tmp = inflate_class_one_arg (gtd, arg);
  if (tmp == 0B) goto <D.20173>; else goto <D.20174>;
  <D.20173>:
  D.20175 = 0;
  return D.20175;
  <D.20174>:
  D.20176 = mono_class_is_variant_compatible (target, tmp, 1);
  if (D.20176 != 0) goto <D.20177>; else goto <D.20178>;
  <D.20177>:
  D.20175 = 1;
  return D.20175;
  <D.20178>:
  D.20175 = 0;
  return D.20175;
}


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

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


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

  generic_icollection_class.6 = generic_icollection_class;
  if (generic_icollection_class.6 == 0B) goto <D.20185>; else goto <D.20186>;
  <D.20185>:
  D.20187 = mono_defaults.corlib;
  generic_icollection_class.7 = mono_class_from_name (D.20187, "System.Collections.Generic", "ICollection`1");
  generic_icollection_class = generic_icollection_class.7;
  <D.20186>:
  D.20189 = generic_icollection_class;
  return D.20189;
}


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

  generic_ienumerable_class.8 = generic_ienumerable_class;
  if (generic_ienumerable_class.8 == 0B) goto <D.20192>; else goto <D.20193>;
  <D.20192>:
  D.20194 = mono_defaults.corlib;
  generic_ienumerable_class.9 = mono_class_from_name (D.20194, "System.Collections.Generic", "IEnumerable`1");
  generic_ienumerable_class = generic_ienumerable_class.9;
  <D.20193>:
  D.20196 = generic_ienumerable_class;
  return D.20196;
}


is_array_type_compatible (struct MonoType * target, struct MonoType * candidate)
{
  unsigned char D.20198;
  _Bool D.20199;
  long int D.20200;
  long int D.20201;
  unsigned char D.20204;
  _Bool D.20205;
  long int D.20206;
  long int D.20207;
  unsigned char D.20210;
  unsigned char D.20211;
  gboolean D.20214;
  struct MonoClass * D.20215;
  struct MonoClass * D.20216;
  struct MonoArrayType * left;
  struct MonoArrayType * right;

  left = target->data.array;
  right = candidate->data.array;
  D.20198 = target->type;
  D.20199 = D.20198 != 20;
  D.20200 = (long int) D.20199;
  D.20201 = __builtin_expect (D.20200, 0);
  if (D.20201 != 0) goto <D.20202>; else goto <D.20203>;
  <D.20202>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1880, "target->type == MONO_TYPE_ARRAY");
  <D.20203>:
  D.20204 = candidate->type;
  D.20205 = D.20204 != 20;
  D.20206 = (long int) D.20205;
  D.20207 = __builtin_expect (D.20206, 0);
  if (D.20207 != 0) goto <D.20208>; else goto <D.20209>;
  <D.20208>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1881, "candidate->type == MONO_TYPE_ARRAY");
  <D.20209>:
  D.20210 = left->rank;
  D.20211 = right->rank;
  if (D.20210 != D.20211) goto <D.20212>; else goto <D.20213>;
  <D.20212>:
  D.20214 = 0;
  return D.20214;
  <D.20213>:
  D.20215 = right->eklass;
  D.20216 = left->eklass;
  D.20214 = verifier_class_is_assignable_from (D.20216, D.20215);
  return D.20214;
}


mono_delegate_ret_equal (struct MonoType * delegate, struct MonoType * method)
{
  int D.20218;
  gboolean D.20221;

  D.20218 = mono_metadata_type_equal_full (delegate, method, 1);
  if (D.20218 != 0) goto <D.20219>; else goto <D.20220>;
  <D.20219>:
  D.20221 = 1;
  return D.20221;
  <D.20220>:
  D.20221 = mono_delegate_type_equal (delegate, method);
  return D.20221;
}


mono_method_verify (struct MonoMethod * method, int level)
{
  short unsigned int D.20225;
  int D.20226;
  int D.20227;
  short unsigned int D.20229;
  int D.20230;
  int D.20231;
  struct GSList * D.20232;
  struct MonoMethodSignature * D.20233;
  struct MonoMethodSignature * D.20234;
  gchar * D.20237;
  struct GSList * D.20238;
  struct GSList * D.20239;
  unsigned char D.20240;
  unsigned char D.20241;
  struct MonoClass * D.20244;
  unsigned char D.20245;
  unsigned char D.20246;
  unsigned char D.20249;
  unsigned char D.20250;
  gchar * D.20253;
  struct GSList * D.20254;
  struct MonoMethodHeader * D.20255;
  struct MonoMethodHeader * D.20256;
  gchar * D.20259;
  struct GSList * D.20260;
  unsigned int D.20261;
  sizetype D.20262;
  short unsigned int D.20263;
  int D.20264;
  <unnamed-unsigned:1> D.20265;
  int D.20266;
  int D.20267;
  <unnamed-unsigned:15> D.20268;
  int D.20269;
  int D.20270;
  long unsigned int D.20271;
  long unsigned int D.20272;
  void * D.20273;
  int D.20274;
  struct ILCodeDesc * D.20275;
  short unsigned int D.20276;
  int D.20277;
  unsigned int D.20278;
  unsigned int D.20279;
  struct MonoType *[0:] * D.20280;
  void * D.20281;
  int D.20282;
  unsigned char D.20285;
  unsigned char D.20286;
  int D.20291;
  int D.20293;
  int D.20294;
  gchar * D.20295;
  struct GSList * D.20296;
  int D.20297;
  int D.20300;
  long unsigned int D.20301;
  long unsigned int D.20302;
  void * D.20303;
  unsigned char D.20304;
  unsigned char D.20305;
  struct MonoType * * D.20308;
  struct MonoType * iftmp.10;
  unsigned char D.20310;
  unsigned char D.20311;
  long unsigned int D.20315;
  long unsigned int D.20316;
  struct MonoType *[0:] * D.20317;
  long unsigned int D.20318;
  long unsigned int D.20319;
  struct MonoType * * D.20320;
  unsigned char D.20321;
  struct MonoGenericContainer * D.20328;
  struct MonoGenericContainer * D.20332;
  struct MonoType * * D.20334;
  long unsigned int D.20335;
  long unsigned int D.20336;
  struct MonoType * * D.20337;
  struct MonoGenericContext * D.20338;
  struct MonoType * D.20339;
  struct MonoType * D.20340;
  int D.20341;
  struct MonoType * iftmp.11;
  gchar * D.20348;
  struct GSList * D.20349;
  struct MonoType * * D.20350;
  struct MonoType * D.20351;
  struct MonoType * D.20352;
  int D.20353;
  struct MonoType * iftmp.12;
  gchar * D.20360;
  struct GSList * D.20361;
  int D.20362;
  int D.20364;
  gchar * D.20367;
  struct GSList * D.20368;
  int D.20369;
  int D.20371;
  gchar * D.20374;
  struct GSList * D.20375;
  struct MonoExceptionClause * D.20377;
  long unsigned int D.20378;
  unsigned int D.20381;
  int D.20382;
  unsigned int D.20383;
  unsigned int D.20385;
  unsigned int D.20386;
  unsigned int D.20388;
  gchar * D.20389;
  struct GSList * D.20390;
  gchar * D.20393;
  struct GSList * D.20394;
  unsigned int D.20397;
  unsigned int D.20399;
  unsigned int D.20400;
  unsigned int D.20402;
  gchar * D.20403;
  struct GSList * D.20404;
  gchar * D.20407;
  struct GSList * D.20408;
  uint32_t iftmp.13;
  unsigned int D.20414;
  gchar * D.20419;
  struct GSList * D.20420;
  unsigned int D.20423;
  gchar * D.20426;
  struct GSList * D.20427;
  gchar * D.20430;
  struct GSList * D.20431;
  long unsigned int D.20432;
  long unsigned int D.20433;
  struct MonoExceptionClause * D.20434;
  <unnamed-unsigned:15> D.20435;
  int D.20436;
  long unsigned int D.20439;
  long unsigned int D.20440;
  struct ILCodeDesc * D.20441;
  short unsigned int D.20442;
  short unsigned int D.20443;
  long unsigned int D.20446;
  long unsigned int D.20447;
  struct ILCodeDesc * D.20448;
  short unsigned int D.20449;
  short unsigned int D.20450;
  long unsigned int D.20453;
  long unsigned int D.20454;
  struct ILCodeDesc * D.20455;
  short unsigned int D.20456;
  short unsigned int D.20457;
  struct MonoClass * D.20460;
  gchar * D.20463;
  struct GSList * D.20464;
  struct MonoType * D.20465;
  int D.20466;
  long unsigned int D.20468;
  long unsigned int D.20469;
  struct ILCodeDesc * D.20470;
  struct MonoClass * D.20474;
  long unsigned int D.20475;
  long unsigned int D.20476;
  struct ILCodeDesc * D.20477;
  int D.20480;
  const char * D.20483;
  gchar * D.20484;
  struct GSList * D.20485;
  _Bool D.20486;
  long int D.20487;
  long int D.20488;
  long int ip.14;
  long int code_start.15;
  long int D.20493;
  int D.20494;
  unsigned int D.20495;
  gchar * D.20498;
  struct GSList * D.20499;
  unsigned char D.20504;
  int D.20505;
  gchar * D.20506;
  struct GSList * D.20507;
  unsigned int op_size.16;
  unsigned int D.20511;
  unsigned int op_size.17;
  unsigned int D.20514;
  gchar * D.20515;
  struct GSList * D.20516;
  int op.18;
  int D.20520;
  const char * D.20523;
  gchar * D.20524;
  struct GSList * D.20525;
  unsigned int D.20526;
  unsigned int D.20527;
  unsigned int D.20528;
  gchar * D.20536;
  struct GSList * D.20537;
  unsigned int D.20540;
  unsigned int D.20541;
  unsigned int D.20542;
  unsigned int D.20547;
  gchar * D.20550;
  struct GSList * D.20551;
  gchar * D.20556;
  struct GSList * D.20557;
  gchar * D.20566;
  struct GSList * D.20567;
  gchar * D.20575;
  struct GSList * D.20576;
  short unsigned int D.20581;
  gchar * D.20586;
  struct GSList * D.20587;
  unsigned char D.20589;
  unsigned char D.20590;
  long unsigned int D.20593;
  long unsigned int D.20594;
  struct ILCodeDesc * D.20595;
  short unsigned int D.20596;
  short unsigned int D.20597;
  sizetype D.20598;
  int D.20602;
  long unsigned int D.20603;
  long unsigned int D.20604;
  struct ILCodeDesc * D.20605;
  int D.20606;
  unsigned int D.20607;
  const unsigned char * D.20610;
  long unsigned int ip.19;
  unsigned int D.20613;
  gchar * D.20614;
  struct GSList * D.20615;
  _Bool D.20616;
  int D.20617;
  const unsigned char * D.20618;
  unsigned char D.20619;
  unsigned int D.20620;
  unsigned int D.20621;
  int D.20622;
  int D.20624;
  unsigned int D.20625;
  int D.20626;
  unsigned int D.20627;
  gchar * D.20631;
  struct GSList * D.20632;
  unsigned int D.20633;
  gchar * D.20637;
  struct GSList * D.20638;
  int D.20639;
  struct MonoClass * D.20642;
  struct MonoType * D.20643;
  gchar * D.20647;
  struct GSList * D.20648;
  int D.20649;
  const unsigned char * D.20654;
  gchar * D.20656;
  struct GSList * D.20657;
  int D.20658;
  const unsigned char * D.20663;
  gchar * D.20665;
  struct GSList * D.20666;
  int D.20667;
  struct MonoClass * D.20670;
  struct MonoType * D.20671;
  gchar * D.20675;
  struct GSList * D.20676;
  int D.20677;
  struct MonoClass * D.20680;
  struct MonoType * D.20681;
  gchar * D.20685;
  struct GSList * D.20686;
  int D.20687;
  int D.20690;
  struct MonoClass * D.20693;
  struct MonoType * D.20694;
  gchar * D.20698;
  struct GSList * D.20699;
  signed char D.20700;
  int D.20701;
  int D.20702;
  gchar * D.20706;
  struct GSList * D.20707;
  gchar * D.20711;
  struct GSList * D.20712;
  const guint32 * D.20713;
  unsigned int D.20714;
  int D.20715;
  int D.20716;
  gchar * D.20720;
  struct GSList * D.20721;
  gchar * D.20725;
  struct GSList * D.20726;
  _Bool D.20727;
  int D.20728;
  gchar * D.20729;
  struct GSList * D.20730;
  int D.20731;
  int D.20733;
  struct ILStackDesc * D.20735;
  gchar * D.20739;
  struct GSList * D.20740;
  gchar * D.20743;
  struct GSList * D.20744;
  int D.20745;
  gchar * D.20748;
  struct GSList * D.20749;
  gchar * D.20753;
  struct GSList * D.20754;
  gchar * D.20760;
  struct GSList * D.20761;
  _Bool D.20762;
  int D.20763;
  gchar * D.20767;
  struct GSList * D.20768;
  gchar * D.20772;
  struct GSList * D.20773;
  gchar * D.20779;
  struct GSList * D.20780;
  gchar * D.20784;
  struct GSList * D.20785;
  gchar * D.20789;
  struct GSList * D.20790;
  gchar * D.20794;
  struct GSList * D.20795;
  gchar * D.20799;
  struct GSList * D.20800;
  gchar * D.20803;
  struct GSList * D.20804;
  long unsigned int D.20807;
  long unsigned int D.20808;
  const unsigned char * D.20809;
  long unsigned int D.20811;
  gchar * D.20812;
  struct GSList * D.20813;
  int entries.20;
  gchar * D.20818;
  struct GSList * D.20819;
  gchar * D.20823;
  struct GSList * D.20824;
  gchar * D.20828;
  struct GSList * D.20829;
  gchar * D.20833;
  struct GSList * D.20834;
  gchar * D.20838;
  struct GSList * D.20839;
  const char * iftmp.21;
  gchar * D.20844;
  struct GSList * D.20845;
  gchar * D.20849;
  struct GSList * D.20850;
  gchar * D.20854;
  struct GSList * D.20855;
  _Bool D.20856;
  int D.20857;
  gchar * D.20861;
  struct GSList * D.20862;
  _Bool D.20863;
  int D.20864;
  gchar * D.20868;
  struct GSList * D.20869;
  gchar * D.20873;
  struct GSList * D.20874;
  gchar * D.20878;
  struct GSList * D.20879;
  gchar * D.20883;
  struct GSList * D.20884;
  gchar * D.20888;
  struct GSList * D.20889;
  gchar * D.20893;
  struct GSList * D.20894;
  gchar * D.20898;
  struct GSList * D.20899;
  gchar * D.20903;
  struct GSList * D.20904;
  gchar * D.20908;
  struct GSList * D.20909;
  gchar * D.20913;
  struct GSList * D.20914;
  gchar * D.20918;
  struct GSList * D.20919;
  gchar * D.20923;
  struct GSList * D.20924;
  int D.20925;
  gchar * D.20928;
  struct GSList * D.20929;
  gchar * D.20933;
  struct GSList * D.20934;
  unsigned int D.20935;
  int D.20936;
  gchar * D.20940;
  struct GSList * D.20941;
  gchar * D.20945;
  struct GSList * D.20946;
  const unsigned char * D.20949;
  gchar * D.20951;
  struct GSList * D.20952;
  const guint16 * D.20953;
  short unsigned int D.20954;
  unsigned int D.20955;
  unsigned int D.20956;
  gchar * D.20960;
  struct GSList * D.20961;
  int D.20962;
  unsigned char D.20964;
  gchar * D.20967;
  struct GSList * D.20968;
  struct MonoClass * D.20969;
  struct MonoType * D.20970;
  struct ILStackDesc * D.20971;
  gchar * D.20975;
  struct GSList * D.20976;
  gchar * D.20980;
  struct GSList * D.20981;
  gchar * D.20985;
  struct GSList * D.20986;
  _Bool D.20987;
  int D.20988;
  unsigned int D.20989;
  gchar * D.20993;
  struct GSList * D.20994;
  _Bool D.20995;
  int D.20996;
  gchar * D.20997;
  struct GSList * D.20998;
  gchar * D.21002;
  struct GSList * D.21003;
  unsigned char D.21006;
  _Bool D.21007;
  _Bool D.21008;
  _Bool D.21009;
  gchar * D.21012;
  struct GSList * D.21013;
  gchar * D.21017;
  struct GSList * D.21018;
  gchar * D.21022;
  struct GSList * D.21023;
  struct MonoType * D.21024;
  unsigned int D.21025;
  unsigned int D.21026;
  int D.21027;
  gchar * D.21032;
  struct GSList * D.21033;
  int D.21036;
  gchar * D.21041;
  struct GSList * D.21042;
  int D.21045;
  gchar * D.21048;
  struct GSList * D.21049;
  gchar * D.21053;
  struct GSList * D.21054;
  gchar * D.21055;
  struct GSList * D.21056;
  gchar * D.21057;
  struct GSList * D.21058;
  long unsigned int D.21063;
  long unsigned int D.21064;
  struct ILCodeDesc * D.21065;
  short unsigned int D.21066;
  short unsigned int D.21067;
  unsigned int D.21068;
  int D.21070;
  unsigned int D.21073;
  gchar * D.21076;
  struct GSList * D.21077;
  unsigned int D.21078;
  gchar * D.21081;
  struct GSList * D.21082;
  unsigned int D.21083;
  gchar * D.21086;
  struct GSList * D.21087;
  unsigned int D.21088;
  gchar * D.21091;
  struct GSList * D.21092;
  _Bool D.21094;
  _Bool D.21095;
  _Bool D.21096;
  gchar * D.21103;
  struct GSList * D.21104;
  long unsigned int D.21105;
  struct ILCodeDesc * D.21106;
  short unsigned int D.21107;
  int D.21108;
  int D.21109;
  int D.21112;
  gchar * D.21115;
  struct GSList * D.21116;
  int D.21117;
  gchar * D.21123;
  struct GSList * D.21124;
  int D.21127;
  int D.21130;
  gchar * D.21136;
  struct GSList * D.21137;
  int D.21140;
  gchar * D.21148;
  struct GSList * D.21149;
  unsigned int i.22;
  struct MonoMethod * D.21154;
  int D.21155;
  int D.21158;
  struct MonoClass * D.21161;
  unsigned char D.21162;
  unsigned char D.21163;
  struct MonoClass * D.21170;
  unsigned char D.21172;
  gchar * D.21177;
  struct GSList * D.21178;
  gchar * D.21184;
  struct GSList * D.21185;
  struct ILStackDesc * D.21190;
  unsigned int i.23;
  void * D.21194;
  struct GSList * D.21195;
  struct GSList * D.21196;
  struct ILStackDesc * D.21201;
  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.20225 = method->iflags;
      D.20226 = (int) D.20225;
      D.20227 = D.20226 & 4099;
      if (D.20227 != 0) goto <D.20223>; else goto <D.20228>;
      <D.20228>:
      D.20229 = method->flags;
      D.20230 = (int) D.20229;
      D.20231 = D.20230 & 9216;
      if (D.20231 != 0) goto <D.20223>; else goto <D.20224>;
      <D.20223>:
      D.20232 = 0B;
      return D.20232;
      <D.20224>:
      memset (&ctx, 0, 168);
      D.20233 = mono_method_signature (method);
      ctx.signature = D.20233;
      D.20234 = ctx.signature;
      if (D.20234 == 0B) goto <D.20235>; else goto <D.20236>;
      <D.20235>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20237 = monoeg_g_strdup_printf ("Could not decode method signature");
        vinfo->info.message = D.20237;
        vinfo->exception_type = 3;
        D.20238 = ctx.list;
        D.20239 = monoeg_g_slist_prepend (D.20238, vinfo);
        ctx.list = D.20239;
      }
      ctx.valid = 0;
      D.20232 = ctx.list;
      return D.20232;
      <D.20236>:
      D.20240 = BIT_FIELD_REF <*method, 8, 264>;
      D.20241 = D.20240 & 8;
      if (D.20241 == 0) goto <D.20242>; else goto <D.20243>;
      <D.20242>:
      D.20244 = method->klass;
      D.20245 = BIT_FIELD_REF <*D.20244, 8, 288>;
      D.20246 = D.20245 & 4;
      if (D.20246 == 0) goto <D.20247>; else goto <D.20248>;
      <D.20247>:
      D.20234 = ctx.signature;
      D.20249 = BIT_FIELD_REF <*D.20234, 8, 120>;
      D.20250 = D.20249 & 4;
      if (D.20250 != 0) goto <D.20251>; else goto <D.20252>;
      <D.20251>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20253 = monoeg_g_strdup_printf ("Method and signature don\'t match in terms of genericity");
        vinfo->info.message = D.20253;
        vinfo->exception_type = 3;
        D.20238 = ctx.list;
        D.20254 = monoeg_g_slist_prepend (D.20238, vinfo);
        ctx.list = D.20254;
      }
      ctx.valid = 0;
      D.20232 = ctx.list;
      return D.20232;
      <D.20252>:
      <D.20248>:
      <D.20243>:
      D.20255 = mono_method_get_header (method);
      ctx.header = D.20255;
      D.20256 = ctx.header;
      if (D.20256 == 0B) goto <D.20257>; else goto <D.20258>;
      <D.20257>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20259 = monoeg_g_strdup_printf ("Could not decode method header");
        vinfo->info.message = D.20259;
        vinfo->exception_type = 3;
        D.20238 = ctx.list;
        D.20260 = monoeg_g_slist_prepend (D.20238, vinfo);
        ctx.list = D.20260;
      }
      ctx.valid = 0;
      D.20232 = ctx.list;
      return D.20232;
      <D.20258>:
      ctx.method = method;
      D.20256 = ctx.header;
      ip = D.20256->code;
      code_start = ip;
      D.20256 = ctx.header;
      D.20261 = D.20256->code_size;
      D.20262 = (sizetype) D.20261;
      end = ip + D.20262;
      D.20244 = method->klass;
      image = D.20244->image;
      ctx.image = image;
      D.20234 = ctx.signature;
      D.20263 = D.20234->param_count;
      D.20264 = (int) D.20263;
      D.20234 = ctx.signature;
      D.20265 = D.20234->hasthis;
      D.20266 = (int) D.20265;
      D.20267 = D.20264 + D.20266;
      ctx.max_args = D.20267;
      D.20256 = ctx.header;
      D.20268 = D.20256->max_stack;
      D.20269 = (int) D.20268;
      ctx.max_stack = D.20269;
      ctx.valid = 1;
      D.20270 = ctx.valid;
      ctx.verifiable = D.20270;
      ctx.level = level;
      D.20256 = ctx.header;
      D.20261 = D.20256->code_size;
      D.20271 = (long unsigned int) D.20261;
      D.20272 = D.20271 * 16;
      D.20273 = monoeg_malloc (D.20272);
      ctx.code = D.20273;
      D.20256 = ctx.header;
      D.20261 = D.20256->code_size;
      D.20274 = (int) D.20261;
      ctx.code_size = D.20274;
      D.20256 = ctx.header;
      D.20261 = D.20256->code_size;
      D.20271 = (long unsigned int) D.20261;
      D.20272 = D.20271 * 16;
      D.20275 = ctx.code;
      memset (D.20275, 0, D.20272);
      D.20256 = ctx.header;
      D.20276 = D.20256->num_locals;
      D.20277 = (int) D.20276;
      ctx.num_locals = D.20277;
      D.20256 = ctx.header;
      D.20276 = D.20256->num_locals;
      D.20278 = (unsigned int) D.20276;
      D.20279 = D.20278 * 8;
      D.20256 = ctx.header;
      D.20280 = &D.20256->locals;
      D.20281 = monoeg_g_memdup (D.20280, D.20279);
      ctx.locals = D.20281;
      D.20282 = ctx.num_locals;
      if (D.20282 > 0) goto <D.20283>; else goto <D.20284>;
      <D.20283>:
      D.20256 = ctx.header;
      D.20285 = BIT_FIELD_REF <*D.20256, 8, 120>;
      D.20286 = D.20285 & 128;
      if (D.20286 == 0) goto <D.20287>; else goto <D.20288>;
      <D.20287>:
      D.20291 = ctx.verifiable;
      if (D.20291 != 0) goto <D.20289>; else goto <D.20292>;
      <D.20292>:
      D.20293 = ctx.level;
      D.20294 = D.20293 & 128;
      if (D.20294 != 0) goto <D.20289>; else goto <D.20290>;
      <D.20289>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.20295 = monoeg_g_strdup_printf ("Method with locals variable but without init locals set");
        vinfo->info.message = D.20295;
        vinfo->exception_type = 4;
        D.20238 = ctx.list;
        D.20296 = monoeg_g_slist_prepend (D.20238, vinfo);
        ctx.list = D.20296;
      }
      ctx.verifiable = 0;
      D.20293 = ctx.level;
      D.20297 = D.20293 & 16;
      if (D.20297 != 0) goto <D.20298>; else goto <D.20299>;
      <D.20298>:
      ctx.valid = 0;
      <D.20299>:
      <D.20290>:
      <D.20288>:
      <D.20284>:
      D.20300 = ctx.max_args;
      D.20301 = (long unsigned int) D.20300;
      D.20302 = D.20301 * 8;
      D.20303 = monoeg_malloc (D.20302);
      ctx.params = D.20303;
      D.20234 = ctx.signature;
      D.20304 = BIT_FIELD_REF <*D.20234, 8, 112>;
      D.20305 = D.20304 & 64;
      if (D.20305 != 0) goto <D.20306>; else goto <D.20307>;
      <D.20306>:
      D.20308 = ctx.params;
      D.20244 = method->klass;
      D.20310 = BIT_FIELD_REF <*D.20244, 8, 256>;
      D.20311 = D.20310 & 8;
      if (D.20311 != 0) goto <D.20312>; else goto <D.20313>;
      <D.20312>:
      D.20244 = method->klass;
      iftmp.10 = &D.20244->this_arg;
      goto <D.20314>;
      <D.20313>:
      D.20244 = method->klass;
      iftmp.10 = &D.20244->byval_arg;
      <D.20314>:
      *D.20308 = iftmp.10;
      <D.20307>:
      D.20234 = ctx.signature;
      D.20263 = D.20234->param_count;
      D.20315 = (long unsigned int) D.20263;
      D.20316 = D.20315 * 8;
      D.20234 = ctx.signature;
      D.20317 = &D.20234->params;
      D.20308 = ctx.params;
      D.20234 = ctx.signature;
      D.20265 = D.20234->hasthis;
      D.20318 = (long unsigned int) D.20265;
      D.20319 = D.20318 * 8;
      D.20320 = D.20308 + D.20319;
      memcpy (D.20320, D.20317, D.20316);
      D.20234 = ctx.signature;
      D.20249 = BIT_FIELD_REF <*D.20234, 8, 120>;
      D.20321 = D.20249 & 2;
      if (D.20321 != 0) goto <D.20322>; else goto <D.20323>;
      <D.20322>:
      generic_context = mono_method_get_context (method);
      ctx.generic_context = generic_context;
      <D.20323>:
      if (generic_context == 0B) goto <D.20326>; else goto <D.20327>;
      <D.20326>:
      D.20244 = method->klass;
      D.20328 = D.20244->generic_container;
      if (D.20328 != 0B) goto <D.20324>; else goto <D.20329>;
      <D.20329>:
      D.20240 = BIT_FIELD_REF <*method, 8, 264>;
      D.20241 = D.20240 & 8;
      if (D.20241 != 0) goto <D.20324>; else goto <D.20325>;
      <D.20324>:
      D.20240 = BIT_FIELD_REF <*method, 8, 264>;
      D.20241 = D.20240 & 8;
      if (D.20241 != 0) goto <D.20330>; else goto <D.20331>;
      <D.20330>:
      D.20332 = mono_method_get_generic_container (method);
      generic_context = &D.20332->context;
      ctx.generic_context = generic_context;
      goto <D.20333>;
      <D.20331>:
      D.20244 = method->klass;
      D.20328 = D.20244->generic_container;
      generic_context = &D.20328->context;
      ctx.generic_context = generic_context;
      <D.20333>:
      <D.20325>:
      <D.20327>:
      i = 0;
      goto <D.19431>;
      <D.19430>:
      {
        struct MonoType * uninflated;

        D.20334 = ctx.locals;
        D.20335 = (long unsigned int) i;
        D.20336 = D.20335 * 8;
        D.20337 = D.20334 + D.20336;
        uninflated = *D.20337;
        D.20334 = ctx.locals;
        D.20335 = (long unsigned int) i;
        D.20336 = D.20335 * 8;
        D.20337 = D.20334 + D.20336;
        D.20338 = ctx.generic_context;
        D.20334 = ctx.locals;
        D.20335 = (long unsigned int) i;
        D.20336 = D.20335 * 8;
        D.20337 = D.20334 + D.20336;
        D.20339 = *D.20337;
        D.20340 = mono_class_inflate_generic_type_checked (D.20339, D.20338, &error);
        *D.20337 = D.20340;
        D.20341 = mono_error_ok (&error);
        if (D.20341 == 0) goto <D.20342>; else goto <D.20343>;
        <D.20342>:
        {
          char * name;

          D.20334 = ctx.locals;
          D.20335 = (long unsigned int) i;
          D.20336 = D.20335 * 8;
          D.20337 = D.20334 + D.20336;
          D.20339 = *D.20337;
          if (D.20339 != 0B) goto <D.20345>; else goto <D.20346>;
          <D.20345>:
          D.20334 = ctx.locals;
          D.20335 = (long unsigned int) i;
          D.20336 = D.20335 * 8;
          D.20337 = D.20334 + D.20336;
          iftmp.11 = *D.20337;
          goto <D.20347>;
          <D.20346>:
          iftmp.11 = uninflated;
          <D.20347>:
          name = mono_type_full_name (iftmp.11);
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20348 = monoeg_g_strdup_printf ("Invalid local %d of type %s", i, name);
            vinfo->info.message = D.20348;
            vinfo->exception_type = 3;
            D.20238 = ctx.list;
            D.20349 = monoeg_g_slist_prepend (D.20238, vinfo);
            ctx.list = D.20349;
          }
          ctx.valid = 0;
          monoeg_g_free (name);
          mono_error_cleanup (&error);
          ctx.num_locals = i;
          ctx.max_args = 0;
          goto cleanup;
        }
        <D.20343>:
      }
      i = i + 1;
      <D.19431>:
      D.20282 = ctx.num_locals;
      if (D.20282 > i) goto <D.19430>; else goto <D.19432>;
      <D.19432>:
      i = 0;
      goto <D.19437>;
      <D.19436>:
      {
        struct MonoType * uninflated;

        D.20308 = ctx.params;
        D.20335 = (long unsigned int) i;
        D.20336 = D.20335 * 8;
        D.20350 = D.20308 + D.20336;
        uninflated = *D.20350;
        D.20308 = ctx.params;
        D.20335 = (long unsigned int) i;
        D.20336 = D.20335 * 8;
        D.20350 = D.20308 + D.20336;
        D.20338 = ctx.generic_context;
        D.20308 = ctx.params;
        D.20335 = (long unsigned int) i;
        D.20336 = D.20335 * 8;
        D.20350 = D.20308 + D.20336;
        D.20351 = *D.20350;
        D.20352 = mono_class_inflate_generic_type_checked (D.20351, D.20338, &error);
        *D.20350 = D.20352;
        D.20353 = mono_error_ok (&error);
        if (D.20353 == 0) goto <D.20354>; else goto <D.20355>;
        <D.20354>:
        {
          char * name;

          D.20308 = ctx.params;
          D.20335 = (long unsigned int) i;
          D.20336 = D.20335 * 8;
          D.20350 = D.20308 + D.20336;
          D.20351 = *D.20350;
          if (D.20351 != 0B) goto <D.20357>; else goto <D.20358>;
          <D.20357>:
          D.20308 = ctx.params;
          D.20335 = (long unsigned int) i;
          D.20336 = D.20335 * 8;
          D.20350 = D.20308 + D.20336;
          iftmp.12 = *D.20350;
          goto <D.20359>;
          <D.20358>:
          iftmp.12 = uninflated;
          <D.20359>:
          name = mono_type_full_name (iftmp.12);
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20360 = monoeg_g_strdup_printf ("Invalid parameter %d of type %s", i, name);
            vinfo->info.message = D.20360;
            vinfo->exception_type = 3;
            D.20238 = ctx.list;
            D.20361 = monoeg_g_slist_prepend (D.20238, vinfo);
            ctx.list = D.20361;
          }
          ctx.valid = 0;
          monoeg_g_free (name);
          mono_error_cleanup (&error);
          ctx.max_args = i;
          goto cleanup;
        }
        <D.20355>:
      }
      i = i + 1;
      <D.19437>:
      D.20300 = ctx.max_args;
      if (D.20300 > i) goto <D.19436>; else goto <D.19438>;
      <D.19438>:
      stack_init (&ctx, &ctx.eval);
      i = 0;
      goto <D.19443>;
      <D.19442>:
      D.20334 = ctx.locals;
      D.20335 = (long unsigned int) i;
      D.20336 = D.20335 * 8;
      D.20337 = D.20334 + D.20336;
      D.20339 = *D.20337;
      D.20362 = mono_type_is_valid_in_context (&ctx, D.20339);
      if (D.20362 == 0) goto <D.19439>; else goto <D.20363>;
      <D.20363>:
      D.20334 = ctx.locals;
      D.20335 = (long unsigned int) i;
      D.20336 = D.20335 * 8;
      D.20337 = D.20334 + D.20336;
      D.20339 = *D.20337;
      D.20364 = get_stack_type (D.20339);
      if (D.20364 == 0) goto <D.20365>; else goto <D.20366>;
      <D.20365>:
      {
        char * name;

        D.20334 = ctx.locals;
        D.20335 = (long unsigned int) i;
        D.20336 = D.20335 * 8;
        D.20337 = D.20334 + D.20336;
        D.20339 = *D.20337;
        name = mono_type_full_name (D.20339);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20367 = monoeg_g_strdup_printf ("Invalid local %i of type %s", i, name);
          vinfo->info.message = D.20367;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20368 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20368;
        }
        ctx.valid = 0;
        monoeg_g_free (name);
        goto <D.19439>;
      }
      <D.20366>:
      i = i + 1;
      <D.19443>:
      D.20282 = ctx.num_locals;
      if (D.20282 > i) goto <D.19442>; else goto <D.19439>;
      <D.19439>:
      i = 0;
      goto <D.19448>;
      <D.19447>:
      D.20308 = ctx.params;
      D.20335 = (long unsigned int) i;
      D.20336 = D.20335 * 8;
      D.20350 = D.20308 + D.20336;
      D.20351 = *D.20350;
      D.20369 = mono_type_is_valid_in_context (&ctx, D.20351);
      if (D.20369 == 0) goto <D.19444>; else goto <D.20370>;
      <D.20370>:
      D.20308 = ctx.params;
      D.20335 = (long unsigned int) i;
      D.20336 = D.20335 * 8;
      D.20350 = D.20308 + D.20336;
      D.20351 = *D.20350;
      D.20371 = get_stack_type (D.20351);
      if (D.20371 == 0) goto <D.20372>; else goto <D.20373>;
      <D.20372>:
      {
        char * name;

        D.20308 = ctx.params;
        D.20335 = (long unsigned int) i;
        D.20336 = D.20335 * 8;
        D.20350 = D.20308 + D.20336;
        D.20351 = *D.20350;
        name = mono_type_full_name (D.20351);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20374 = monoeg_g_strdup_printf ("Invalid parameter %i of type %s", i, name);
          vinfo->info.message = D.20374;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20375 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20375;
        }
        ctx.valid = 0;
        monoeg_g_free (name);
        goto <D.19444>;
      }
      <D.20373>:
      i = i + 1;
      <D.19448>:
      D.20300 = ctx.max_args;
      if (D.20300 > i) goto <D.19447>; else goto <D.19444>;
      <D.19444>:
      D.20270 = ctx.valid;
      if (D.20270 == 0) goto cleanup; else goto <D.20376>;
      <D.20376>:
      i = 0;
      goto <D.19463>;
      <D.19462>:
      {
        struct MonoExceptionClause * clause;

        D.20256 = ctx.header;
        D.20377 = D.20256->clauses;
        D.20335 = (long unsigned int) i;
        D.20378 = D.20335 * 32;
        clause = D.20377 + D.20378;
        D.20381 = clause->try_offset;
        D.20382 = ctx.code_size;
        D.20383 = (unsigned int) D.20382;
        if (D.20381 > D.20383) goto <D.20379>; else goto <D.20384>;
        <D.20384>:
        D.20381 = clause->try_offset;
        D.20385 = clause->try_len;
        D.20386 = D.20381 + D.20385;
        D.20382 = ctx.code_size;
        D.20383 = (unsigned int) D.20382;
        if (D.20386 > D.20383) goto <D.20379>; else goto <D.20387>;
        <D.20387>:
        D.20385 = clause->try_len;
        D.20388 = ~D.20385;
        D.20381 = clause->try_offset;
        if (D.20388 < D.20381) goto <D.20379>; else goto <D.20380>;
        <D.20379>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20381 = clause->try_offset;
          D.20389 = monoeg_g_strdup_printf ("try clause out of bounds at 0x%04x", D.20381);
          vinfo->info.message = D.20389;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20390 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20390;
        }
        ctx.valid = 0;
        <D.20380>:
        D.20385 = clause->try_len;
        if (D.20385 == 0) goto <D.20391>; else goto <D.20392>;
        <D.20391>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20381 = clause->try_offset;
          D.20393 = monoeg_g_strdup_printf ("try clause len <= 0 at 0x%04x", D.20381);
          vinfo->info.message = D.20393;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20394 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20394;
        }
        ctx.valid = 0;
        <D.20392>:
        D.20397 = clause->handler_offset;
        D.20382 = ctx.code_size;
        D.20383 = (unsigned int) D.20382;
        if (D.20397 > D.20383) goto <D.20395>; else goto <D.20398>;
        <D.20398>:
        D.20397 = clause->handler_offset;
        D.20399 = clause->handler_len;
        D.20400 = D.20397 + D.20399;
        D.20382 = ctx.code_size;
        D.20383 = (unsigned int) D.20382;
        if (D.20400 > D.20383) goto <D.20395>; else goto <D.20401>;
        <D.20401>:
        D.20399 = clause->handler_len;
        D.20402 = ~D.20399;
        D.20397 = clause->handler_offset;
        if (D.20402 < D.20397) goto <D.20395>; else goto <D.20396>;
        <D.20395>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20381 = clause->try_offset;
          D.20403 = monoeg_g_strdup_printf ("handler clause out of bounds at 0x%04x", D.20381);
          vinfo->info.message = D.20403;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20404 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20404;
        }
        ctx.valid = 0;
        <D.20396>:
        D.20399 = clause->handler_len;
        if (D.20399 == 0) goto <D.20405>; else goto <D.20406>;
        <D.20405>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20381 = clause->try_offset;
          D.20407 = monoeg_g_strdup_printf ("handler clause len <= 0 at 0x%04x", D.20381);
          vinfo->info.message = D.20407;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20408 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20408;
        }
        ctx.valid = 0;
        <D.20406>:
        D.20381 = clause->try_offset;
        D.20397 = clause->handler_offset;
        if (D.20381 < D.20397) goto <D.20411>; else goto <D.20412>;
        <D.20411>:
        D.20381 = clause->try_offset;
        D.20385 = clause->try_len;
        D.20386 = D.20381 + D.20385;
        D.20414 = clause->flags;
        if (D.20414 == 1) goto <D.20415>; else goto <D.20416>;
        <D.20415>:
        iftmp.13 = clause->data.filter_offset;
        goto <D.20417>;
        <D.20416>:
        iftmp.13 = clause->handler_offset;
        <D.20417>:
        if (D.20386 > iftmp.13) goto <D.20409>; else goto <D.20418>;
        <D.20418>:
        D.20385 = clause->try_len;
        D.20388 = ~D.20385;
        D.20381 = clause->try_offset;
        if (D.20388 < D.20381) goto <D.20409>; else goto <D.20410>;
        <D.20409>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20397 = clause->handler_offset;
          D.20381 = clause->try_offset;
          D.20419 = monoeg_g_strdup_printf ("try block (at 0x%04x) includes handler block (at 0x%04x)", D.20381, D.20397);
          vinfo->info.message = D.20419;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20420 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20420;
        }
        ctx.valid = 0;
        <D.20410>:
        <D.20412>:
        D.20414 = clause->flags;
        if (D.20414 == 1) goto <D.20421>; else goto <D.20422>;
        <D.20421>:
        D.20423 = clause->data.filter_offset;
        D.20382 = ctx.code_size;
        D.20383 = (unsigned int) D.20382;
        if (D.20423 > D.20383) goto <D.20424>; else goto <D.20425>;
        <D.20424>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20381 = clause->try_offset;
          D.20426 = monoeg_g_strdup_printf ("filter clause out of bounds at 0x%04x", D.20381);
          vinfo->info.message = D.20426;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20427 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20427;
        }
        ctx.valid = 0;
        <D.20425>:
        D.20423 = clause->data.filter_offset;
        D.20397 = clause->handler_offset;
        if (D.20423 >= D.20397) goto <D.20428>; else goto <D.20429>;
        <D.20428>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20423 = clause->data.filter_offset;
          D.20430 = monoeg_g_strdup_printf ("filter clause must come before the handler clause at 0x%04x", D.20423);
          vinfo->info.message = D.20430;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20431 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20431;
        }
        ctx.valid = 0;
        <D.20429>:
        <D.20422>:
        n = i + 1;
        goto <D.19458>;
        <D.19457>:
        D.20256 = ctx.header;
        D.20377 = D.20256->clauses;
        D.20432 = (long unsigned int) n;
        D.20433 = D.20432 * 32;
        D.20434 = D.20377 + D.20433;
        verify_clause_relationship (&ctx, clause, D.20434);
        n = n + 1;
        <D.19458>:
        D.20256 = ctx.header;
        D.20435 = D.20256->num_clauses;
        D.20436 = (int) D.20435;
        if (D.20436 > n) goto <D.20437>; else goto <D.19459>;
        <D.20437>:
        D.20270 = ctx.valid;
        if (D.20270 != 0) goto <D.19457>; else goto <D.19459>;
        <D.19459>:
        D.20270 = ctx.valid;
        if (D.20270 == 0) goto <D.19460>; else goto <D.20438>;
        <D.20438>:
        D.20275 = ctx.code;
        D.20381 = clause->try_offset;
        D.20439 = (long unsigned int) D.20381;
        D.20440 = D.20439 * 16;
        D.20441 = D.20275 + D.20440;
        D.20275 = ctx.code;
        D.20381 = clause->try_offset;
        D.20439 = (long unsigned int) D.20381;
        D.20440 = D.20439 * 16;
        D.20441 = D.20275 + D.20440;
        D.20442 = D.20441->flags;
        D.20443 = D.20442 | 2;
        D.20441->flags = D.20443;
        D.20381 = clause->try_offset;
        D.20385 = clause->try_len;
        D.20386 = D.20381 + D.20385;
        D.20382 = ctx.code_size;
        D.20383 = (unsigned int) D.20382;
        if (D.20386 < D.20383) goto <D.20444>; else goto <D.20445>;
        <D.20444>:
        D.20275 = ctx.code;
        D.20381 = clause->try_offset;
        D.20385 = clause->try_len;
        D.20386 = D.20381 + D.20385;
        D.20446 = (long unsigned int) D.20386;
        D.20447 = D.20446 * 16;
        D.20448 = D.20275 + D.20447;
        D.20275 = ctx.code;
        D.20381 = clause->try_offset;
        D.20385 = clause->try_len;
        D.20386 = D.20381 + D.20385;
        D.20446 = (long unsigned int) D.20386;
        D.20447 = D.20446 * 16;
        D.20448 = D.20275 + D.20447;
        D.20449 = D.20448->flags;
        D.20450 = D.20449 | 2;
        D.20448->flags = D.20450;
        <D.20445>:
        D.20397 = clause->handler_offset;
        D.20399 = clause->handler_len;
        D.20400 = D.20397 + D.20399;
        D.20382 = ctx.code_size;
        D.20383 = (unsigned int) D.20382;
        if (D.20400 < D.20383) goto <D.20451>; else goto <D.20452>;
        <D.20451>:
        D.20275 = ctx.code;
        D.20397 = clause->handler_offset;
        D.20399 = clause->handler_len;
        D.20400 = D.20397 + D.20399;
        D.20453 = (long unsigned int) D.20400;
        D.20454 = D.20453 * 16;
        D.20455 = D.20275 + D.20454;
        D.20275 = ctx.code;
        D.20397 = clause->handler_offset;
        D.20399 = clause->handler_len;
        D.20400 = D.20397 + D.20399;
        D.20453 = (long unsigned int) D.20400;
        D.20454 = D.20453 * 16;
        D.20455 = D.20275 + D.20454;
        D.20456 = D.20455->flags;
        D.20457 = D.20456 | 2;
        D.20455->flags = D.20457;
        <D.20452>:
        D.20414 = clause->flags;
        if (D.20414 == 0) goto <D.20458>; else goto <D.20459>;
        <D.20458>:
        D.20460 = clause->data.catch_class;
        if (D.20460 == 0B) goto <D.20461>; else goto <D.20462>;
        <D.20461>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20463 = monoeg_g_strdup_printf ("Catch clause %d with invalid type", i);
          vinfo->info.message = D.20463;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20464 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20464;
        }
        ctx.valid = 0;
        goto <D.19460>;
        <D.20462>:
        D.20460 = clause->data.catch_class;
        D.20465 = &D.20460->byval_arg;
        D.20466 = mono_type_is_valid_in_context (&ctx, D.20465);
        if (D.20466 == 0) goto <D.19460>; else goto <D.20467>;
        <D.20467>:
        D.20460 = clause->data.catch_class;
        D.20275 = ctx.code;
        D.20397 = clause->handler_offset;
        D.20468 = (long unsigned int) D.20397;
        D.20469 = D.20468 * 16;
        D.20470 = D.20275 + D.20469;
        init_stack_with_value_at_exception_boundary (&ctx, D.20470, D.20460);
        goto <D.20471>;
        <D.20459>:
        D.20414 = clause->flags;
        if (D.20414 == 1) goto <D.20472>; else goto <D.20473>;
        <D.20472>:
        D.20474 = mono_defaults.exception_class;
        D.20275 = ctx.code;
        D.20423 = clause->data.filter_offset;
        D.20475 = (long unsigned int) D.20423;
        D.20476 = D.20475 * 16;
        D.20477 = D.20275 + D.20476;
        init_stack_with_value_at_exception_boundary (&ctx, D.20477, D.20474);
        D.20474 = mono_defaults.exception_class;
        D.20275 = ctx.code;
        D.20397 = clause->handler_offset;
        D.20468 = (long unsigned int) D.20397;
        D.20469 = D.20468 * 16;
        D.20470 = D.20275 + D.20469;
        init_stack_with_value_at_exception_boundary (&ctx, D.20470, D.20474);
        <D.20473>:
        <D.20471>:
      }
      i = i + 1;
      <D.19463>:
      D.20256 = ctx.header;
      D.20435 = D.20256->num_clauses;
      D.20436 = (int) D.20435;
      if (D.20436 > i) goto <D.20478>; else goto <D.19460>;
      <D.20478>:
      D.20270 = ctx.valid;
      if (D.20270 != 0) goto <D.19462>; else goto <D.19460>;
      <D.19460>:
      D.20270 = ctx.valid;
      if (D.20270 == 0) goto cleanup; else goto <D.20479>;
      <D.20479>:
      bb = mono_basic_block_split (method, &error);
      original_bb = bb;
      D.20480 = mono_error_ok (&error);
      if (D.20480 == 0) goto <D.20481>; else goto <D.20482>;
      <D.20481>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20483 = mono_error_get_message (&error);
        D.20484 = monoeg_g_strdup_printf ("Invalid branch target: %s", D.20483);
        vinfo->info.message = D.20484;
        vinfo->exception_type = 3;
        D.20238 = ctx.list;
        D.20485 = monoeg_g_slist_prepend (D.20238, vinfo);
        ctx.list = D.20485;
      }
      ctx.valid = 0;
      mono_error_cleanup (&error);
      goto cleanup;
      <D.20482>:
      D.20486 = bb == 0B;
      D.20487 = (long int) D.20486;
      D.20488 = __builtin_expect (D.20487, 0);
      if (D.20488 != 0) goto <D.20489>; else goto <D.20490>;
      <D.20489>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 5001, "bb");
      <D.20490>:
      goto <D.19482>;
      <D.19792>:
      {
        int op_size;

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

          try
            {
              ip_copy = ip;
              D.20494 = bb->end;
              D.20495 = (unsigned int) D.20494;
              if (D.20495 < ip_offset) goto <D.20496>; else goto <D.20497>;
              <D.20496>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                D.20494 = bb->end;
                D.20498 = monoeg_g_strdup_printf ("Branch or EH block at [0x%04x] targets middle instruction at 0x%04x", D.20494, ip_offset);
                vinfo->info.message = D.20498;
                vinfo->exception_type = 3;
                D.20238 = ctx.list;
                D.20499 = monoeg_g_slist_prepend (D.20238, vinfo);
                ctx.list = D.20499;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20497>:
              D.20494 = bb->end;
              D.20495 = (unsigned int) D.20494;
              if (D.20495 == ip_offset) goto <D.20500>; else goto <D.20501>;
              <D.20500>:
              bb = bb->next;
              <D.20501>:
              op_size = mono_opcode_value_and_size (&ip_copy, end, &op);
              if (op_size == -1) goto <D.20502>; else goto <D.20503>;
              <D.20502>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                D.20504 = *ip;
                D.20505 = (int) D.20504;
                D.20506 = monoeg_g_strdup_printf ("Invalid instruction %x at 0x%04x", D.20505, ip_offset);
                vinfo->info.message = D.20506;
                vinfo->exception_type = 3;
                D.20238 = ctx.list;
                D.20507 = monoeg_g_slist_prepend (D.20238, vinfo);
                ctx.list = D.20507;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20503>:
              op_size.16 = (unsigned int) op_size;
              D.20511 = ip_offset + op_size.16;
              D.20494 = bb->end;
              D.20495 = (unsigned int) D.20494;
              if (D.20511 > D.20495) goto <D.20508>; else goto <D.20512>;
              <D.20512>:
              op_size.17 = (unsigned int) op_size;
              D.20514 = ~op_size.17;
              if (D.20514 < ip_offset) goto <D.20508>; else goto <D.20509>;
              <D.20508>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                D.20515 = monoeg_g_strdup_printf ("Branch or EH block targets middle of instruction at 0x%04x", ip_offset);
                vinfo->info.message = D.20515;
                vinfo->exception_type = 3;
                D.20238 = ctx.list;
                D.20516 = monoeg_g_slist_prepend (D.20238, vinfo);
                ctx.list = D.20516;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20509>:
              op_size.16 = (unsigned int) op_size;
              D.20511 = ip_offset + op_size.16;
              D.20494 = bb->end;
              D.20495 = (unsigned int) D.20494;
              if (D.20511 == D.20495) goto <D.20517>; else goto <D.20518>;
              <D.20517>:
              op.18 = op;
              D.20520 = mono_opcode_is_prefix (op.18);
              if (D.20520 != 0) goto <D.20521>; else goto <D.20522>;
              <D.20521>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                op.18 = op;
                D.20523 = mono_opcode_name (op.18);
                D.20524 = monoeg_g_strdup_printf ("Branch or EH block targets between prefix \'%s\' and instruction at 0x%04x", D.20523, ip_offset);
                vinfo->info.message = D.20524;
                vinfo->exception_type = 3;
                D.20238 = ctx.list;
                D.20525 = monoeg_g_slist_prepend (D.20238, vinfo);
                ctx.list = D.20525;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20522>:
              <D.20518>:
            }
          finally
            {
              ip_copy = {CLOBBER};
              op = {CLOBBER};
            }
        }
        ip.14 = (long int) ip;
        code_start.15 = (long int) code_start;
        D.20493 = ip.14 - code_start.15;
        ip_offset = (guint) D.20493;
        ctx.ip_offset = ip_offset;
        i = 0;
        goto <D.19480>;
        <D.19479>:
        {
          struct MonoExceptionClause * clause;

          D.20256 = ctx.header;
          D.20377 = D.20256->clauses;
          D.20335 = (long unsigned int) i;
          D.20378 = D.20335 * 32;
          clause = D.20377 + D.20378;
          D.20526 = clause->try_offset;
          D.20527 = clause->try_len;
          D.20528 = D.20526 + D.20527;
          if (D.20528 == ip_offset) goto <D.20529>; else goto <D.20530>;
          <D.20529>:
          if (start == 0) goto <D.20531>; else goto <D.20532>;
          <D.20531>:
          D.20291 = ctx.verifiable;
          if (D.20291 != 0) goto <D.20533>; else goto <D.20535>;
          <D.20535>:
          D.20293 = ctx.level;
          D.20294 = D.20293 & 128;
          if (D.20294 != 0) goto <D.20533>; else goto <D.20534>;
          <D.20533>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.20536 = monoeg_g_strdup_printf ("fallthru off try block at 0x%04x", ip_offset);
            vinfo->info.message = D.20536;
            vinfo->exception_type = 4;
            D.20238 = ctx.list;
            D.20537 = monoeg_g_slist_prepend (D.20238, vinfo);
            ctx.list = D.20537;
          }
          ctx.verifiable = 0;
          D.20293 = ctx.level;
          D.20297 = D.20293 & 16;
          if (D.20297 != 0) goto <D.20538>; else goto <D.20539>;
          <D.20538>:
          ctx.valid = 0;
          <D.20539>:
          <D.20534>:
          start = 1;
          <D.20532>:
          <D.20530>:
          D.20540 = clause->handler_offset;
          D.20541 = clause->handler_len;
          D.20542 = D.20540 + D.20541;
          if (D.20542 == ip_offset) goto <D.20543>; else goto <D.20544>;
          <D.20543>:
          if (start == 0) goto <D.20545>; else goto <D.20546>;
          <D.20545>:
          D.20547 = clause->flags;
          if (D.20547 == 1) goto <D.20548>; else goto <D.20549>;
          <D.20548>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20550 = monoeg_g_strdup_printf ("fallout of handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20550;
            vinfo->exception_type = 3;
            D.20238 = ctx.list;
            D.20551 = monoeg_g_slist_prepend (D.20238, vinfo);
            ctx.list = D.20551;
          }
          ctx.valid = 0;
          goto <D.20552>;
          <D.20549>:
          D.20291 = ctx.verifiable;
          if (D.20291 != 0) goto <D.20553>; else goto <D.20555>;
          <D.20555>:
          D.20293 = ctx.level;
          D.20294 = D.20293 & 128;
          if (D.20294 != 0) goto <D.20553>; else goto <D.20554>;
          <D.20553>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.20556 = monoeg_g_strdup_printf ("fallout of handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20556;
            vinfo->exception_type = 4;
            D.20238 = ctx.list;
            D.20557 = monoeg_g_slist_prepend (D.20238, vinfo);
            ctx.list = D.20557;
          }
          ctx.verifiable = 0;
          D.20293 = ctx.level;
          D.20297 = D.20293 & 16;
          if (D.20297 != 0) goto <D.20558>; else goto <D.20559>;
          <D.20558>:
          ctx.valid = 0;
          <D.20559>:
          <D.20554>:
          <D.20552>:
          start = 1;
          <D.20546>:
          <D.20544>:
          D.20547 = clause->flags;
          if (D.20547 == 1) goto <D.20560>; else goto <D.20561>;
          <D.20560>:
          D.20540 = clause->handler_offset;
          if (D.20540 == ip_offset) goto <D.20562>; else goto <D.20563>;
          <D.20562>:
          if (start == 0) goto <D.20564>; else goto <D.20565>;
          <D.20564>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20566 = monoeg_g_strdup_printf ("fallout of filter block at 0x%04x", ip_offset);
            vinfo->info.message = D.20566;
            vinfo->exception_type = 3;
            D.20238 = ctx.list;
            D.20567 = monoeg_g_slist_prepend (D.20238, vinfo);
            ctx.list = D.20567;
          }
          ctx.valid = 0;
          start = 1;
          <D.20565>:
          <D.20563>:
          <D.20561>:
          D.20540 = clause->handler_offset;
          if (D.20540 == ip_offset) goto <D.20568>; else goto <D.20569>;
          <D.20568>:
          if (start == 0) goto <D.20570>; else goto <D.20571>;
          <D.20570>:
          D.20291 = ctx.verifiable;
          if (D.20291 != 0) goto <D.20572>; else goto <D.20574>;
          <D.20574>:
          D.20293 = ctx.level;
          D.20294 = D.20293 & 128;
          if (D.20294 != 0) goto <D.20572>; else goto <D.20573>;
          <D.20572>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.20575 = monoeg_g_strdup_printf ("fallthru handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20575;
            vinfo->exception_type = 4;
            D.20238 = ctx.list;
            D.20576 = monoeg_g_slist_prepend (D.20238, vinfo);
            ctx.list = D.20576;
          }
          ctx.verifiable = 0;
          D.20293 = ctx.level;
          D.20297 = D.20293 & 16;
          if (D.20297 != 0) goto <D.20577>; else goto <D.20578>;
          <D.20577>:
          ctx.valid = 0;
          <D.20578>:
          <D.20573>:
          start = 1;
          <D.20571>:
          <D.20569>:
          D.20526 = clause->try_offset;
          if (D.20526 == ip_offset) goto <D.20579>; else goto <D.20580>;
          <D.20579>:
          D.20581 = ctx.eval.size;
          if (D.20581 != 0) goto <D.20582>; else goto <D.20583>;
          <D.20582>:
          if (start == 0) goto <D.20584>; else goto <D.20585>;
          <D.20584>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20586 = monoeg_g_strdup_printf ("Try to enter try block with a non-empty stack at 0x%04x", ip_offset);
            vinfo->info.message = D.20586;
            vinfo->exception_type = 3;
            D.20238 = ctx.list;
            D.20587 = monoeg_g_slist_prepend (D.20238, vinfo);
            ctx.list = D.20587;
          }
          ctx.valid = 0;
          start = 1;
          <D.20585>:
          <D.20583>:
          <D.20580>:
        }
        i = i + 1;
        <D.19480>:
        D.20256 = ctx.header;
        D.20435 = D.20256->num_clauses;
        D.20436 = (int) D.20435;
        if (D.20436 > i) goto <D.20588>; else goto <D.19481>;
        <D.20588>:
        D.20270 = ctx.valid;
        if (D.20270 != 0) goto <D.19479>; else goto <D.19481>;
        <D.19481>:
        D.20589 = BIT_FIELD_REF <*bb, 8, 384>;
        D.20590 = D.20589 & 2;
        if (D.20590 != 0) goto <D.20591>; else goto <D.20592>;
        <D.20591>:
        D.20275 = ctx.code;
        D.20593 = (long unsigned int) ip_offset;
        D.20594 = D.20593 * 16;
        D.20595 = D.20275 + D.20594;
        D.20275 = ctx.code;
        D.20593 = (long unsigned int) ip_offset;
        D.20594 = D.20593 * 16;
        D.20595 = D.20275 + D.20594;
        D.20596 = D.20595->flags;
        D.20597 = D.20596 | 1;
        D.20595->flags = D.20597;
        D.20598 = (sizetype) op_size;
        ip = ip + D.20598;
        // predicted unlikely by continue predictor.
        goto <D.19482>;
        <D.20592>:
        D.20270 = ctx.valid;
        if (D.20270 == 0) goto <D.19483>; else goto <D.20599>;
        <D.20599>:
        if (need_merge != 0) goto <D.20600>; else goto <D.20601>;
        <D.20600>:
        D.20275 = ctx.code;
        D.20602 = ctx.target;
        D.20603 = (long unsigned int) D.20602;
        D.20604 = D.20603 * 16;
        D.20605 = D.20275 + D.20604;
        merge_stacks (&ctx, &ctx.eval, D.20605, 0, 1);
        need_merge = 0;
        <D.20601>:
        D.20275 = ctx.code;
        D.20593 = (long unsigned int) ip_offset;
        D.20594 = D.20593 * 16;
        D.20595 = D.20275 + D.20594;
        merge_stacks (&ctx, &ctx.eval, D.20595, start, 0);
        start = 0;
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        switch (D.20505) <default: <D.19786>, case 0: <D.19484>, case 1: <D.19485>, case 2: <D.19487>, case 3: <D.19488>, case 4: <D.19489>, case 5: <D.19490>, case 6: <D.19515>, case 7: <D.19516>, case 8: <D.19517>, case 9: <D.19518>, case 10: <D.19519>, case 11: <D.19520>, case 12: <D.19521>, case 13: <D.19522>, case 14: <D.19491>, case 15: <D.19492>, case 16: <D.19525>, case 17: <D.19572>, case 18: <D.19573>, case 19: <D.19523>, case 20: <D.19547>, case 21: <D.19527>, case 22: <D.19528>, case 23: <D.19529>, case 24: <D.19530>, case 25: <D.19531>, case 26: <D.19532>, case 27: <D.19533>, case 28: <D.19534>, case 29: <D.19535>, case 30: <D.19536>, case 31: <D.19537>, case 32: <D.19539>, case 33: <D.19541>, case 34: <D.19543>, case 35: <D.19545>, case 36: <D.19575>, case 37: <D.19577>, case 38: <D.19513>, case 39: <D.19579>, case 40: <D.19584>, case 41: <D.19587>, case 42: <D.19514>, case 43: <D.19590>, case 44: <D.19592>, case 45: <D.19593>, case 46: <D.19548>, case 47: <D.19551>, case 48: <D.19552>, case 49: <D.19553>, case 50: <D.19554>, case 51: <D.19549>, case 52: <D.19555>, case 53: <D.19556>, case 54: <D.19557>, case 55: <D.19558>, case 56: <D.19595>, case 57: <D.19597>, case 58: <D.19598>, case 59: <D.19560>, case 60: <D.19563>, case 61: <D.19564>, case 62: <D.19565>, case 63: <D.19566>, case 64: <D.19561>, case 65: <D.19567>, case 66: <D.19568>, case 67: <D.19569>, case 68: <D.19570>, case 69: <D.19600>, case 70: <D.19605>, case 71: <D.19606>, case 72: <D.19607>, case 73: <D.19608>, case 74: <D.19609>, case 75: <D.19610>, case 76: <D.19611>, case 77: <D.19612>, case 78: <D.19613>, case 79: <D.19614>, case 80: <D.19615>, case 81: <D.19616>, case 82: <D.19617>, case 83: <D.19618>, case 84: <D.19619>, case 85: <D.19620>, case 86: <D.19621>, case 87: <D.19622>, case 88: <D.19500>, case 89: <D.19501>, case 90: <D.19502>, case 91: <D.19503>, case 92: <D.19506>, case 93: <D.19504>, case 94: <D.19508>, case 95: <D.19505>, case 96: <D.19507>, case 97: <D.19509>, case 98: <D.19510>, case 99: <D.19511>, case 100: <D.19512>, case 101: <D.19625>, case 102: <D.19624>, case 103: <D.19626>, case 104: <D.19627>, case 105: <D.19628>, case 106: <D.19632>, case 107: <D.19634>, case 108: <D.19635>, case 109: <D.19631>, case 110: <D.19633>, case 111: <D.19585>, case 112: <D.19639>, case 113: <D.19641>, case 114: <D.19643>, case 115: <D.19645>, case 116: <D.19647>, case 117: <D.19648>, case 118: <D.19636>, case 119: <D.19650>, case 120: <D.19651>, case 121: <D.19653>, case 122: <D.19655>, case 123: <D.19656>, case 124: <D.19657>, case 125: <D.19662>, case 126: <D.19659>, case 127: <D.19660>, case 128: <D.19664>, case 129: <D.19666>, case 130: <D.19668>, case 131: <D.19669>, case 132: <D.19670>, case 133: <D.19674>, case 134: <D.19671>, case 135: <D.19672>, case 136: <D.19673>, case 137: <D.19675>, case 138: <D.19676>, case 139: <D.19677>, case 140: <D.19678>, case 141: <D.19680>, case 142: <D.19682>, case 143: <D.19683>, case 144: <D.19685>, case 145: <D.19686>, case 146: <D.19687>, case 147: <D.19688>, case 148: <D.19689>, case 149: <D.19690>, case 150: <D.19691>, case 151: <D.19692>, case 152: <D.19693>, case 153: <D.19694>, case 154: <D.19695>, case 155: <D.19696>, case 156: <D.19697>, case 157: <D.19698>, case 158: <D.19699>, case 159: <D.19700>, case 160: <D.19701>, case 161: <D.19702>, case 162: <D.19703>, case 163: <D.19704>, case 164: <D.19706>, case 165: <D.19708>, case 179: <D.19710>, case 180: <D.19711>, case 181: <D.19712>, case 182: <D.19713>, case 183: <D.19714>, case 184: <D.19715>, case 185: <D.19716>, case 186: <D.19717>, case 194: <D.19720>, case 195: <D.19722>, case 198: <D.19723>, case 208: <D.19725>, case 209: <D.19630>, case 210: <D.19629>, case 211: <D.19637>, case 212: <D.19718>, case 213: <D.19719>, case 214: <D.19496>, case 215: <D.19494>, case 216: <D.19498>, case 217: <D.19499>, case 218: <D.19497>, case 219: <D.19495>, case 220: <D.19727>, case 221: <D.19729>, case 222: <D.19731>, case 223: <D.19623>, case 224: <D.19638>, case 254: <D.19733>>
        <D.19484>:
        <D.19485>:
        ip = ip + 1;
        goto <D.19486>;
        <D.19487>:
        <D.19488>:
        <D.19489>:
        <D.19490>:
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        D.20606 = D.20505 + -2;
        D.20607 = (unsigned int) D.20606;
        push_arg (&ctx, D.20607, 0);
        ip = ip + 1;
        goto <D.19486>;
        <D.19491>:
        <D.19492>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20608>; else goto <D.20611>;
        <D.20611>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20608>; else goto <D.20609>;
        <D.20608>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20614 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20614;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20615 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20615;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20609>:
        D.20504 = *ip;
        D.20616 = D.20504 == 15;
        D.20617 = (int) D.20616;
        D.20618 = ip + 1;
        D.20619 = *D.20618;
        D.20620 = (unsigned int) D.20619;
        push_arg (&ctx, D.20620, D.20617);
        ip = ip + 2;
        goto <D.19486>;
        <D.19494>:
        D.20504 = *ip;
        D.20621 = (unsigned int) D.20504;
        do_binop (&ctx, D.20621, &add_ovf_un_table);
        ip = ip + 1;
        goto <D.19486>;
        <D.19495>:
        D.20504 = *ip;
        D.20621 = (unsigned int) D.20504;
        do_binop (&ctx, D.20621, &sub_ovf_un_table);
        ip = ip + 1;
        goto <D.19486>;
        <D.19496>:
        <D.19497>:
        <D.19498>:
        <D.19499>:
        D.20504 = *ip;
        D.20621 = (unsigned int) D.20504;
        do_binop (&ctx, D.20621, &bin_ovf_table);
        ip = ip + 1;
        goto <D.19486>;
        <D.19500>:
        D.20504 = *ip;
        D.20621 = (unsigned int) D.20504;
        do_binop (&ctx, D.20621, &add_table);
        ip = ip + 1;
        goto <D.19486>;
        <D.19501>:
        D.20504 = *ip;
        D.20621 = (unsigned int) D.20504;
        do_binop (&ctx, D.20621, &sub_table);
        ip = ip + 1;
        goto <D.19486>;
        <D.19502>:
        <D.19503>:
        <D.19504>:
        D.20504 = *ip;
        D.20621 = (unsigned int) D.20504;
        do_binop (&ctx, D.20621, &bin_op_table);
        ip = ip + 1;
        goto <D.19486>;
        <D.19505>:
        <D.19506>:
        <D.19507>:
        <D.19508>:
        <D.19509>:
        D.20504 = *ip;
        D.20621 = (unsigned int) D.20504;
        do_binop (&ctx, D.20621, &int_bin_op_table);
        ip = ip + 1;
        goto <D.19486>;
        <D.19510>:
        <D.19511>:
        <D.19512>:
        D.20504 = *ip;
        D.20621 = (unsigned int) D.20504;
        do_binop (&ctx, D.20621, &shift_op_table);
        ip = ip + 1;
        goto <D.19486>;
        <D.19513>:
        D.20622 = check_underflow (&ctx, 1);
        if (D.20622 == 0) goto <D.19486>; else goto <D.20623>;
        <D.20623>:
        stack_pop_safe (&ctx);
        ip = ip + 1;
        goto <D.19486>;
        <D.19514>:
        do_ret (&ctx);
        ip = ip + 1;
        start = 1;
        goto <D.19486>;
        <D.19515>:
        <D.19516>:
        <D.19517>:
        <D.19518>:
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        D.20624 = D.20505 + -6;
        D.20625 = (unsigned int) D.20624;
        push_local (&ctx, D.20625, 0);
        ip = ip + 1;
        goto <D.19486>;
        <D.19519>:
        <D.19520>:
        <D.19521>:
        <D.19522>:
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        D.20626 = D.20505 + -10;
        D.20627 = (unsigned int) D.20626;
        store_local (&ctx, D.20627);
        ip = ip + 1;
        goto <D.19486>;
        <D.19523>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20628>; else goto <D.20630>;
        <D.20630>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20628>; else goto <D.20629>;
        <D.20628>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20631 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20631;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20632 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20632;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20629>:
        D.20618 = ip + 1;
        D.20619 = *D.20618;
        D.20633 = (unsigned int) D.20619;
        store_local (&ctx, D.20633);
        ip = ip + 2;
        goto <D.19486>;
        <D.19525>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20634>; else goto <D.20636>;
        <D.20636>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20634>; else goto <D.20635>;
        <D.20634>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20637 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20637;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20638 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20638;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20635>:
        D.20618 = ip + 1;
        D.20619 = *D.20618;
        D.20633 = (unsigned int) D.20619;
        store_arg (&ctx, D.20633);
        ip = ip + 2;
        goto <D.19486>;
        <D.19527>:
        <D.19528>:
        <D.19529>:
        <D.19530>:
        <D.19531>:
        <D.19532>:
        <D.19533>:
        <D.19534>:
        <D.19535>:
        <D.19536>:
        D.20639 = check_overflow (&ctx);
        if (D.20639 != 0) goto <D.20640>; else goto <D.20641>;
        <D.20640>:
        D.20642 = mono_defaults.int32_class;
        D.20643 = &D.20642->byval_arg;
        stack_push_val (&ctx, 1, D.20643);
        <D.20641>:
        ip = ip + 1;
        goto <D.19486>;
        <D.19537>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20644>; else goto <D.20646>;
        <D.20646>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20644>; else goto <D.20645>;
        <D.20644>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20647 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20647;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20648 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20648;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20645>:
        D.20649 = check_overflow (&ctx);
        if (D.20649 != 0) goto <D.20650>; else goto <D.20651>;
        <D.20650>:
        D.20642 = mono_defaults.int32_class;
        D.20643 = &D.20642->byval_arg;
        stack_push_val (&ctx, 1, D.20643);
        <D.20651>:
        ip = ip + 2;
        goto <D.19486>;
        <D.19539>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20652>; else goto <D.20655>;
        <D.20655>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20652>; else goto <D.20653>;
        <D.20652>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20656 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20656;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20657 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20657;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20653>:
        D.20658 = check_overflow (&ctx);
        if (D.20658 != 0) goto <D.20659>; else goto <D.20660>;
        <D.20659>:
        D.20642 = mono_defaults.int32_class;
        D.20643 = &D.20642->byval_arg;
        stack_push_val (&ctx, 1, D.20643);
        <D.20660>:
        ip = ip + 5;
        goto <D.19486>;
        <D.19541>:
        D.20663 = ip + 9;
        if (D.20663 > end) goto <D.20661>; else goto <D.20664>;
        <D.20664>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551606) goto <D.20661>; else goto <D.20662>;
        <D.20661>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20665 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20665;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20666 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20666;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20662>:
        D.20667 = check_overflow (&ctx);
        if (D.20667 != 0) goto <D.20668>; else goto <D.20669>;
        <D.20668>:
        D.20670 = mono_defaults.int64_class;
        D.20671 = &D.20670->byval_arg;
        stack_push_val (&ctx, 2, D.20671);
        <D.20669>:
        ip = ip + 9;
        goto <D.19486>;
        <D.19543>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20672>; else goto <D.20674>;
        <D.20674>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20672>; else goto <D.20673>;
        <D.20672>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20675 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20675;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20676 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20676;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20673>:
        D.20677 = check_overflow (&ctx);
        if (D.20677 != 0) goto <D.20678>; else goto <D.20679>;
        <D.20678>:
        D.20680 = mono_defaults.double_class;
        D.20681 = &D.20680->byval_arg;
        stack_push_val (&ctx, 4, D.20681);
        <D.20679>:
        ip = ip + 5;
        goto <D.19486>;
        <D.19545>:
        D.20663 = ip + 9;
        if (D.20663 > end) goto <D.20682>; else goto <D.20684>;
        <D.20684>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551606) goto <D.20682>; else goto <D.20683>;
        <D.20682>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20685 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20685;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20686 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20686;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20683>:
        D.20687 = check_overflow (&ctx);
        if (D.20687 != 0) goto <D.20688>; else goto <D.20689>;
        <D.20688>:
        D.20680 = mono_defaults.double_class;
        D.20681 = &D.20680->byval_arg;
        stack_push_val (&ctx, 4, D.20681);
        <D.20689>:
        ip = ip + 9;
        goto <D.19486>;
        <D.19547>:
        D.20690 = check_overflow (&ctx);
        if (D.20690 != 0) goto <D.20691>; else goto <D.20692>;
        <D.20691>:
        D.20693 = mono_defaults.object_class;
        D.20694 = &D.20693->byval_arg;
        stack_push_val (&ctx, 1030, D.20694);
        <D.20692>:
        ip = ip + 1;
        goto <D.19486>;
        <D.19548>:
        <D.19549>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20695>; else goto <D.20697>;
        <D.20697>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20695>; else goto <D.20696>;
        <D.20695>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20698 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20698;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20699 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20699;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20696>:
        D.20618 = ip + 1;
        D.20619 = *D.20618;
        D.20700 = (signed char) D.20619;
        D.20701 = (int) D.20700;
        D.20702 = D.20701 + 2;
        do_branch_op (&ctx, D.20702, &cmp_br_eq_op);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19486>;
        <D.19551>:
        <D.19552>:
        <D.19553>:
        <D.19554>:
        <D.19555>:
        <D.19556>:
        <D.19557>:
        <D.19558>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20703>; else goto <D.20705>;
        <D.20705>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20703>; else goto <D.20704>;
        <D.20703>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20706 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20706;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20707 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20707;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20704>:
        D.20618 = ip + 1;
        D.20619 = *D.20618;
        D.20700 = (signed char) D.20619;
        D.20701 = (int) D.20700;
        D.20702 = D.20701 + 2;
        do_branch_op (&ctx, D.20702, &cmp_br_op);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19486>;
        <D.19560>:
        <D.19561>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20708>; else goto <D.20710>;
        <D.20710>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20708>; else goto <D.20709>;
        <D.20708>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20711 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20711;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20712 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20712;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20709>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        D.20716 = D.20715 + 5;
        do_branch_op (&ctx, D.20716, &cmp_br_eq_op);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19486>;
        <D.19563>:
        <D.19564>:
        <D.19565>:
        <D.19566>:
        <D.19567>:
        <D.19568>:
        <D.19569>:
        <D.19570>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20717>; else goto <D.20719>;
        <D.20719>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20717>; else goto <D.20718>;
        <D.20717>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20720 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20720;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20721 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20721;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20718>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        D.20716 = D.20715 + 5;
        do_branch_op (&ctx, D.20716, &cmp_br_op);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19486>;
        <D.19572>:
        <D.19573>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20722>; else goto <D.20724>;
        <D.20724>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20722>; else goto <D.20723>;
        <D.20722>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20725 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20725;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20726 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20726;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20723>:
        D.20504 = *ip;
        D.20727 = D.20504 == 18;
        D.20728 = (int) D.20727;
        D.20618 = ip + 1;
        D.20619 = *D.20618;
        D.20633 = (unsigned int) D.20619;
        push_local (&ctx, D.20633, D.20728);
        ip = ip + 2;
        goto <D.19486>;
        <D.19575>:
        {
          struct MonoVerifyInfoExtended * vinfo;

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

          D.20731 = check_underflow (&ctx, 1);
          if (D.20731 == 0) goto <D.19486>; else goto <D.20732>;
          <D.20732>:
          D.20733 = check_overflow (&ctx);
          if (D.20733 == 0) goto <D.19486>; else goto <D.20734>;
          <D.20734>:
          top = stack_push (&ctx);
          D.20735 = stack_peek (&ctx, 1);
          copy_stack_value (top, D.20735);
          ip = ip + 1;
          goto <D.19486>;
        }
        <D.19579>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20736>; else goto <D.20738>;
        <D.20738>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20736>; else goto <D.20737>;
        <D.20736>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20739 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20739;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20740 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20740;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20737>:
        D.20581 = ctx.eval.size;
        if (D.20581 != 0) goto <D.20741>; else goto <D.20742>;
        <D.20741>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20743 = monoeg_g_strdup_printf ("Eval stack must be empty in jmp at 0x%04x", ip_offset);
          vinfo->info.message = D.20743;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20744 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20744;
        }
        ctx.valid = 0;
        <D.20742>:
        token = MEM[(const guint32 *)ip + 1B];
        D.20256 = ctx.header;
        D.20745 = in_any_block (D.20256, ip_offset);
        if (D.20745 != 0) goto <D.20746>; else goto <D.20747>;
        <D.20746>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20748 = monoeg_g_strdup_printf ("jmp cannot escape exception blocks at 0x%04x", ip_offset);
          vinfo->info.message = D.20748;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20749 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20749;
        }
        ctx.valid = 0;
        <D.20747>:
        D.20291 = ctx.verifiable;
        if (D.20291 != 0) goto <D.20750>; else goto <D.20752>;
        <D.20752>:
        D.20293 = ctx.level;
        D.20294 = D.20293 & 128;
        if (D.20294 != 0) goto <D.20750>; else goto <D.20751>;
        <D.20750>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.20613 = ctx.ip_offset;
          D.20753 = monoeg_g_strdup_printf ("Intruction jmp is not verifiable at 0x%04x", D.20613);
          vinfo->info.message = D.20753;
          vinfo->exception_type = 4;
          D.20238 = ctx.list;
          D.20754 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20754;
        }
        ctx.verifiable = 0;
        D.20293 = ctx.level;
        D.20297 = D.20293 & 16;
        if (D.20297 != 0) goto <D.20755>; else goto <D.20756>;
        <D.20755>:
        ctx.valid = 0;
        <D.20756>:
        <D.20751>:
        ip = ip + 5;
        goto <D.19486>;
        <D.19584>:
        <D.19585>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20757>; else goto <D.20759>;
        <D.20759>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20757>; else goto <D.20758>;
        <D.20757>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20760 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20760;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20761 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20761;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20758>:
        D.20504 = *ip;
        D.20762 = D.20504 == 111;
        D.20763 = (int) D.20762;
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_invoke_method (&ctx, D.20715, D.20763);
        ip = ip + 5;
        goto <D.19486>;
        <D.19587>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20764>; else goto <D.20766>;
        <D.20766>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20764>; else goto <D.20765>;
        <D.20764>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20767 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20767;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20768 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20768;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20765>:
        token = MEM[(const guint32 *)ip + 1B];
        D.20291 = ctx.verifiable;
        if (D.20291 != 0) goto <D.20769>; else goto <D.20771>;
        <D.20771>:
        D.20293 = ctx.level;
        D.20294 = D.20293 & 128;
        if (D.20294 != 0) goto <D.20769>; else goto <D.20770>;
        <D.20769>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.20613 = ctx.ip_offset;
          D.20772 = monoeg_g_strdup_printf ("Intruction calli is not verifiable at 0x%04x", D.20613);
          vinfo->info.message = D.20772;
          vinfo->exception_type = 4;
          D.20238 = ctx.list;
          D.20773 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20773;
        }
        ctx.verifiable = 0;
        D.20293 = ctx.level;
        D.20297 = D.20293 & 16;
        if (D.20297 != 0) goto <D.20774>; else goto <D.20775>;
        <D.20774>:
        ctx.valid = 0;
        <D.20775>:
        <D.20770>:
        ip = ip + 5;
        goto <D.19486>;
        <D.19590>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20776>; else goto <D.20778>;
        <D.20778>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20776>; else goto <D.20777>;
        <D.20776>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20779 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20779;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20780 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20780;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20777>:
        D.20618 = ip + 1;
        D.20619 = *D.20618;
        D.20700 = (signed char) D.20619;
        D.20701 = (int) D.20700;
        D.20702 = D.20701 + 2;
        do_static_branch (&ctx, D.20702);
        need_merge = 1;
        ip = ip + 2;
        start = 1;
        goto <D.19486>;
        <D.19592>:
        <D.19593>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20781>; else goto <D.20783>;
        <D.20783>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20781>; else goto <D.20782>;
        <D.20781>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20784 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20784;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20785 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20785;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20782>:
        D.20618 = ip + 1;
        D.20619 = *D.20618;
        D.20700 = (signed char) D.20619;
        D.20701 = (int) D.20700;
        D.20702 = D.20701 + 2;
        do_boolean_branch_op (&ctx, D.20702);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19486>;
        <D.19595>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20786>; else goto <D.20788>;
        <D.20788>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20786>; else goto <D.20787>;
        <D.20786>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20789 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20789;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20790 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20790;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20787>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        D.20716 = D.20715 + 5;
        do_static_branch (&ctx, D.20716);
        need_merge = 1;
        ip = ip + 5;
        start = 1;
        goto <D.19486>;
        <D.19597>:
        <D.19598>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20791>; else goto <D.20793>;
        <D.20793>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20791>; else goto <D.20792>;
        <D.20791>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20794 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20794;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20795 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20795;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20792>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        D.20716 = D.20715 + 5;
        do_boolean_branch_op (&ctx, D.20716);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19486>;
        <D.19600>:
        {
          guint32 entries;

          D.20654 = ip + 5;
          if (D.20654 > end) goto <D.20796>; else goto <D.20798>;
          <D.20798>:
          ip.19 = (long unsigned int) ip;
          if (ip.19 > 18446744073709551610) goto <D.20796>; else goto <D.20797>;
          <D.20796>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20613 = ctx.ip_offset;
            D.20504 = *ip;
            D.20505 = (int) D.20504;
            D.20799 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
            vinfo->info.message = D.20799;
            vinfo->exception_type = 3;
            D.20238 = ctx.list;
            D.20800 = monoeg_g_slist_prepend (D.20238, vinfo);
            ctx.list = D.20800;
          }
          ctx.valid = 0;
          goto <D.19486>;
          <D.20797>:
          entries = MEM[(const guint32 *)ip + 1B];
          if (entries > 1073741823) goto <D.20801>; else goto <D.20802>;
          <D.20801>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20613 = ctx.ip_offset;
            D.20803 = monoeg_g_strdup_printf ("Too many switch entries %x at 0x%04x", entries, D.20613);
            vinfo->info.message = D.20803;
            vinfo->exception_type = 3;
            D.20238 = ctx.list;
            D.20804 = monoeg_g_slist_prepend (D.20238, vinfo);
            ctx.list = D.20804;
          }
          ctx.valid = 0;
          <D.20802>:
          ip = ip + 5;
          D.20807 = (long unsigned int) entries;
          D.20808 = D.20807 * 4;
          D.20809 = ip + D.20808;
          if (D.20809 > end) goto <D.20805>; else goto <D.20810>;
          <D.20810>:
          D.20807 = (long unsigned int) entries;
          D.20808 = D.20807 * 4;
          D.20811 = ~D.20808;
          ip.19 = (long unsigned int) ip;
          if (D.20811 < ip.19) goto <D.20805>; else goto <D.20806>;
          <D.20805>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20613 = ctx.ip_offset;
            D.20504 = *ip;
            D.20505 = (int) D.20504;
            D.20812 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
            vinfo->info.message = D.20812;
            vinfo->exception_type = 3;
            D.20238 = ctx.list;
            D.20813 = monoeg_g_slist_prepend (D.20238, vinfo);
            ctx.list = D.20813;
          }
          ctx.valid = 0;
          goto <D.19486>;
          <D.20806>:
          entries.20 = (int) entries;
          do_switch (&ctx, entries.20, ip);
          D.20807 = (long unsigned int) entries;
          D.20808 = D.20807 * 4;
          ip = ip + D.20808;
          goto <D.19486>;
        }
        <D.19605>:
        <D.19606>:
        <D.19607>:
        <D.19608>:
        <D.19609>:
        <D.19610>:
        <D.19611>:
        <D.19612>:
        <D.19613>:
        <D.19614>:
        <D.19615>:
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        do_load_indirect (&ctx, D.20505);
        ip = ip + 1;
        goto <D.19486>;
        <D.19616>:
        <D.19617>:
        <D.19618>:
        <D.19619>:
        <D.19620>:
        <D.19621>:
        <D.19622>:
        <D.19623>:
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        do_store_indirect (&ctx, D.20505);
        ip = ip + 1;
        goto <D.19486>;
        <D.19624>:
        <D.19625>:
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        do_unary_math_op (&ctx, D.20505);
        ip = ip + 1;
        goto <D.19486>;
        <D.19626>:
        <D.19627>:
        <D.19628>:
        <D.19629>:
        <D.19630>:
        <D.19631>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19486>;
        <D.19632>:
        <D.19633>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19486>;
        <D.19634>:
        <D.19635>:
        <D.19636>:
        do_conversion (&ctx, 4);
        ip = ip + 1;
        goto <D.19486>;
        <D.19637>:
        <D.19638>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19486>;
        <D.19639>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20815>; else goto <D.20817>;
        <D.20817>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20815>; else goto <D.20816>;
        <D.20815>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20818 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20818;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20819 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20819;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20816>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_cpobj (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19641>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20820>; else goto <D.20822>;
        <D.20822>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20820>; else goto <D.20821>;
        <D.20820>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20823 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20823;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20824 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20824;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20821>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_ldobj_value (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19643>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20825>; else goto <D.20827>;
        <D.20827>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20825>; else goto <D.20826>;
        <D.20825>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20828 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20828;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20829 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20829;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20826>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        do_ldstr (&ctx, D.20714);
        ip = ip + 5;
        goto <D.19486>;
        <D.19645>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20830>; else goto <D.20832>;
        <D.20832>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20830>; else goto <D.20831>;
        <D.20830>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20833 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20833;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20834 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20834;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20831>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_newobj (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19647>:
        <D.19648>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20835>; else goto <D.20837>;
        <D.20837>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20835>; else goto <D.20836>;
        <D.20835>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20838 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20838;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20839 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20839;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20836>:
        D.20504 = *ip;
        if (D.20504 == 116) goto <D.20841>; else goto <D.20842>;
        <D.20841>:
        iftmp.21 = "castclass";
        goto <D.20843>;
        <D.20842>:
        iftmp.21 = "isinst";
        <D.20843>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_cast (&ctx, D.20715, iftmp.21);
        ip = ip + 5;
        goto <D.19486>;
        <D.19650>:
        <D.19651>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20844 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.20844;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20845 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20845;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.19486>;
        <D.19653>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20846>; else goto <D.20848>;
        <D.20848>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20846>; else goto <D.20847>;
        <D.20846>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20849 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20849;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20850 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20850;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20847>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_unbox_value (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19655>:
        do_throw (&ctx);
        start = 1;
        ip = ip + 1;
        goto <D.19486>;
        <D.19656>:
        <D.19657>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20851>; else goto <D.20853>;
        <D.20853>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20851>; else goto <D.20852>;
        <D.20851>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20854 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20854;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20855 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20855;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20852>:
        D.20504 = *ip;
        D.20856 = D.20504 == 124;
        D.20857 = (int) D.20856;
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_push_field (&ctx, D.20715, D.20857);
        ip = ip + 5;
        goto <D.19486>;
        <D.19659>:
        <D.19660>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20858>; else goto <D.20860>;
        <D.20860>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20858>; else goto <D.20859>;
        <D.20858>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20861 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20861;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20862 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20862;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20859>:
        D.20504 = *ip;
        D.20863 = D.20504 == 127;
        D.20864 = (int) D.20863;
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_push_static_field (&ctx, D.20715, D.20864);
        ip = ip + 5;
        goto <D.19486>;
        <D.19662>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20865>; else goto <D.20867>;
        <D.20867>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20865>; else goto <D.20866>;
        <D.20865>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20868 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20868;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20869 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20869;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20866>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_store_field (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19664>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20870>; else goto <D.20872>;
        <D.20872>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20870>; else goto <D.20871>;
        <D.20870>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20873 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20873;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20874 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20874;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20871>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_store_static_field (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19666>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20875>; else goto <D.20877>;
        <D.20877>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20875>; else goto <D.20876>;
        <D.20875>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20878 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20878;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20879 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20879;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20876>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_stobj (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19668>:
        <D.19669>:
        <D.19670>:
        <D.19671>:
        <D.19672>:
        <D.19673>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19486>;
        <D.19674>:
        <D.19675>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19486>;
        <D.19676>:
        <D.19677>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19486>;
        <D.19678>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20880>; else goto <D.20882>;
        <D.20882>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20880>; else goto <D.20881>;
        <D.20880>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20883 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20883;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20884 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20884;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20881>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_box_value (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19680>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20885>; else goto <D.20887>;
        <D.20887>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20885>; else goto <D.20886>;
        <D.20885>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20888 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20888;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20889 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20889;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20886>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_newarr (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19682>:
        do_ldlen (&ctx);
        ip = ip + 1;
        goto <D.19486>;
        <D.19683>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20890>; else goto <D.20892>;
        <D.20892>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20890>; else goto <D.20891>;
        <D.20890>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20893 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20893;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20894 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20894;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20891>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_ldelema (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19685>:
        <D.19686>:
        <D.19687>:
        <D.19688>:
        <D.19689>:
        <D.19690>:
        <D.19691>:
        <D.19692>:
        <D.19693>:
        <D.19694>:
        <D.19695>:
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        do_ldelem (&ctx, D.20505, 0);
        ip = ip + 1;
        goto <D.19486>;
        <D.19696>:
        <D.19697>:
        <D.19698>:
        <D.19699>:
        <D.19700>:
        <D.19701>:
        <D.19702>:
        <D.19703>:
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        do_stelem (&ctx, D.20505, 0);
        ip = ip + 1;
        goto <D.19486>;
        <D.19704>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20895>; else goto <D.20897>;
        <D.20897>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20895>; else goto <D.20896>;
        <D.20895>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20898 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20898;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20899 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20899;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20896>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        do_ldelem (&ctx, D.20505, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19706>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20900>; else goto <D.20902>;
        <D.20902>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20900>; else goto <D.20901>;
        <D.20900>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20903 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20903;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20904 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20904;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20901>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        do_stelem (&ctx, D.20505, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19708>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20905>; else goto <D.20907>;
        <D.20907>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20905>; else goto <D.20906>;
        <D.20905>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20908 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20908;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20909 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20909;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20906>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_unbox_any (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19710>:
        <D.19711>:
        <D.19712>:
        <D.19713>:
        <D.19714>:
        <D.19715>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19486>;
        <D.19716>:
        <D.19717>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19486>;
        <D.19718>:
        <D.19719>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19486>;
        <D.19720>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20910>; else goto <D.20912>;
        <D.20912>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20910>; else goto <D.20911>;
        <D.20910>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20913 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20913;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20914 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20914;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20911>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_refanyval (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19722>:
        do_ckfinite (&ctx);
        ip = ip + 1;
        goto <D.19486>;
        <D.19723>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20915>; else goto <D.20917>;
        <D.20917>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20915>; else goto <D.20916>;
        <D.20915>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20918 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20918;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20919 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20919;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20916>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_mkrefany (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19725>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20920>; else goto <D.20922>;
        <D.20922>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20920>; else goto <D.20921>;
        <D.20920>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20923 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20923;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20924 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20924;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20921>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_load_token (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19486>;
        <D.19727>:
        D.20256 = ctx.header;
        D.20925 = is_correct_endfinally (D.20256, ip_offset);
        if (D.20925 == 0) goto <D.20926>; else goto <D.20927>;
        <D.20926>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20928 = monoeg_g_strdup_printf ("endfinally must be used inside a finally/fault handler at 0x%04x", D.20613);
          vinfo->info.message = D.20928;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20929 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20929;
        }
        ctx.valid = 0;
        <D.20927>:
        ctx.eval.size = 0;
        start = 1;
        ip = ip + 1;
        goto <D.19486>;
        <D.19729>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20930>; else goto <D.20932>;
        <D.20932>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20930>; else goto <D.20931>;
        <D.20930>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20933 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20933;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20934 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20934;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20931>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20935 = D.20714 + 5;
        D.20936 = (int) D.20935;
        do_leave (&ctx, D.20936);
        ip = ip + 5;
        start = 1;
        need_merge = 1;
        goto <D.19486>;
        <D.19731>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20937>; else goto <D.20939>;
        <D.20939>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20937>; else goto <D.20938>;
        <D.20937>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20940 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20940;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20941 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20941;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20938>:
        D.20618 = ip + 1;
        D.20619 = *D.20618;
        D.20700 = (signed char) D.20619;
        D.20701 = (int) D.20700;
        D.20702 = D.20701 + 2;
        do_leave (&ctx, D.20702);
        ip = ip + 2;
        start = 1;
        need_merge = 1;
        goto <D.19486>;
        <D.19733>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20942>; else goto <D.20944>;
        <D.20944>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20942>; else goto <D.20943>;
        <D.20942>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20945 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20945;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20946 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20946;
        }
        ctx.valid = 0;
        goto <D.19486>;
        <D.20943>:
        ip = ip + 1;
        D.20504 = *ip;
        D.20505 = (int) D.20504;
        switch (D.20505) <default: <D.19784>, case 0: <D.19745>, case 1: <D.19738>, case 2: <D.19739>, case 3: <D.19740>, case 4: <D.19741>, case 5: <D.19742>, case 6: <D.19747>, case 7: <D.19749>, case 8: <D.19758>, case 9: <D.19751>, case 10: <D.19752>, case 11: <D.19743>, case 12: <D.19754>, case 13: <D.19755>, case 14: <D.19735>, case 15: <D.19757>, case 16: <D.19759>, case 17: <D.19763>, case 18: <D.19764>, case 19: <D.19766>, case 20: <D.19767>, case 21: <D.19769>, case 22: <D.19771>, case 23: <D.19774>, case 24: <D.19776>, case 25: <D.19778>, case 26: <D.19779>, case 27: <D.19761>, case 28: <D.19781>, case 29: <D.19783>, case 30: <D.19773>, case 34: <D.19760>>
        <D.19735>:
        D.20949 = ip + 3;
        if (D.20949 > end) goto <D.20947>; else goto <D.20950>;
        <D.20950>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.20947>; else goto <D.20948>;
        <D.20947>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20951 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20951;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20952 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20952;
        }
        ctx.valid = 0;
        goto <D.19737>;
        <D.20948>:
        D.20953 = ip + 1;
        D.20954 = *D.20953;
        D.20955 = (unsigned int) D.20954;
        store_local (&ctx, D.20955);
        ip = ip + 3;
        goto <D.19737>;
        <D.19738>:
        D.20504 = *ip;
        D.20956 = (unsigned int) D.20504;
        do_cmp_op (&ctx, &cmp_br_eq_op, D.20956);
        ip = ip + 1;
        goto <D.19737>;
        <D.19739>:
        <D.19740>:
        <D.19741>:
        <D.19742>:
        D.20504 = *ip;
        D.20956 = (unsigned int) D.20504;
        do_cmp_op (&ctx, &cmp_br_op, D.20956);
        ip = ip + 1;
        goto <D.19737>;
        <D.19743>:
        D.20949 = ip + 3;
        if (D.20949 > end) goto <D.20957>; else goto <D.20959>;
        <D.20959>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.20957>; else goto <D.20958>;
        <D.20957>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20960 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20960;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20961 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20961;
        }
        ctx.valid = 0;
        goto <D.19737>;
        <D.20958>:
        D.20953 = ip + 1;
        D.20954 = *D.20953;
        D.20955 = (unsigned int) D.20954;
        store_arg (&ctx, D.20955);
        ip = ip + 3;
        goto <D.19737>;
        <D.19745>:
        D.20962 = check_overflow (&ctx);
        if (D.20962 == 0) goto <D.19737>; else goto <D.20963>;
        <D.20963>:
        D.20234 = ctx.signature;
        D.20304 = BIT_FIELD_REF <*D.20234, 8, 112>;
        D.20964 = D.20304 & 63;
        if (D.20964 != 5) goto <D.20965>; else goto <D.20966>;
        <D.20965>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20967 = monoeg_g_strdup_printf ("Cannot use arglist on method without VARGARG calling convention at 0x%04x", D.20613);
          vinfo->info.message = D.20967;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20968 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20968;
        }
        ctx.valid = 0;
        <D.20966>:
        D.20969 = mono_defaults.argumenthandle_class;
        D.20970 = &D.20969->byval_arg;
        D.20971 = stack_push (&ctx);
        set_stack_value (&ctx, D.20971, D.20970, 0);
        ip = ip + 1;
        goto <D.19737>;
        <D.19747>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20972>; else goto <D.20974>;
        <D.20974>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20972>; else goto <D.20973>;
        <D.20972>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20975 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20975;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20976 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20976;
        }
        ctx.valid = 0;
        goto <D.19737>;
        <D.20973>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        do_load_function_ptr (&ctx, D.20714, 0);
        ip = ip + 5;
        goto <D.19737>;
        <D.19749>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.20977>; else goto <D.20979>;
        <D.20979>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20977>; else goto <D.20978>;
        <D.20977>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20980 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20980;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20981 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20981;
        }
        ctx.valid = 0;
        goto <D.19737>;
        <D.20978>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        do_load_function_ptr (&ctx, D.20714, 1);
        ip = ip + 5;
        goto <D.19737>;
        <D.19751>:
        <D.19752>:
        D.20949 = ip + 3;
        if (D.20949 > end) goto <D.20982>; else goto <D.20984>;
        <D.20984>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.20982>; else goto <D.20983>;
        <D.20982>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20985 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20985;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20986 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20986;
        }
        ctx.valid = 0;
        goto <D.19737>;
        <D.20983>:
        D.20504 = *ip;
        D.20987 = D.20504 == 10;
        D.20988 = (int) D.20987;
        D.20953 = ip + 1;
        D.20954 = *D.20953;
        D.20989 = (unsigned int) D.20954;
        push_arg (&ctx, D.20989, D.20988);
        ip = ip + 3;
        goto <D.19737>;
        <D.19754>:
        <D.19755>:
        D.20949 = ip + 3;
        if (D.20949 > end) goto <D.20990>; else goto <D.20992>;
        <D.20992>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.20990>; else goto <D.20991>;
        <D.20990>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.20993 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.20993;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20994 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20994;
        }
        ctx.valid = 0;
        goto <D.19737>;
        <D.20991>:
        D.20504 = *ip;
        D.20995 = D.20504 == 13;
        D.20996 = (int) D.20995;
        D.20953 = ip + 1;
        D.20954 = *D.20953;
        D.20955 = (unsigned int) D.20954;
        push_local (&ctx, D.20955, D.20996);
        ip = ip + 3;
        goto <D.19737>;
        <D.19757>:
        do_localloc (&ctx);
        ip = ip + 1;
        goto <D.19737>;
        <D.19758>:
        <D.19759>:
        <D.19760>:
        <D.19761>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20997 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.20997;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.20998 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.20998;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.19737>;
        <D.19763>:
        do_endfilter (&ctx);
        start = 1;
        ip = ip + 1;
        goto <D.19737>;
        <D.19764>:
        D.20610 = ip + 2;
        if (D.20610 > end) goto <D.20999>; else goto <D.21001>;
        <D.21001>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20999>; else goto <D.21000>;
        <D.20999>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.21002 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.21002;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21003 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21003;
        }
        ctx.valid = 0;
        goto <D.19737>;
        <D.21000>:
        prefix = prefix | 1;
        ip = ip + 2;
        goto <D.19737>;
        <D.19766>:
        prefix = prefix | 2;
        ip = ip + 1;
        goto <D.19737>;
        <D.19767>:
        prefix = prefix | 4;
        ip = ip + 1;
        if (ip < end) goto <D.21004>; else goto <D.21005>;
        <D.21004>:
        D.20504 = *ip;
        D.21006 = D.20504 + 216;
        D.21007 = D.21006 > 1;
        D.20504 = *ip;
        D.21008 = D.20504 != 111;
        D.21009 = D.21007 & D.21008;
        if (D.21009 != 0) goto <D.21010>; else goto <D.21011>;
        <D.21010>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21012 = monoeg_g_strdup_printf ("tail prefix must be used only with call opcodes at 0x%04x", ip_offset);
          vinfo->info.message = D.21012;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21013 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21013;
        }
        ctx.valid = 0;
        <D.21011>:
        <D.21005>:
        goto <D.19737>;
        <D.19769>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.21014>; else goto <D.21016>;
        <D.21016>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21014>; else goto <D.21015>;
        <D.21014>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.21017 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.21017;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21018 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21018;
        }
        ctx.valid = 0;
        goto <D.19737>;
        <D.21015>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_initobj (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19737>;
        <D.19771>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.21019>; else goto <D.21021>;
        <D.21021>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21019>; else goto <D.21020>;
        <D.21019>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.21022 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.21022;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21023 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21023;
        }
        ctx.valid = 0;
        goto <D.19737>;
        <D.21020>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        D.21024 = get_boxable_mono_type (&ctx, D.20715, "constrained.");
        ctx.constrained_type = D.21024;
        prefix = prefix | 8;
        ip = ip + 5;
        goto <D.19737>;
        <D.19773>:
        prefix = prefix | 16;
        ip = ip + 1;
        goto <D.19737>;
        <D.19774>:
        D.21025 = ctx.prefix_set;
        D.21026 = D.21025 & 4294967292;
        ctx.prefix_set = D.21026;
        D.21027 = check_underflow (&ctx, 3);
        if (D.21027 == 0) goto <D.19737>; else goto <D.21028>;
        <D.21028>:
        D.20291 = ctx.verifiable;
        if (D.20291 != 0) goto <D.21029>; else goto <D.21031>;
        <D.21031>:
        D.20293 = ctx.level;
        D.20294 = D.20293 & 128;
        if (D.20294 != 0) goto <D.21029>; else goto <D.21030>;
        <D.21029>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.20613 = ctx.ip_offset;
          D.21032 = monoeg_g_strdup_printf ("Instruction cpblk is not verifiable at 0x%04x", D.20613);
          vinfo->info.message = D.21032;
          vinfo->exception_type = 4;
          D.20238 = ctx.list;
          D.21033 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21033;
        }
        ctx.verifiable = 0;
        D.20293 = ctx.level;
        D.20297 = D.20293 & 16;
        if (D.20297 != 0) goto <D.21034>; else goto <D.21035>;
        <D.21034>:
        ctx.valid = 0;
        <D.21035>:
        <D.21030>:
        ip = ip + 1;
        goto <D.19737>;
        <D.19776>:
        D.21025 = ctx.prefix_set;
        D.21026 = D.21025 & 4294967292;
        ctx.prefix_set = D.21026;
        D.21036 = check_underflow (&ctx, 3);
        if (D.21036 == 0) goto <D.19737>; else goto <D.21037>;
        <D.21037>:
        D.20291 = ctx.verifiable;
        if (D.20291 != 0) goto <D.21038>; else goto <D.21040>;
        <D.21040>:
        D.20293 = ctx.level;
        D.20294 = D.20293 & 128;
        if (D.20294 != 0) goto <D.21038>; else goto <D.21039>;
        <D.21038>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.20613 = ctx.ip_offset;
          D.21041 = monoeg_g_strdup_printf ("Instruction initblk is not verifiable at 0x%04x", D.20613);
          vinfo->info.message = D.21041;
          vinfo->exception_type = 4;
          D.20238 = ctx.list;
          D.21042 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21042;
        }
        ctx.verifiable = 0;
        D.20293 = ctx.level;
        D.20297 = D.20293 & 16;
        if (D.20297 != 0) goto <D.21043>; else goto <D.21044>;
        <D.21043>:
        ctx.valid = 0;
        <D.21044>:
        <D.21039>:
        ip = ip + 1;
        goto <D.19737>;
        <D.19778>:
        ip = ip + 2;
        goto <D.19737>;
        <D.19779>:
        D.20256 = ctx.header;
        D.21045 = is_correct_rethrow (D.20256, ip_offset);
        if (D.21045 == 0) goto <D.21046>; else goto <D.21047>;
        <D.21046>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.21048 = monoeg_g_strdup_printf ("rethrow must be used inside a catch handler at 0x%04x", D.20613);
          vinfo->info.message = D.21048;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21049 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21049;
        }
        ctx.valid = 0;
        <D.21047>:
        ctx.eval.size = 0;
        start = 1;
        ip = ip + 1;
        goto <D.19737>;
        <D.19781>:
        D.20654 = ip + 5;
        if (D.20654 > end) goto <D.21050>; else goto <D.21052>;
        <D.21052>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21050>; else goto <D.21051>;
        <D.21050>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.21053 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.21053;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21054 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21054;
        }
        ctx.valid = 0;
        goto <D.19737>;
        <D.21051>:
        D.20713 = ip + 1;
        D.20714 = *D.20713;
        D.20715 = (int) D.20714;
        do_sizeof (&ctx, D.20715);
        ip = ip + 5;
        goto <D.19737>;
        <D.19783>:
        do_refanytype (&ctx);
        ip = ip + 1;
        goto <D.19737>;
        <D.19784>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.21055 = monoeg_g_strdup_printf ("Invalid instruction FE %x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.21055;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21056 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21056;
        }
        ctx.valid = 0;
        ip = ip + 1;
        <D.19737>:
        goto <D.19486>;
        <D.19786>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.20504 = *ip;
          D.20505 = (int) D.20504;
          D.21057 = monoeg_g_strdup_printf ("Invalid instruction %x at 0x%04x", D.20505, D.20613);
          vinfo->info.message = D.21057;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21058 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21058;
        }
        ctx.valid = 0;
        ip = ip + 1;
        <D.19486>:
        if (prefix != 0) goto <D.21059>; else goto <D.21060>;
        <D.21059>:
        D.21025 = ctx.prefix_set;
        if (D.21025 == 0) goto <D.21061>; else goto <D.21062>;
        <D.21061>:
        D.20275 = ctx.code;
        D.20613 = ctx.ip_offset;
        D.21063 = (long unsigned int) D.20613;
        D.21064 = D.21063 * 16;
        D.21065 = D.20275 + D.21064;
        D.20275 = ctx.code;
        D.20613 = ctx.ip_offset;
        D.21063 = (long unsigned int) D.20613;
        D.21064 = D.21063 * 16;
        D.21065 = D.20275 + D.21064;
        D.21066 = D.21065->flags;
        D.21067 = D.21066 | 1;
        D.21065->flags = D.21067;
        <D.21062>:
        D.21025 = ctx.prefix_set;
        D.21068 = D.21025 | prefix;
        ctx.prefix_set = D.21068;
        ctx.has_flags = 1;
        prefix = 0;
        goto <D.21069>;
        <D.21060>:
        D.21070 = ctx.has_flags;
        if (D.21070 == 0) goto <D.21071>; else goto <D.21072>;
        <D.21071>:
        D.20275 = ctx.code;
        D.20613 = ctx.ip_offset;
        D.21063 = (long unsigned int) D.20613;
        D.21064 = D.21063 * 16;
        D.21065 = D.20275 + D.21064;
        D.20275 = ctx.code;
        D.20613 = ctx.ip_offset;
        D.21063 = (long unsigned int) D.20613;
        D.21064 = D.21063 * 16;
        D.21065 = D.20275 + D.21064;
        D.21066 = D.21065->flags;
        D.21067 = D.21066 | 1;
        D.21065->flags = D.21067;
        <D.21072>:
        D.21025 = ctx.prefix_set;
        D.21073 = D.21025 & 8;
        if (D.21073 != 0) goto <D.21074>; else goto <D.21075>;
        <D.21074>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.21076 = monoeg_g_strdup_printf ("Invalid instruction after constrained prefix at 0x%04x", D.20613);
          vinfo->info.message = D.21076;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21077 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21077;
        }
        ctx.valid = 0;
        <D.21075>:
        D.21025 = ctx.prefix_set;
        D.21078 = D.21025 & 16;
        if (D.21078 != 0) goto <D.21079>; else goto <D.21080>;
        <D.21079>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.21081 = monoeg_g_strdup_printf ("Invalid instruction after readonly prefix at 0x%04x", D.20613);
          vinfo->info.message = D.21081;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21082 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21082;
        }
        ctx.valid = 0;
        <D.21080>:
        D.21025 = ctx.prefix_set;
        D.21083 = D.21025 & 2;
        if (D.21083 != 0) goto <D.21084>; else goto <D.21085>;
        <D.21084>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.21086 = monoeg_g_strdup_printf ("Invalid instruction after volatile prefix at 0x%04x", D.20613);
          vinfo->info.message = D.21086;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21087 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21087;
        }
        ctx.valid = 0;
        <D.21085>:
        D.21025 = ctx.prefix_set;
        D.21088 = D.21025 & 1;
        if (D.21088 != 0) goto <D.21089>; else goto <D.21090>;
        <D.21089>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20613 = ctx.ip_offset;
          D.21091 = monoeg_g_strdup_printf ("Invalid instruction after unaligned prefix at 0x%04x", D.20613);
          vinfo->info.message = D.21091;
          vinfo->exception_type = 3;
          D.20238 = ctx.list;
          D.21092 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21092;
        }
        ctx.valid = 0;
        <D.21090>:
        prefix = 0;
        ctx.prefix_set = prefix;
        ctx.has_flags = 0;
        <D.21069>:
      }
      <D.19482>:
      if (ip < end) goto <D.21093>; else goto <D.19483>;
      <D.21093>:
      D.20270 = ctx.valid;
      if (D.20270 != 0) goto <D.19792>; else goto <D.19483>;
      <D.19483>:
      D.21094 = ip != end;
      D.21095 = start == 0;
      D.21096 = D.21094 | D.21095;
      if (D.21096 != 0) goto <D.21097>; else goto <D.21098>;
      <D.21097>:
      D.20291 = ctx.verifiable;
      if (D.20291 != 0) goto <D.21099>; else goto <D.21100>;
      <D.21099>:
      D.20238 = ctx.list;
      if (D.20238 == 0B) goto <D.21101>; else goto <D.21102>;
      <D.21101>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21103 = monoeg_g_strdup_printf ("Run ahead of method code at 0x%04x", ip_offset);
        vinfo->info.message = D.21103;
        vinfo->exception_type = 3;
        D.20238 = ctx.list;
        D.21104 = monoeg_g_slist_prepend (D.20238, vinfo);
        ctx.list = D.21104;
      }
      ctx.valid = 0;
      <D.21102>:
      <D.21100>:
      <D.21098>:
      i = 0;
      goto <D.19799>;
      <D.19798>:
      D.20275 = ctx.code;
      D.20335 = (long unsigned int) i;
      D.21105 = D.20335 * 16;
      D.21106 = D.20275 + D.21105;
      D.21107 = D.21106->flags;
      D.21108 = (int) D.21107;
      D.21109 = D.21108 & 2;
      if (D.21109 != 0) goto <D.21110>; else goto <D.21111>;
      <D.21110>:
      D.20275 = ctx.code;
      D.20335 = (long unsigned int) i;
      D.21105 = D.20335 * 16;
      D.21106 = D.20275 + D.21105;
      D.21107 = D.21106->flags;
      D.21108 = (int) D.21107;
      D.21112 = D.21108 & 1;
      if (D.21112 == 0) goto <D.21113>; else goto <D.21114>;
      <D.21113>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21115 = monoeg_g_strdup_printf ("Branch or exception block target middle of intruction at 0x%04x", i);
        vinfo->info.message = D.21115;
        vinfo->exception_type = 3;
        D.20238 = ctx.list;
        D.21116 = monoeg_g_slist_prepend (D.20238, vinfo);
        ctx.list = D.21116;
      }
      ctx.valid = 0;
      <D.21114>:
      D.20275 = ctx.code;
      D.20335 = (long unsigned int) i;
      D.21105 = D.20335 * 16;
      D.21106 = D.20275 + D.21105;
      D.21107 = D.21106->flags;
      D.21108 = (int) D.21107;
      D.21117 = D.21108 & 16;
      if (D.21117 != 0) goto <D.21118>; else goto <D.21119>;
      <D.21118>:
      D.20291 = ctx.verifiable;
      if (D.20291 != 0) goto <D.21120>; else goto <D.21122>;
      <D.21122>:
      D.20293 = ctx.level;
      D.20294 = D.20293 & 128;
      if (D.20294 != 0) goto <D.21120>; else goto <D.21121>;
      <D.21120>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.21123 = monoeg_g_strdup_printf ("Branch to delegate code sequence at 0x%04x", i);
        vinfo->info.message = D.21123;
        vinfo->exception_type = 4;
        D.20238 = ctx.list;
        D.21124 = monoeg_g_slist_prepend (D.20238, vinfo);
        ctx.list = D.21124;
      }
      ctx.verifiable = 0;
      D.20293 = ctx.level;
      D.20297 = D.20293 & 16;
      if (D.20297 != 0) goto <D.21125>; else goto <D.21126>;
      <D.21125>:
      ctx.valid = 0;
      <D.21126>:
      <D.21121>:
      <D.21119>:
      <D.21111>:
      D.20275 = ctx.code;
      D.20335 = (long unsigned int) i;
      D.21105 = D.20335 * 16;
      D.21106 = D.20275 + D.21105;
      D.21107 = D.21106->flags;
      D.21108 = (int) D.21107;
      D.21127 = D.21108 & 32;
      if (D.21127 != 0) goto <D.21128>; else goto <D.21129>;
      <D.21128>:
      D.21130 = ctx.has_this_store;
      if (D.21130 != 0) goto <D.21131>; else goto <D.21132>;
      <D.21131>:
      D.20291 = ctx.verifiable;
      if (D.20291 != 0) goto <D.21133>; else goto <D.21135>;
      <D.21135>:
      D.20293 = ctx.level;
      D.20294 = D.20293 & 128;
      if (D.20294 != 0) goto <D.21133>; else goto <D.21134>;
      <D.21133>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.21136 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function in method with stdarg 0 at  0x%04x", i);
        vinfo->info.message = D.21136;
        vinfo->exception_type = 4;
        D.20238 = ctx.list;
        D.21137 = monoeg_g_slist_prepend (D.20238, vinfo);
        ctx.list = D.21137;
      }
      ctx.verifiable = 0;
      D.20293 = ctx.level;
      D.20297 = D.20293 & 16;
      if (D.20297 != 0) goto <D.21138>; else goto <D.21139>;
      <D.21138>:
      ctx.valid = 0;
      <D.21139>:
      <D.21134>:
      <D.21132>:
      <D.21129>:
      D.20275 = ctx.code;
      D.20335 = (long unsigned int) i;
      D.21105 = D.20335 * 16;
      D.21106 = D.20275 + D.21105;
      D.21107 = D.21106->flags;
      D.21108 = (int) D.21107;
      D.21140 = D.21108 & 64;
      if (D.21140 != 0) goto <D.21141>; else goto <D.21142>;
      <D.21141>:
      D.21130 = ctx.has_this_store;
      if (D.21130 != 0) goto <D.21143>; else goto <D.21144>;
      <D.21143>:
      D.20291 = ctx.verifiable;
      if (D.20291 != 0) goto <D.21145>; else goto <D.21147>;
      <D.21147>:
      D.20293 = ctx.level;
      D.20294 = D.20293 & 128;
      if (D.20294 != 0) goto <D.21145>; else goto <D.21146>;
      <D.21145>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.21148 = 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.21148;
        vinfo->exception_type = 4;
        D.20238 = ctx.list;
        D.21149 = monoeg_g_slist_prepend (D.20238, vinfo);
        ctx.list = D.21149;
      }
      ctx.verifiable = 0;
      D.20293 = ctx.level;
      D.20297 = D.20293 & 16;
      if (D.20297 != 0) goto <D.21150>; else goto <D.21151>;
      <D.21150>:
      ctx.valid = 0;
      <D.21151>:
      <D.21146>:
      <D.21144>:
      <D.21142>:
      i = i + 1;
      <D.19799>:
      D.20382 = ctx.code_size;
      if (D.20382 > i) goto <D.21152>; else goto <D.19800>;
      <D.21152>:
      i.22 = (unsigned int) i;
      if (i.22 < ip_offset) goto <D.19798>; else goto <D.19800>;
      <D.19800>:
      D.21154 = ctx.method;
      D.21155 = mono_method_is_constructor (D.21154);
      if (D.21155 != 0) goto <D.21156>; else goto <D.21157>;
      <D.21156>:
      D.21158 = ctx.super_ctor_called;
      if (D.21158 == 0) goto <D.21159>; else goto <D.21160>;
      <D.21159>:
      D.21154 = ctx.method;
      D.21161 = D.21154->klass;
      D.21162 = BIT_FIELD_REF <*D.21161, 8, 256>;
      D.21163 = D.21162 & 8;
      if (D.21163 == 0) goto <D.21164>; else goto <D.21165>;
      <D.21164>:
      D.21154 = ctx.method;
      D.21161 = D.21154->klass;
      D.20693 = mono_defaults.object_class;
      if (D.21161 != D.20693) goto <D.21166>; else goto <D.21167>;
      <D.21166>:
      {
        char * method_name;
        char * type;

        D.21154 = ctx.method;
        method_name = mono_method_full_name (D.21154, 1);
        D.21154 = ctx.method;
        D.21161 = D.21154->klass;
        type = mono_type_get_full_name (D.21161);
        D.21154 = ctx.method;
        D.21161 = D.21154->klass;
        D.21170 = D.21161->parent;
        if (D.21170 != 0B) goto <D.21171>; else goto <D.21168>;
        <D.21171>:
        D.21154 = ctx.method;
        D.21161 = D.21154->klass;
        D.21170 = D.21161->parent;
        D.21172 = D.21170->exception_type;
        if (D.21172 != 0) goto <D.21173>; else goto <D.21168>;
        <D.21173>:
        D.20291 = ctx.verifiable;
        if (D.20291 != 0) goto <D.21174>; else goto <D.21176>;
        <D.21176>:
        D.20293 = ctx.level;
        D.20294 = D.20293 & 128;
        if (D.20294 != 0) goto <D.21174>; else goto <D.21175>;
        <D.21174>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21177 = 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.21177;
          vinfo->exception_type = 4;
          D.20238 = ctx.list;
          D.21178 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21178;
        }
        ctx.verifiable = 0;
        D.20293 = ctx.level;
        D.20297 = D.20293 & 16;
        if (D.20297 != 0) goto <D.21179>; else goto <D.21180>;
        <D.21179>:
        ctx.valid = 0;
        <D.21180>:
        <D.21175>:
        goto <D.21169>;
        <D.21168>:
        D.20291 = ctx.verifiable;
        if (D.20291 != 0) goto <D.21181>; else goto <D.21183>;
        <D.21183>:
        D.20293 = ctx.level;
        D.20294 = D.20293 & 128;
        if (D.20294 != 0) goto <D.21181>; else goto <D.21182>;
        <D.21181>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21184 = monoeg_g_strdup_printf ("Constructor %s for type %s not calling base type ctor.", method_name, type);
          vinfo->info.message = D.21184;
          vinfo->exception_type = 4;
          D.20238 = ctx.list;
          D.21185 = monoeg_g_slist_prepend (D.20238, vinfo);
          ctx.list = D.21185;
        }
        ctx.verifiable = 0;
        D.20293 = ctx.level;
        D.20297 = D.20293 & 16;
        if (D.20297 != 0) goto <D.21186>; else goto <D.21187>;
        <D.21186>:
        ctx.valid = 0;
        <D.21187>:
        <D.21182>:
        <D.21169>:
        monoeg_g_free (method_name);
        monoeg_g_free (type);
      }
      <D.21167>:
      <D.21165>:
      <D.21160>:
      <D.21157>:
      cleanup:
      D.20275 = ctx.code;
      if (D.20275 != 0B) goto <D.21188>; else goto <D.21189>;
      <D.21188>:
      i = 0;
      goto <D.19806>;
      <D.19805>:
      D.20275 = ctx.code;
      D.20335 = (long unsigned int) i;
      D.21105 = D.20335 * 16;
      D.21106 = D.20275 + D.21105;
      D.21190 = D.21106->stack;
      if (D.21190 != 0B) goto <D.21191>; else goto <D.21192>;
      <D.21191>:
      D.20275 = ctx.code;
      D.20335 = (long unsigned int) i;
      D.21105 = D.20335 * 16;
      D.21106 = D.20275 + D.21105;
      D.21190 = D.21106->stack;
      monoeg_g_free (D.21190);
      <D.21192>:
      i = i + 1;
      <D.19806>:
      i.23 = (unsigned int) i;
      D.20256 = ctx.header;
      D.20261 = D.20256->code_size;
      if (i.23 < D.20261) goto <D.19805>; else goto <D.19807>;
      <D.19807>:
      <D.21189>:
      tmp = ctx.funptrs;
      goto <D.19809>;
      <D.19808>:
      D.21194 = tmp->data;
      monoeg_g_free (D.21194);
      tmp = tmp->next;
      <D.19809>:
      if (tmp != 0B) goto <D.19808>; else goto <D.19810>;
      <D.19810>:
      D.21195 = ctx.funptrs;
      monoeg_g_slist_free (D.21195);
      tmp = ctx.exception_types;
      goto <D.19812>;
      <D.19811>:
      D.21194 = tmp->data;
      mono_metadata_free_type (D.21194);
      tmp = tmp->next;
      <D.19812>:
      if (tmp != 0B) goto <D.19811>; else goto <D.19813>;
      <D.19813>:
      D.21196 = ctx.exception_types;
      monoeg_g_slist_free (D.21196);
      i = 0;
      goto <D.19815>;
      <D.19814>:
      D.20334 = ctx.locals;
      D.20335 = (long unsigned int) i;
      D.20336 = D.20335 * 8;
      D.20337 = D.20334 + D.20336;
      D.20339 = *D.20337;
      if (D.20339 != 0B) goto <D.21197>; else goto <D.21198>;
      <D.21197>:
      D.20334 = ctx.locals;
      D.20335 = (long unsigned int) i;
      D.20336 = D.20335 * 8;
      D.20337 = D.20334 + D.20336;
      D.20339 = *D.20337;
      mono_metadata_free_type (D.20339);
      <D.21198>:
      i = i + 1;
      <D.19815>:
      D.20282 = ctx.num_locals;
      if (D.20282 > i) goto <D.19814>; else goto <D.19816>;
      <D.19816>:
      i = 0;
      goto <D.19818>;
      <D.19817>:
      D.20308 = ctx.params;
      D.20335 = (long unsigned int) i;
      D.20336 = D.20335 * 8;
      D.20350 = D.20308 + D.20336;
      D.20351 = *D.20350;
      if (D.20351 != 0B) goto <D.21199>; else goto <D.21200>;
      <D.21199>:
      D.20308 = ctx.params;
      D.20335 = (long unsigned int) i;
      D.20336 = D.20335 * 8;
      D.20350 = D.20308 + D.20336;
      D.20351 = *D.20350;
      mono_metadata_free_type (D.20351);
      <D.21200>:
      i = i + 1;
      <D.19818>:
      D.20300 = ctx.max_args;
      if (D.20300 > i) goto <D.19817>; else goto <D.19819>;
      <D.19819>:
      D.21201 = ctx.eval.stack;
      if (D.21201 != 0B) goto <D.21202>; else goto <D.21203>;
      <D.21202>:
      D.21201 = ctx.eval.stack;
      monoeg_g_free (D.21201);
      <D.21203>:
      D.20275 = ctx.code;
      if (D.20275 != 0B) goto <D.21204>; else goto <D.21205>;
      <D.21204>:
      D.20275 = ctx.code;
      monoeg_g_free (D.20275);
      <D.21205>:
      D.20334 = ctx.locals;
      monoeg_g_free (D.20334);
      D.20308 = ctx.params;
      monoeg_g_free (D.20308);
      mono_basic_block_free (original_bb);
      D.20256 = ctx.header;
      mono_metadata_free_mh (D.20256);
      D.20232 = ctx.list;
      return D.20232;
    }
  finally
    {
      error = {CLOBBER};
      ctx = {CLOBBER};
    }
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.21212;
  int D.21217;
  void * D.21219;
  long unsigned int D.21220;

  D.21212 = __builtin_constant_p (__len);
  if (D.21212 != 0) goto <D.21213>; else goto <D.21214>;
  <D.21213>:
  if (__len == 0) goto <D.21215>; else goto <D.21216>;
  <D.21215>:
  D.21217 = __builtin_constant_p (__ch);
  if (D.21217 == 0) goto <D.21210>; else goto <D.21218>;
  <D.21218>:
  if (__ch != 0) goto <D.21210>; else goto <D.21211>;
  <D.21210>:
  __warn_memset_zero_len ();
  D.21219 = __dest;
  return D.21219;
  <D.21211>:
  <D.21216>:
  <D.21214>:
  D.21220 = __builtin_object_size (__dest, 0);
  D.21219 = __builtin___memset_chk (__dest, __ch, __len, D.21220);
  return D.21219;
}


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

  D.21223 = __builtin_object_size (__dest, 0);
  D.21222 = __builtin___memcpy_chk (__dest, __src, __len, D.21223);
  return D.21222;
}


stack_init (struct VerifyContext * ctx, struct ILCodeDesc * state)
{
  short unsigned int D.21225;
  int D.21226;
  int D.21227;
  short unsigned int D.21230;
  short unsigned int D.21231;

  D.21225 = state->flags;
  D.21226 = (int) D.21225;
  D.21227 = D.21226 & 4;
  if (D.21227 != 0) goto <D.21228>; else goto <D.21229>;
  <D.21228>:
  return;
  <D.21229>:
  state->max_size = 0;
  D.21230 = state->max_size;
  state->size = D.21230;
  D.21225 = state->flags;
  D.21231 = D.21225 | 4;
  state->flags = D.21231;
}


get_stack_type (struct MonoType * type)
{
  unsigned char D.21233;
  unsigned char D.21234;
  unsigned char D.21235;
  int D.21238;
  int D.21239;
  int mask;
  int type_kind;
  void handle_enum = <<< error >>>;

  mask = 0;
  D.21233 = type->type;
  type_kind = (int) D.21233;
  D.21234 = BIT_FIELD_REF <*type, 8, 88>;
  D.21235 = D.21234 & 64;
  if (D.21235 != 0) goto <D.21236>; else goto <D.21237>;
  <D.21236>:
  mask = 256;
  <D.21237>:
  handle_enum:
  switch (type_kind) <default: <D.18410>, case 2: <D.18386>, case 3: <D.18389>, case 4: <D.18384>, case 5: <D.18385>, case 6: <D.18387>, case 7: <D.18388>, case 8: <D.18390>, case 9: <D.18391>, case 10: <D.18404>, case 11: <D.18405>, case 12: <D.18406>, case 13: <D.18407>, case 14: <D.18400>, case 15: <D.18395>, case 17: <D.18409>, case 18: <D.18399>, case 19: <D.18397>, case 20: <D.18403>, case 21: <D.18408>, case 22: <D.18396>, case 24: <D.18392>, case 25: <D.18393>, case 27: <D.18394>, case 28: <D.18401>, case 29: <D.18402>, case 30: <D.18398>>
  <D.18384>:
  <D.18385>:
  <D.18386>:
  <D.18387>:
  <D.18388>:
  <D.18389>:
  <D.18390>:
  <D.18391>:
  D.21238 = mask | 1;
  return D.21238;
  <D.18392>:
  <D.18393>:
  D.21238 = mask | 3;
  return D.21238;
  <D.18394>:
  <D.18395>:
  <D.18396>:
  D.21238 = mask | 5;
  return D.21238;
  <D.18397>:
  <D.18398>:
  <D.18399>:
  <D.18400>:
  <D.18401>:
  <D.18402>:
  <D.18403>:
  D.21238 = mask | 6;
  return D.21238;
  <D.18404>:
  <D.18405>:
  D.21238 = mask | 2;
  return D.21238;
  <D.18406>:
  <D.18407>:
  D.21238 = mask | 4;
  return D.21238;
  <D.18408>:
  <D.18409>:
  D.21239 = mono_type_is_enum_type (type);
  if (D.21239 != 0) goto <D.21240>; else goto <D.21241>;
  <D.21240>:
  type = mono_type_get_underlying_type_any (type);
  if (type == 0B) goto <D.21242>; else goto <D.21243>;
  <D.21242>:
  D.21238 = 0;
  return D.21238;
  <D.21243>:
  D.21233 = type->type;
  type_kind = (int) D.21233;
  goto handle_enum;
  <D.21241>:
  D.21238 = mask | 6;
  return D.21238;
  <D.18410>:
  D.21238 = 0;
  return D.21238;
}


mono_type_is_enum_type (struct MonoType * type)
{
  unsigned char D.21245;
  struct MonoClass * D.21248;
  unsigned char D.21249;
  unsigned char D.21250;
  gboolean D.21253;
  struct MonoGenericClass * D.21256;
  struct MonoClass * D.21257;
  unsigned char D.21258;
  unsigned char D.21259;

  D.21245 = type->type;
  if (D.21245 == 17) goto <D.21246>; else goto <D.21247>;
  <D.21246>:
  D.21248 = type->data.klass;
  D.21249 = BIT_FIELD_REF <*D.21248, 8, 256>;
  D.21250 = D.21249 & 16;
  if (D.21250 != 0) goto <D.21251>; else goto <D.21252>;
  <D.21251>:
  D.21253 = 1;
  return D.21253;
  <D.21252>:
  <D.21247>:
  D.21245 = type->type;
  if (D.21245 == 21) goto <D.21254>; else goto <D.21255>;
  <D.21254>:
  D.21256 = type->data.generic_class;
  D.21257 = D.21256->container_class;
  D.21258 = BIT_FIELD_REF <*D.21257, 8, 256>;
  D.21259 = D.21258 & 16;
  if (D.21259 != 0) goto <D.21260>; else goto <D.21261>;
  <D.21260>:
  D.21253 = 1;
  return D.21253;
  <D.21261>:
  <D.21255>:
  D.21253 = 0;
  return D.21253;
}


mono_type_get_underlying_type_any (struct MonoType * type)
{
  unsigned char D.21263;
  struct MonoClass * D.21266;
  unsigned char D.21267;
  unsigned char D.21268;
  struct MonoType * D.21271;
  struct MonoGenericClass * D.21274;
  struct MonoClass * D.21275;
  unsigned char D.21276;
  unsigned char D.21277;

  D.21263 = type->type;
  if (D.21263 == 17) goto <D.21264>; else goto <D.21265>;
  <D.21264>:
  D.21266 = type->data.klass;
  D.21267 = BIT_FIELD_REF <*D.21266, 8, 256>;
  D.21268 = D.21267 & 16;
  if (D.21268 != 0) goto <D.21269>; else goto <D.21270>;
  <D.21269>:
  D.21266 = type->data.klass;
  D.21271 = mono_class_enum_basetype (D.21266);
  return D.21271;
  <D.21270>:
  <D.21265>:
  D.21263 = type->type;
  if (D.21263 == 21) goto <D.21272>; else goto <D.21273>;
  <D.21272>:
  D.21274 = type->data.generic_class;
  D.21275 = D.21274->container_class;
  D.21276 = BIT_FIELD_REF <*D.21275, 8, 256>;
  D.21277 = D.21276 & 16;
  if (D.21277 != 0) goto <D.21278>; else goto <D.21279>;
  <D.21278>:
  D.21274 = type->data.generic_class;
  D.21275 = D.21274->container_class;
  D.21271 = mono_class_enum_basetype (D.21275);
  return D.21271;
  <D.21279>:
  <D.21273>:
  D.21271 = type;
  return D.21271;
}


verify_clause_relationship (struct VerifyContext * ctx, struct MonoExceptionClause * clause, struct MonoExceptionClause * to_test)
{
  unsigned int D.21281;
  unsigned int D.21284;
  unsigned int D.21285;
  int D.21286;
  gchar * D.21289;
  struct GSList * D.21290;
  struct GSList * D.21291;
  int D.21292;
  gchar * D.21295;
  struct GSList * D.21296;
  unsigned int D.21297;
  unsigned int D.21298;
  unsigned int D.21301;
  unsigned int D.21302;
  unsigned int D.21305;
  unsigned int D.21306;
  unsigned int D.21307;
  uint32_t iftmp.24;
  unsigned int D.21309;
  int D.21313;
  gchar * D.21316;
  struct GSList * D.21317;
  gchar * D.21321;
  struct GSList * D.21322;
  unsigned int D.21325;
  int D.21326;
  uint32_t iftmp.25;
  int D.21332;
  int D.21333;
  gchar * D.21336;
  struct GSList * D.21337;

  D.21281 = to_test->flags;
  if (D.21281 == 1) goto <D.21282>; else goto <D.21283>;
  <D.21282>:
  D.21284 = to_test->handler_offset;
  D.21285 = to_test->data.filter_offset;
  D.21286 = is_clause_inside_range (clause, D.21285, D.21284);
  if (D.21286 != 0) goto <D.21287>; else goto <D.21288>;
  <D.21287>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21289 = monoeg_g_strdup_printf ("Exception clause inside filter");
    vinfo->info.message = D.21289;
    vinfo->exception_type = 3;
    D.21290 = ctx->list;
    D.21291 = monoeg_g_slist_prepend (D.21290, vinfo);
    ctx->list = D.21291;
  }
  ctx->valid = 0;
  return;
  <D.21288>:
  <D.21283>:
  D.21292 = is_clause_nested (clause, to_test);
  if (D.21292 != 0) goto <D.21293>; else goto <D.21294>;
  <D.21293>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21295 = monoeg_g_strdup_printf ("Nested exception clause appears after enclosing clause");
    vinfo->info.message = D.21295;
    vinfo->exception_type = 3;
    D.21290 = ctx->list;
    D.21296 = monoeg_g_slist_prepend (D.21290, vinfo);
    ctx->list = D.21296;
  }
  ctx->valid = 0;
  return;
  <D.21294>:
  D.21297 = clause->try_offset;
  D.21298 = to_test->try_offset;
  if (D.21297 == D.21298) goto <D.21299>; else goto <D.21300>;
  <D.21299>:
  D.21301 = clause->try_len;
  D.21302 = to_test->try_len;
  if (D.21301 == D.21302) goto <D.21303>; else goto <D.21304>;
  <D.21303>:
  D.21305 = clause->handler_offset;
  D.21306 = clause->handler_len;
  D.21307 = D.21305 + D.21306;
  D.21309 = clause->flags;
  if (D.21309 == 1) goto <D.21310>; else goto <D.21311>;
  <D.21310>:
  iftmp.24 = clause->data.filter_offset;
  goto <D.21312>;
  <D.21311>:
  iftmp.24 = clause->handler_offset;
  <D.21312>:
  D.21313 = is_clause_in_range (to_test, iftmp.24, D.21307);
  if (D.21313 != 0) goto <D.21314>; else goto <D.21315>;
  <D.21314>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21316 = monoeg_g_strdup_printf ("Exception handlers overlap");
    vinfo->info.message = D.21316;
    vinfo->exception_type = 3;
    D.21290 = ctx->list;
    D.21317 = monoeg_g_slist_prepend (D.21290, vinfo);
    ctx->list = D.21317;
  }
  ctx->valid = 0;
  return;
  <D.21315>:
  D.21309 = clause->flags;
  if (D.21309 > 1) goto <D.21318>; else goto <D.21320>;
  <D.21320>:
  D.21281 = to_test->flags;
  if (D.21281 > 1) goto <D.21318>; else goto <D.21319>;
  <D.21318>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21321 = monoeg_g_strdup_printf ("Exception clauses with shared protected block are neither catch or filter");
    vinfo->info.message = D.21321;
    vinfo->exception_type = 3;
    D.21290 = ctx->list;
    D.21322 = monoeg_g_slist_prepend (D.21290, vinfo);
    ctx->list = D.21322;
  }
  ctx->valid = 0;
  return;
  <D.21319>:
  return;
  <D.21304>:
  <D.21300>:
  D.21297 = clause->try_offset;
  D.21301 = clause->try_len;
  D.21325 = D.21297 + D.21301;
  D.21297 = clause->try_offset;
  D.21326 = is_clause_in_range (to_test, D.21297, D.21325);
  if (D.21326 != 0) goto <D.21323>; else goto <D.21327>;
  <D.21327>:
  D.21305 = clause->handler_offset;
  D.21306 = clause->handler_len;
  D.21307 = D.21305 + D.21306;
  D.21309 = clause->flags;
  if (D.21309 == 1) goto <D.21329>; else goto <D.21330>;
  <D.21329>:
  iftmp.25 = clause->data.filter_offset;
  goto <D.21331>;
  <D.21330>:
  iftmp.25 = clause->handler_offset;
  <D.21331>:
  D.21332 = is_clause_in_range (to_test, iftmp.25, D.21307);
  if (D.21332 != 0) goto <D.21323>; else goto <D.21324>;
  <D.21323>:
  D.21333 = is_clause_nested (to_test, clause);
  if (D.21333 == 0) goto <D.21334>; else goto <D.21335>;
  <D.21334>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21336 = monoeg_g_strdup_printf ("Exception clauses overlap");
    vinfo->info.message = D.21336;
    vinfo->exception_type = 3;
    D.21290 = ctx->list;
    D.21337 = monoeg_g_slist_prepend (D.21290, vinfo);
    ctx->list = D.21337;
  }
  ctx->valid = 0;
  <D.21335>:
  <D.21324>:
}


is_clause_inside_range (struct MonoExceptionClause * clause, guint32 start, guint32 end)
{
  unsigned int D.21341;
  unsigned int D.21343;
  unsigned int D.21344;
  gboolean D.21345;
  uint32_t iftmp.26;
  unsigned int D.21349;
  unsigned int D.21354;
  unsigned int D.21355;
  unsigned int D.21356;

  D.21341 = clause->try_offset;
  if (D.21341 < start) goto <D.21339>; else goto <D.21342>;
  <D.21342>:
  D.21341 = clause->try_offset;
  D.21343 = clause->try_len;
  D.21344 = D.21341 + D.21343;
  if (D.21344 > end) goto <D.21339>; else goto <D.21340>;
  <D.21339>:
  D.21345 = 0;
  return D.21345;
  <D.21340>:
  D.21349 = clause->flags;
  if (D.21349 == 1) goto <D.21350>; else goto <D.21351>;
  <D.21350>:
  iftmp.26 = clause->data.filter_offset;
  goto <D.21352>;
  <D.21351>:
  iftmp.26 = clause->handler_offset;
  <D.21352>:
  if (iftmp.26 < start) goto <D.21346>; else goto <D.21353>;
  <D.21353>:
  D.21354 = clause->handler_offset;
  D.21355 = clause->handler_len;
  D.21356 = D.21354 + D.21355;
  if (D.21356 > end) goto <D.21346>; else goto <D.21347>;
  <D.21346>:
  D.21345 = 0;
  return D.21345;
  <D.21347>:
  D.21345 = 1;
  return D.21345;
}


is_clause_in_range (struct MonoExceptionClause * clause, guint32 start, guint32 end)
{
  unsigned int D.21358;
  gboolean D.21363;
  uint32_t iftmp.27;
  unsigned int D.21365;
  uint32_t iftmp.28;

  D.21358 = clause->try_offset;
  if (D.21358 >= start) goto <D.21359>; else goto <D.21360>;
  <D.21359>:
  D.21358 = clause->try_offset;
  if (D.21358 < end) goto <D.21361>; else goto <D.21362>;
  <D.21361>:
  D.21363 = 1;
  return D.21363;
  <D.21362>:
  <D.21360>:
  D.21365 = clause->flags;
  if (D.21365 == 1) goto <D.21366>; else goto <D.21367>;
  <D.21366>:
  iftmp.27 = clause->data.filter_offset;
  goto <D.21368>;
  <D.21367>:
  iftmp.27 = clause->handler_offset;
  <D.21368>:
  if (iftmp.27 >= start) goto <D.21369>; else goto <D.21370>;
  <D.21369>:
  D.21365 = clause->flags;
  if (D.21365 == 1) goto <D.21372>; else goto <D.21373>;
  <D.21372>:
  iftmp.28 = clause->data.filter_offset;
  goto <D.21374>;
  <D.21373>:
  iftmp.28 = clause->handler_offset;
  <D.21374>:
  if (iftmp.28 < end) goto <D.21375>; else goto <D.21376>;
  <D.21375>:
  D.21363 = 1;
  return D.21363;
  <D.21376>:
  <D.21370>:
  D.21363 = 0;
  return D.21363;
}


is_clause_nested (struct MonoExceptionClause * clause, struct MonoExceptionClause * nested)
{
  unsigned int D.21378;
  unsigned int D.21381;
  unsigned int D.21382;
  int D.21383;
  gboolean D.21386;
  int iftmp.29;
  unsigned int D.21391;
  unsigned int D.21392;
  unsigned int D.21393;
  int D.21394;
  unsigned int D.21396;
  unsigned int D.21397;
  int D.21398;

  D.21378 = clause->flags;
  if (D.21378 == 1) goto <D.21379>; else goto <D.21380>;
  <D.21379>:
  D.21381 = clause->handler_offset;
  D.21382 = clause->data.filter_offset;
  D.21383 = is_clause_inside_range (nested, D.21382, D.21381);
  if (D.21383 != 0) goto <D.21384>; else goto <D.21385>;
  <D.21384>:
  D.21386 = 1;
  return D.21386;
  <D.21385>:
  <D.21380>:
  D.21391 = clause->try_offset;
  D.21392 = clause->try_len;
  D.21393 = D.21391 + D.21392;
  D.21391 = clause->try_offset;
  D.21394 = is_clause_inside_range (nested, D.21391, D.21393);
  if (D.21394 != 0) goto <D.21388>; else goto <D.21395>;
  <D.21395>:
  D.21381 = clause->handler_offset;
  D.21396 = clause->handler_len;
  D.21397 = D.21381 + D.21396;
  D.21381 = clause->handler_offset;
  D.21398 = is_clause_inside_range (nested, D.21381, D.21397);
  if (D.21398 != 0) goto <D.21388>; else goto <D.21389>;
  <D.21388>:
  iftmp.29 = 1;
  goto <D.21390>;
  <D.21389>:
  iftmp.29 = 0;
  <D.21390>:
  D.21386 = iftmp.29;
  return D.21386;
}


mono_type_is_valid_in_context (struct VerifyContext * ctx, struct MonoType * type)
{
  unsigned int D.21402;
  gchar * D.21403;
  struct GSList * D.21404;
  struct GSList * D.21405;
  gboolean D.21406;
  int D.21407;
  const char * iftmp.30;
  unsigned char D.21411;
  const char * iftmp.31;
  char D.21416;
  const char * iftmp.32;
  gchar * D.21424;
  struct GSList * D.21425;
  struct MonoLoaderError * D.21428;
  unsigned char D.21430;
  struct MonoGenericClass * D.21433;
  int D.21435;
  const char * D.21437;
  const char * D.21438;
  gchar * D.21439;
  struct GSList * D.21440;
  gchar * D.21441;
  struct GSList * D.21442;
  struct MonoClass * D.21445;
  unsigned char D.21446;
  gchar * D.21449;
  struct GSList * D.21450;
  int D.21453;
  gchar * D.21456;
  struct GSList * D.21457;
  int D.21458;
  gchar * D.21461;
  struct GSList * D.21462;
  struct MonoClass * klass;

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

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21402 = ctx->ip_offset;
    D.21403 = monoeg_g_strdup_printf ("Invalid null type at 0x%04x", D.21402);
    vinfo->info.message = D.21403;
    vinfo->exception_type = 12;
    D.21404 = ctx->list;
    D.21405 = monoeg_g_slist_prepend (D.21404, vinfo);
    ctx->list = D.21405;
  }
  ctx->valid = 0;
  D.21406 = 0;
  return D.21406;
  <D.21401>:
  D.21407 = is_valid_type_in_context (ctx, type);
  if (D.21407 == 0) goto <D.21408>; else goto <D.21409>;
  <D.21408>:
  {
    char * str;

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

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.21402 = ctx->ip_offset;
      D.21411 = type->type;
      if (D.21411 == 19) goto <D.21412>; else goto <D.21413>;
      <D.21412>:
      iftmp.30 = "class";
      goto <D.21414>;
      <D.21413>:
      iftmp.30 = "method";
      <D.21414>:
      D.21416 = *str;
      if (D.21416 != 33) goto <D.21417>; else goto <D.21418>;
      <D.21417>:
      D.21411 = type->type;
      if (D.21411 == 19) goto <D.21420>; else goto <D.21421>;
      <D.21420>:
      iftmp.32 = "!";
      goto <D.21422>;
      <D.21421>:
      iftmp.32 = "!!";
      <D.21422>:
      iftmp.31 = iftmp.32;
      goto <D.21423>;
      <D.21418>:
      iftmp.31 = "";
      <D.21423>:
      D.21424 = monoeg_g_strdup_printf ("Invalid generic type (%s%s) (argument out of range or %s is not generic) at 0x%04x", iftmp.31, str, iftmp.30, D.21402);
      vinfo->info.message = D.21424;
      vinfo->exception_type = 12;
      D.21404 = ctx->list;
      D.21425 = monoeg_g_slist_prepend (D.21404, vinfo);
      ctx->list = D.21425;
    }
    ctx->valid = 0;
    monoeg_g_free (str);
    D.21406 = 0;
    return D.21406;
  }
  <D.21409>:
  klass = mono_class_from_mono_type (type);
  mono_class_init (klass);
  D.21428 = mono_loader_get_last_error ();
  if (D.21428 != 0B) goto <D.21426>; else goto <D.21429>;
  <D.21429>:
  D.21430 = klass->exception_type;
  if (D.21430 != 0) goto <D.21426>; else goto <D.21427>;
  <D.21426>:
  D.21433 = klass->generic_class;
  if (D.21433 != 0B) goto <D.21434>; else goto <D.21431>;
  <D.21434>:
  D.21435 = mono_class_is_valid_generic_instantiation (0B, klass);
  if (D.21435 == 0) goto <D.21436>; else goto <D.21431>;
  <D.21436>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21402 = ctx->ip_offset;
    D.21437 = klass->name;
    D.21438 = klass->name_space;
    D.21439 = monoeg_g_strdup_printf ("Invalid generic instantiation of type %s.%s at 0x%04x", D.21438, D.21437, D.21402);
    vinfo->info.message = D.21439;
    vinfo->exception_type = 7;
    D.21404 = ctx->list;
    D.21440 = monoeg_g_slist_prepend (D.21404, vinfo);
    ctx->list = D.21440;
  }
  ctx->valid = 0;
  goto <D.21432>;
  <D.21431>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21402 = ctx->ip_offset;
    D.21437 = klass->name;
    D.21438 = klass->name_space;
    D.21441 = monoeg_g_strdup_printf ("Could not load type %s.%s at 0x%04x", D.21438, D.21437, D.21402);
    vinfo->info.message = D.21441;
    vinfo->exception_type = 7;
    D.21404 = ctx->list;
    D.21442 = monoeg_g_slist_prepend (D.21404, vinfo);
    ctx->list = D.21442;
  }
  ctx->valid = 0;
  <D.21432>:
  mono_loader_clear_error ();
  D.21406 = 0;
  return D.21406;
  <D.21427>:
  D.21433 = klass->generic_class;
  if (D.21433 != 0B) goto <D.21443>; else goto <D.21444>;
  <D.21443>:
  D.21433 = klass->generic_class;
  D.21445 = D.21433->container_class;
  D.21446 = D.21445->exception_type;
  if (D.21446 != 0) goto <D.21447>; else goto <D.21448>;
  <D.21447>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21402 = ctx->ip_offset;
    D.21437 = klass->name;
    D.21438 = klass->name_space;
    D.21449 = monoeg_g_strdup_printf ("Could not load type %s.%s at 0x%04x", D.21438, D.21437, D.21402);
    vinfo->info.message = D.21449;
    vinfo->exception_type = 7;
    D.21404 = ctx->list;
    D.21450 = monoeg_g_slist_prepend (D.21404, vinfo);
    ctx->list = D.21450;
  }
  ctx->valid = 0;
  D.21406 = 0;
  return D.21406;
  <D.21448>:
  <D.21444>:
  D.21433 = klass->generic_class;
  if (D.21433 == 0B) goto <D.21451>; else goto <D.21452>;
  <D.21451>:
  D.21406 = 1;
  return D.21406;
  <D.21452>:
  D.21453 = mono_class_is_valid_generic_instantiation (ctx, klass);
  if (D.21453 == 0) goto <D.21454>; else goto <D.21455>;
  <D.21454>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21402 = ctx->ip_offset;
    D.21437 = klass->name;
    D.21438 = klass->name_space;
    D.21456 = monoeg_g_strdup_printf ("Invalid generic type instantiation of type %s.%s at 0x%04x", D.21438, D.21437, D.21402);
    vinfo->info.message = D.21456;
    vinfo->exception_type = 7;
    D.21404 = ctx->list;
    D.21457 = monoeg_g_slist_prepend (D.21404, vinfo);
    ctx->list = D.21457;
  }
  ctx->valid = 0;
  D.21406 = 0;
  return D.21406;
  <D.21455>:
  D.21458 = mono_class_repect_method_constraints (ctx, klass);
  if (D.21458 == 0) goto <D.21459>; else goto <D.21460>;
  <D.21459>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21402 = ctx->ip_offset;
    D.21437 = klass->name;
    D.21438 = klass->name_space;
    D.21461 = monoeg_g_strdup_printf ("Invalid generic type instantiation of type %s.%s (generic args don\'t respect target\'s constraints) at 0x%04x", D.21438, D.21437, D.21402);
    vinfo->info.message = D.21461;
    vinfo->exception_type = 7;
    D.21404 = ctx->list;
    D.21462 = monoeg_g_slist_prepend (D.21404, vinfo);
    ctx->list = D.21462;
  }
  ctx->valid = 0;
  D.21406 = 0;
  return D.21406;
  <D.21460>:
  D.21406 = 1;
  return D.21406;
}


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

  D.21465 = ctx->generic_context;
  D.21464 = mono_type_is_valid_type_in_context (type, D.21465);
  return D.21464;
}


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

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


mono_type_is_valid_type_in_context_full (struct MonoType * type, struct MonoGenericContext * context, gboolean check_gtd)
{
  unsigned char D.21469;
  int D.21470;
  gboolean D.21473;
  struct MonoGenericInst * iftmp.33;
  struct MonoGenericParam * D.21481;
  short unsigned int D.21482;
  int D.21483;
  <unnamed-unsigned:22> D.21484;
  int D.21485;
  struct MonoClass * D.21486;
  struct MonoType * D.21487;
  struct MonoArrayType * D.21488;
  struct MonoClass * D.21489;
  struct MonoType * D.21490;
  struct MonoType * D.21491;
  struct MonoGenericClass * D.21492;
  unsigned char D.21493;
  unsigned char D.21494;
  struct MonoType * D.21496;
  int D.21497;
  unsigned char D.21500;
  struct MonoType * D.21503;
  struct MonoGenericContainer * D.21506;
  int i;
  struct MonoGenericInst * inst;

  D.21469 = type->type;
  D.21470 = (int) D.21469;
  switch (D.21470) <default: <D.21509>, case 15: <D.17947>, case 17: <D.17953>, case 18: <D.17952>, case 19: <D.17942>, case 20: <D.17946>, case 21: <D.17948>, case 29: <D.17945>, case 30: <D.17943>>
  <D.17942>:
  <D.17943>:
  if (context == 0B) goto <D.21471>; else goto <D.21472>;
  <D.21471>:
  D.21473 = 0;
  return D.21473;
  <D.21472>:
  D.21469 = type->type;
  if (D.21469 == 19) goto <D.21475>; else goto <D.21476>;
  <D.21475>:
  iftmp.33 = context->class_inst;
  goto <D.21477>;
  <D.21476>:
  iftmp.33 = context->method_inst;
  <D.21477>:
  inst = iftmp.33;
  if (inst == 0B) goto <D.21478>; else goto <D.21480>;
  <D.21480>:
  D.21481 = type->data.generic_param;
  D.21482 = D.21481->num;
  D.21483 = (int) D.21482;
  D.21484 = inst->type_argc;
  D.21485 = (int) D.21484;
  if (D.21483 >= D.21485) goto <D.21478>; else goto <D.21479>;
  <D.21478>:
  D.21473 = 0;
  return D.21473;
  <D.21479>:
  goto <D.17944>;
  <D.17945>:
  D.21486 = type->data.klass;
  D.21487 = &D.21486->byval_arg;
  D.21473 = mono_type_is_valid_type_in_context_full (D.21487, context, check_gtd);
  return D.21473;
  <D.17946>:
  D.21488 = type->data.array;
  D.21489 = D.21488->eklass;
  D.21490 = &D.21489->byval_arg;
  D.21473 = mono_type_is_valid_type_in_context_full (D.21490, context, check_gtd);
  return D.21473;
  <D.17947>:
  D.21491 = type->data.type;
  D.21473 = mono_type_is_valid_type_in_context_full (D.21491, context, check_gtd);
  return D.21473;
  <D.17948>:
  D.21492 = type->data.generic_class;
  inst = D.21492->context.class_inst;
  D.21493 = BIT_FIELD_REF <*inst, 8, 48>;
  D.21494 = D.21493 & 64;
  if (D.21494 == 0) goto <D.17944>; else goto <D.21495>;
  <D.21495>:
  i = 0;
  goto <D.17950>;
  <D.17949>:
  D.21496 = inst->type_argv[i];
  D.21497 = mono_type_is_valid_type_in_context_full (D.21496, context, check_gtd);
  if (D.21497 == 0) goto <D.21498>; else goto <D.21499>;
  <D.21498>:
  D.21473 = 0;
  return D.21473;
  <D.21499>:
  i = i + 1;
  <D.17950>:
  D.21484 = inst->type_argc;
  D.21485 = (int) D.21484;
  if (D.21485 > i) goto <D.17949>; else goto <D.17951>;
  <D.17951>:
  goto <D.17944>;
  <D.17952>:
  <D.17953>:
  {
    struct MonoClass * klass;

    klass = type->data.klass;
    D.21500 = klass->byval_arg.type;
    D.21469 = type->type;
    if (D.21500 != D.21469) goto <D.21501>; else goto <D.21502>;
    <D.21501>:
    D.21503 = &klass->byval_arg;
    D.21473 = mono_type_is_valid_type_in_context_full (D.21503, context, check_gtd);
    return D.21473;
    <D.21502>:
    if (check_gtd != 0) goto <D.21504>; else goto <D.21505>;
    <D.21504>:
    D.21506 = klass->generic_container;
    if (D.21506 != 0B) goto <D.21507>; else goto <D.21508>;
    <D.21507>:
    D.21473 = 0;
    return D.21473;
    <D.21508>:
    <D.21505>:
    goto <D.17944>;
  }
  <D.21509>:
  <D.17944>:
  D.21473 = 1;
  return D.21473;
}


mono_class_is_valid_generic_instantiation (struct VerifyContext * ctx, struct MonoClass * klass)
{
  struct MonoClass * D.21511;
  int D.21514;
  gboolean D.21517;
  struct MonoGenericContext * D.21518;
  struct MonoGenericClass * gklass;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gklass = klass->generic_class;
  ginst = gklass->context.class_inst;
  D.21511 = gklass->container_class;
  gc = D.21511->generic_container;
  if (ctx != 0B) goto <D.21512>; else goto <D.21513>;
  <D.21512>:
  D.21514 = is_valid_generic_instantiation_in_context (ctx, ginst, 1);
  if (D.21514 == 0) goto <D.21515>; else goto <D.21516>;
  <D.21515>:
  D.21517 = 0;
  return D.21517;
  <D.21516>:
  <D.21513>:
  D.21518 = &gklass->context;
  D.21517 = is_valid_generic_instantiation (gc, D.21518, ginst);
  return D.21517;
}


is_valid_generic_instantiation_in_context (struct VerifyContext * ctx, struct MonoGenericInst * ginst, gboolean check_gtd)
{
  struct MonoGenericContext * D.21520;
  int D.21521;
  gboolean D.21524;
  <unnamed-unsigned:22> D.21525;
  int D.21526;
  int i;

  i = 0;
  goto <D.18038>;
  <D.18037>:
  {
    struct MonoType * type;

    type = ginst->type_argv[i];
    D.21520 = ctx->generic_context;
    D.21521 = mono_type_is_valid_type_in_context_full (type, D.21520, 1);
    if (D.21521 == 0) goto <D.21522>; else goto <D.21523>;
    <D.21522>:
    D.21524 = 0;
    return D.21524;
    <D.21523>:
  }
  i = i + 1;
  <D.18038>:
  D.21525 = ginst->type_argc;
  D.21526 = (int) D.21525;
  if (D.21526 > i) goto <D.18037>; else goto <D.18039>;
  <D.18039>:
  D.21524 = 1;
  return D.21524;
}


is_valid_generic_instantiation (struct MonoGenericContainer * gc, struct MonoGenericContext * context, struct MonoGenericInst * ginst)
{
  <unnamed-unsigned:22> D.21528;
  int D.21529;
  <unnamed-signed:31> D.21530;
  int D.21531;
  gboolean D.21534;
  struct MonoGenericParamFull * D.21535;
  long unsigned int D.21536;
  long unsigned int D.21537;
  struct MonoGenericParamFull * D.21538;
  int D.21539;
  struct MonoGenericContainer * D.21542;
  unsigned char D.21545;
  unsigned char D.21548;
  unsigned char D.21549;
  struct MonoGenericClass * D.21552;
  unsigned char D.21555;
  unsigned char D.21556;
  int D.21559;
  struct MonoClass * * D.21562;
  short unsigned int D.21565;
  int D.21566;
  int D.21567;
  int D.21572;
  unsigned char D.21575;
  int D.21577;
  int D.21578;
  int D.21583;
  int D.21588;
  struct MonoType * D.21593;
  int D.21594;
  int D.21597;
  struct MonoClass * D.21600;
  struct MonoError error;
  int i;

  try
    {
      D.21528 = ginst->type_argc;
      D.21529 = (int) D.21528;
      D.21530 = gc->type_argc;
      D.21531 = (int) D.21530;
      if (D.21529 != D.21531) goto <D.21532>; else goto <D.21533>;
      <D.21532>:
      D.21534 = 0;
      return D.21534;
      <D.21533>:
      i = 0;
      goto <D.17984>;
      <D.17983>:
      {
        struct MonoGenericParamInfo * param_info;
        struct MonoClass * paramClass;
        struct MonoClass * * constraints;
        struct MonoType * param_type;

        D.21535 = gc->type_params;
        D.21536 = (long unsigned int) i;
        D.21537 = D.21536 * 56;
        D.21538 = D.21535 + D.21537;
        param_info = &D.21538->info;
        param_type = ginst->type_argv[i];
        D.21539 = mono_type_is_generic_argument (param_type);
        if (D.21539 != 0) goto <D.21540>; else goto <D.21541>;
        <D.21540>:
        // predicted unlikely by continue predictor.
        goto <D.17977>;
        <D.21541>:
        paramClass = mono_class_from_mono_type (param_type);
        D.21542 = paramClass->generic_container;
        if (D.21542 != 0B) goto <D.21543>; else goto <D.21544>;
        <D.21543>:
        D.21545 = param_type->type;
        if (D.21545 != 21) goto <D.21546>; else goto <D.21547>;
        <D.21546>:
        D.21548 = BIT_FIELD_REF <*ginst, 8, 48>;
        D.21549 = D.21548 & 64;
        if (D.21549 == 0) goto <D.21550>; else goto <D.21551>;
        <D.21550>:
        D.21534 = 0;
        return D.21534;
        <D.21551>:
        <D.21547>:
        <D.21544>:
        D.21552 = paramClass->generic_class;
        if (D.21552 != 0B) goto <D.21553>; else goto <D.21554>;
        <D.21553>:
        D.21555 = BIT_FIELD_REF <*paramClass, 8, 256>;
        D.21556 = D.21555 & 1;
        if (D.21556 == 0) goto <D.21557>; else goto <D.21558>;
        <D.21557>:
        D.21559 = mono_class_is_valid_generic_instantiation (0B, paramClass);
        if (D.21559 == 0) goto <D.21560>; else goto <D.21561>;
        <D.21560>:
        D.21534 = 0;
        return D.21534;
        <D.21561>:
        <D.21558>:
        <D.21554>:
        D.21562 = param_info->constraints;
        if (D.21562 == 0B) goto <D.21563>; else goto <D.21564>;
        <D.21563>:
        D.21565 = param_info->flags;
        D.21566 = (int) D.21565;
        D.21567 = D.21566 & 28;
        if (D.21567 == 0) goto <D.21568>; else goto <D.21569>;
        <D.21568>:
        // predicted unlikely by continue predictor.
        goto <D.17977>;
        <D.21569>:
        <D.21564>:
        D.21565 = param_info->flags;
        D.21566 = (int) D.21565;
        D.21572 = D.21566 & 8;
        if (D.21572 != 0) goto <D.21573>; else goto <D.21574>;
        <D.21573>:
        D.21555 = BIT_FIELD_REF <*paramClass, 8, 256>;
        D.21575 = D.21555 & 8;
        if (D.21575 == 0) goto <D.21570>; else goto <D.21576>;
        <D.21576>:
        D.21577 = mono_class_is_nullable (paramClass);
        if (D.21577 != 0) goto <D.21570>; else goto <D.21571>;
        <D.21570>:
        D.21534 = 0;
        return D.21534;
        <D.21571>:
        <D.21574>:
        D.21565 = param_info->flags;
        D.21566 = (int) D.21565;
        D.21578 = D.21566 & 4;
        if (D.21578 != 0) goto <D.21579>; else goto <D.21580>;
        <D.21579>:
        D.21555 = BIT_FIELD_REF <*paramClass, 8, 256>;
        D.21575 = D.21555 & 8;
        if (D.21575 != 0) goto <D.21581>; else goto <D.21582>;
        <D.21581>:
        D.21534 = 0;
        return D.21534;
        <D.21582>:
        <D.21580>:
        D.21565 = param_info->flags;
        D.21566 = (int) D.21565;
        D.21583 = D.21566 & 16;
        if (D.21583 != 0) goto <D.21584>; else goto <D.21585>;
        <D.21584>:
        D.21555 = BIT_FIELD_REF <*paramClass, 8, 256>;
        D.21575 = D.21555 & 8;
        if (D.21575 == 0) goto <D.21586>; else goto <D.21587>;
        <D.21586>:
        D.21588 = mono_class_has_default_constructor (paramClass);
        if (D.21588 == 0) goto <D.21589>; else goto <D.21590>;
        <D.21589>:
        D.21534 = 0;
        return D.21534;
        <D.21590>:
        <D.21587>:
        <D.21585>:
        D.21562 = param_info->constraints;
        if (D.21562 == 0B) goto <D.21591>; else goto <D.21592>;
        <D.21591>:
        // predicted unlikely by continue predictor.
        goto <D.17977>;
        <D.21592>:
        constraints = param_info->constraints;
        goto <D.17981>;
        <D.17980>:
        {
          struct MonoClass * ctr;
          struct MonoType * inflated;

          ctr = *constraints;
          D.21593 = &ctr->byval_arg;
          inflated = mono_class_inflate_generic_type_checked (D.21593, context, &error);
          D.21594 = mono_error_ok (&error);
          if (D.21594 == 0) goto <D.21595>; else goto <D.21596>;
          <D.21595>:
          mono_error_cleanup (&error);
          D.21534 = 0;
          return D.21534;
          <D.21596>:
          ctr = mono_class_from_mono_type (inflated);
          mono_metadata_free_type (inflated);
          D.21597 = mono_class_is_assignable_from_slow (ctr, paramClass);
          if (D.21597 == 0) goto <D.21598>; else goto <D.21599>;
          <D.21598>:
          D.21534 = 0;
          return D.21534;
          <D.21599>:
        }
        constraints = constraints + 8;
        <D.17981>:
        D.21600 = *constraints;
        if (D.21600 != 0B) goto <D.17980>; else goto <D.17982>;
        <D.17982>:
      }
      <D.17977>:
      i = i + 1;
      <D.17984>:
      D.21530 = gc->type_argc;
      D.21531 = (int) D.21530;
      if (D.21531 > i) goto <D.17983>; else goto <D.17985>;
      <D.17985>:
      D.21534 = 1;
      return D.21534;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_type_is_generic_argument (struct MonoType * type)
{
  gboolean D.21603;
  unsigned char D.21604;
  _Bool D.21605;
  _Bool D.21606;
  _Bool D.21607;

  D.21604 = type->type;
  D.21605 = D.21604 == 19;
  D.21606 = D.21604 == 30;
  D.21607 = D.21605 | D.21606;
  D.21603 = (gboolean) D.21607;
  return D.21603;
}


mono_class_has_default_constructor (struct MonoClass * klass)
{
  unsigned char D.21609;
  gboolean D.21612;
  struct MonoMethod * * D.21613;
  long unsigned int D.21614;
  long unsigned int D.21615;
  struct MonoMethod * * D.21616;
  int D.21617;
  struct MonoMethodSignature * D.21620;
  struct MonoMethodSignature * D.21623;
  short unsigned int D.21624;
  short unsigned int D.21627;
  int D.21628;
  int D.21629;
  unsigned int i.34;
  unsigned int D.21633;
  struct MonoMethod * method;
  int i;

  mono_class_setup_methods (klass);
  D.21609 = klass->exception_type;
  if (D.21609 != 0) goto <D.21610>; else goto <D.21611>;
  <D.21610>:
  D.21612 = 0;
  return D.21612;
  <D.21611>:
  i = 0;
  goto <D.17933>;
  <D.17932>:
  D.21613 = klass->methods;
  D.21614 = (long unsigned int) i;
  D.21615 = D.21614 * 8;
  D.21616 = D.21613 + D.21615;
  method = *D.21616;
  D.21617 = mono_method_is_constructor (method);
  if (D.21617 != 0) goto <D.21618>; else goto <D.21619>;
  <D.21618>:
  D.21620 = mono_method_signature (method);
  if (D.21620 != 0B) goto <D.21621>; else goto <D.21622>;
  <D.21621>:
  D.21623 = mono_method_signature (method);
  D.21624 = D.21623->param_count;
  if (D.21624 == 0) goto <D.21625>; else goto <D.21626>;
  <D.21625>:
  D.21627 = method->flags;
  D.21628 = (int) D.21627;
  D.21629 = D.21628 & 7;
  if (D.21629 == 6) goto <D.21630>; else goto <D.21631>;
  <D.21630>:
  D.21612 = 1;
  return D.21612;
  <D.21631>:
  <D.21626>:
  <D.21622>:
  <D.21619>:
  i = i + 1;
  <D.17933>:
  i.34 = (unsigned int) i;
  D.21633 = klass->method.count;
  if (i.34 < D.21633) goto <D.17932>; else goto <D.17934>;
  <D.17934>:
  D.21612 = 0;
  return D.21612;
}


mono_class_repect_method_constraints (struct VerifyContext * ctx, struct MonoClass * klass)
{
  struct MonoClass * D.21635;
  gboolean D.21636;
  int iftmp.35;
  struct MonoGenericContext * D.21642;
  int D.21643;
  struct MonoGenericClass * gklass;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gklass = klass->generic_class;
  ginst = gklass->context.class_inst;
  D.21635 = gklass->container_class;
  gc = D.21635->generic_container;
  if (gc == 0B) goto <D.21638>; else goto <D.21641>;
  <D.21641>:
  D.21642 = &gklass->context;
  D.21643 = generic_arguments_respect_constraints (ctx, gc, D.21642, ginst);
  if (D.21643 != 0) goto <D.21638>; else goto <D.21639>;
  <D.21638>:
  iftmp.35 = 1;
  goto <D.21640>;
  <D.21639>:
  iftmp.35 = 0;
  <D.21640>:
  D.21636 = iftmp.35;
  return D.21636;
}


generic_arguments_respect_constraints (struct VerifyContext * ctx, struct MonoGenericContainer * gc, struct MonoGenericContext * context, struct MonoGenericInst * ginst)
{
  struct MonoGenericParamFull * D.21645;
  long unsigned int D.21646;
  long unsigned int D.21647;
  int D.21648;
  int D.21651;
  gboolean D.21654;
  int D.21655;
  <unnamed-unsigned:22> D.21658;
  int D.21659;
  int i;

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

    type = ginst->type_argv[i];
    D.21645 = gc->type_params;
    D.21646 = (long unsigned int) i;
    D.21647 = D.21646 * 56;
    target = D.21645 + D.21647;
    D.21648 = mono_type_is_generic_argument (type);
    if (D.21648 == 0) goto <D.21649>; else goto <D.21650>;
    <D.21649>:
    // predicted unlikely by continue predictor.
    goto <D.18051>;
    <D.21650>:
    D.21651 = is_valid_type_in_context (ctx, type);
    if (D.21651 == 0) goto <D.21652>; else goto <D.21653>;
    <D.21652>:
    D.21654 = 0;
    return D.21654;
    <D.21653>:
    candidate = verifier_get_generic_param_from_type (ctx, type);
    candidate_class = mono_class_from_mono_type (type);
    D.21655 = mono_generic_param_is_constraint_compatible (ctx, target, candidate, candidate_class, context);
    if (D.21655 == 0) goto <D.21656>; else goto <D.21657>;
    <D.21656>:
    D.21654 = 0;
    return D.21654;
    <D.21657>:
  }
  <D.18051>:
  i = i + 1;
  <D.18053>:
  D.21658 = ginst->type_argc;
  D.21659 = (int) D.21658;
  if (D.21659 > i) goto <D.18052>; else goto <D.18054>;
  <D.18054>:
  D.21654 = 1;
  return D.21654;
}


verifier_get_generic_param_from_type (struct VerifyContext * ctx, struct MonoType * type)
{
  struct MonoGenericParam * D.21661;
  short unsigned int D.21662;
  unsigned char D.21663;
  struct MonoGenericClass * D.21666;
  unsigned char D.21670;
  unsigned char D.21671;
  struct MonoGenericParam * D.21676;
  struct MonoGenericParamFull * D.21677;
  long unsigned int D.21678;
  long unsigned int D.21679;
  struct MonoGenericContainer * gc;
  struct MonoMethod * method;
  int num;

  method = ctx->method;
  D.21661 = type->data.generic_param;
  D.21662 = D.21661->num;
  num = (int) D.21662;
  D.21663 = type->type;
  if (D.21663 == 19) goto <D.21664>; else goto <D.21665>;
  <D.21664>:
  {
    struct MonoClass * gtd;

    gtd = method->klass;
    D.21666 = gtd->generic_class;
    if (D.21666 != 0B) goto <D.21667>; else goto <D.21668>;
    <D.21667>:
    D.21666 = gtd->generic_class;
    gtd = D.21666->container_class;
    <D.21668>:
    gc = gtd->generic_container;
  }
  goto <D.21669>;
  <D.21665>:
  {
    struct MonoMethod * gmd;

    gmd = method;
    D.21670 = BIT_FIELD_REF <*method, 8, 264>;
    D.21671 = D.21670 & 16;
    if (D.21671 != 0) goto <D.21672>; else goto <D.21673>;
    <D.21672>:
    gmd = MEM[(struct MonoMethodInflated *)method].declaring;
    <D.21673>:
    gc = mono_method_get_generic_container (gmd);
  }
  <D.21669>:
  if (gc == 0B) goto <D.21674>; else goto <D.21675>;
  <D.21674>:
  D.21676 = 0B;
  return D.21676;
  <D.21675>:
  D.21677 = gc->type_params;
  D.21678 = (long unsigned int) num;
  D.21679 = D.21678 * 56;
  D.21676 = D.21677 + D.21679;
  return D.21676;
}


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.36;
  struct MonoGenericContainer * D.21682;
  struct MonoGenericParamInfo * iftmp.37;
  struct MonoGenericContainer * D.21687;
  short unsigned int D.21691;
  int D.21692;
  short unsigned int D.21693;
  int D.21694;
  struct MonoClass * * D.21695;
  struct MonoGenericContext * D.21698;
  struct MonoClass * D.21699;
  struct MonoType * D.21700;
  gboolean D.21703;
  struct MonoType * D.21706;
  int D.21707;
  unsigned int D.21709;
  unsigned int D.21710;
  unsigned char D.21712;
  int D.21715;
  int D.21724;
  _Bool D.21725;
  int D.21726;
  int D.21727;
  _Bool D.21728;
  int D.21729;
  int D.21730;
  int D.21735;
  int D.21740;
  int D.21743;
  int D.21744;
  struct MonoClass * * D.21747;
  struct MonoClass * D.21750;
  struct MonoType * D.21751;
  struct MonoType * D.21754;
  struct MonoType * D.21755;
  int D.21756;
  int D.21763;
  struct MonoType * D.21765;
  int D.21766;
  int D.21769;
  struct MonoGenericParamInfo * tinfo;
  struct MonoGenericParamInfo * cinfo;
  struct MonoClass * * candidate_class;
  gboolean class_constraint_satisfied;
  gboolean valuetype_constraint_satisfied;
  int tmask;
  int cmask;

  D.21682 = target->owner;
  if (D.21682 != 0B) goto <D.21683>; else goto <D.21684>;
  <D.21683>:
  iftmp.36 = &MEM[(struct MonoGenericParamFull *)target].info;
  goto <D.21685>;
  <D.21684>:
  iftmp.36 = 0B;
  <D.21685>:
  tinfo = iftmp.36;
  D.21687 = candidate->owner;
  if (D.21687 != 0B) goto <D.21688>; else goto <D.21689>;
  <D.21688>:
  iftmp.37 = &MEM[(struct MonoGenericParamFull *)candidate].info;
  goto <D.21690>;
  <D.21689>:
  iftmp.37 = 0B;
  <D.21690>:
  cinfo = iftmp.37;
  class_constraint_satisfied = 0;
  valuetype_constraint_satisfied = 0;
  D.21691 = tinfo->flags;
  D.21692 = (int) D.21691;
  tmask = D.21692 & 28;
  D.21693 = cinfo->flags;
  D.21694 = (int) D.21693;
  cmask = D.21694 & 28;
  D.21695 = cinfo->constraints;
  if (D.21695 != 0B) goto <D.21696>; else goto <D.21697>;
  <D.21696>:
  candidate_class = cinfo->constraints;
  goto <D.18003>;
  <D.18002>:
  {
    struct MonoClass * cc;
    struct MonoType * inflated;

    D.21698 = ctx->generic_context;
    D.21699 = *candidate_class;
    D.21700 = &D.21699->byval_arg;
    inflated = verifier_inflate_type (ctx, D.21700, D.21698);
    if (inflated == 0B) goto <D.21701>; else goto <D.21702>;
    <D.21701>:
    D.21703 = 0;
    return D.21703;
    <D.21702>:
    cc = mono_class_from_mono_type (inflated);
    mono_metadata_free_type (inflated);
    D.21706 = &cc->byval_arg;
    D.21707 = mono_type_is_reference (D.21706);
    if (D.21707 != 0) goto <D.21708>; else goto <D.21704>;
    <D.21708>:
    D.21709 = cc->flags;
    D.21710 = D.21709 & 32;
    if (D.21710 == 0) goto <D.21711>; else goto <D.21704>;
    <D.21711>:
    D.21712 = cc->byval_arg.type;
    if (D.21712 != 19) goto <D.21713>; else goto <D.21704>;
    <D.21713>:
    D.21712 = cc->byval_arg.type;
    if (D.21712 != 30) goto <D.21714>; else goto <D.21704>;
    <D.21714>:
    class_constraint_satisfied = 1;
    goto <D.21705>;
    <D.21704>:
    D.21706 = &cc->byval_arg;
    D.21715 = mono_type_is_reference (D.21706);
    if (D.21715 == 0) goto <D.21716>; else goto <D.21717>;
    <D.21716>:
    D.21709 = cc->flags;
    D.21710 = D.21709 & 32;
    if (D.21710 == 0) goto <D.21718>; else goto <D.21719>;
    <D.21718>:
    D.21712 = cc->byval_arg.type;
    if (D.21712 != 19) goto <D.21720>; else goto <D.21721>;
    <D.21720>:
    D.21712 = cc->byval_arg.type;
    if (D.21712 != 30) goto <D.21722>; else goto <D.21723>;
    <D.21722>:
    valuetype_constraint_satisfied = 1;
    <D.21723>:
    <D.21721>:
    <D.21719>:
    <D.21717>:
    <D.21705>:
  }
  candidate_class = candidate_class + 8;
  <D.18003>:
  D.21699 = *candidate_class;
  if (D.21699 != 0B) goto <D.18002>; else goto <D.18004>;
  <D.18004>:
  <D.21697>:
  D.21724 = cmask & 4;
  D.21725 = D.21724 != 0;
  D.21726 = (int) D.21725;
  class_constraint_satisfied = D.21726 | class_constraint_satisfied;
  D.21727 = cmask & 8;
  D.21728 = D.21727 != 0;
  D.21729 = (int) D.21728;
  valuetype_constraint_satisfied = D.21729 | valuetype_constraint_satisfied;
  D.21730 = tmask & 4;
  if (D.21730 != 0) goto <D.21731>; else goto <D.21732>;
  <D.21731>:
  if (class_constraint_satisfied == 0) goto <D.21733>; else goto <D.21734>;
  <D.21733>:
  D.21703 = 0;
  return D.21703;
  <D.21734>:
  <D.21732>:
  D.21735 = tmask & 8;
  if (D.21735 != 0) goto <D.21736>; else goto <D.21737>;
  <D.21736>:
  if (valuetype_constraint_satisfied == 0) goto <D.21738>; else goto <D.21739>;
  <D.21738>:
  D.21703 = 0;
  return D.21703;
  <D.21739>:
  <D.21737>:
  D.21740 = tmask & 16;
  if (D.21740 != 0) goto <D.21741>; else goto <D.21742>;
  <D.21741>:
  D.21743 = cmask & 16;
  D.21744 = D.21743 | valuetype_constraint_satisfied;
  if (D.21744 == 0) goto <D.21745>; else goto <D.21746>;
  <D.21745>:
  D.21703 = 0;
  return D.21703;
  <D.21746>:
  <D.21742>:
  D.21747 = tinfo->constraints;
  if (D.21747 != 0B) goto <D.21748>; else goto <D.21749>;
  <D.21748>:
  {
    struct MonoClass * * target_class;

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

      D.21750 = *target_class;
      D.21751 = &D.21750->byval_arg;
      inflated = verifier_inflate_type (ctx, D.21751, context);
      if (inflated == 0B) goto <D.21752>; else goto <D.21753>;
      <D.21752>:
      D.21703 = 0;
      return D.21703;
      <D.21753>:
      tc = mono_class_from_mono_type (inflated);
      mono_metadata_free_type (inflated);
      D.21754 = &candidate_param_class->byval_arg;
      D.21755 = &tc->byval_arg;
      D.21756 = mono_metadata_type_equal (D.21755, D.21754);
      if (D.21756 != 0) goto <D.21757>; else goto <D.21758>;
      <D.21757>:
      // predicted unlikely by continue predictor.
      goto <D.18008>;
      <D.21758>:
      D.21695 = cinfo->constraints;
      if (D.21695 == 0B) goto <D.21759>; else goto <D.21760>;
      <D.21759>:
      D.21703 = 0;
      return D.21703;
      <D.21760>:
      candidate_class = cinfo->constraints;
      goto <D.18013>;
      <D.18012>:
      {
        struct MonoClass * cc;

        D.21698 = ctx->generic_context;
        D.21699 = *candidate_class;
        D.21700 = &D.21699->byval_arg;
        inflated = verifier_inflate_type (ctx, D.21700, D.21698);
        if (inflated == 0B) goto <D.21761>; else goto <D.21762>;
        <D.21761>:
        D.21703 = 0;
        return D.21703;
        <D.21762>:
        cc = mono_class_from_mono_type (inflated);
        mono_metadata_free_type (inflated);
        D.21763 = verifier_class_is_assignable_from (tc, cc);
        if (D.21763 != 0) goto <D.18010>; else goto <D.21764>;
        <D.21764>:
        D.21765 = &cc->byval_arg;
        D.21766 = mono_type_is_generic_argument (D.21765);
        if (D.21766 != 0) goto <D.21767>; else goto <D.21768>;
        <D.21767>:
        {
          struct MonoGenericParam * other_candidate;

          D.21765 = &cc->byval_arg;
          other_candidate = verifier_get_generic_param_from_type (ctx, D.21765);
          D.21769 = mono_generic_param_is_constraint_compatible (ctx, target, other_candidate, cc, context);
          if (D.21769 != 0) goto <D.18010>; else goto <D.21770>;
          <D.21770>:
        }
        <D.21768>:
      }
      candidate_class = candidate_class + 8;
      <D.18013>:
      D.21699 = *candidate_class;
      if (D.21699 != 0B) goto <D.18012>; else goto <D.18010>;
      <D.18010>:
      D.21699 = *candidate_class;
      if (D.21699 == 0B) goto <D.21771>; else goto <D.21772>;
      <D.21771>:
      D.21703 = 0;
      return D.21703;
      <D.21772>:
    }
    <D.18008>:
    target_class = target_class + 8;
    <D.18015>:
    D.21750 = *target_class;
    if (D.21750 != 0B) goto <D.18014>; else goto <D.18016>;
    <D.18016>:
  }
  <D.21749>:
  D.21703 = 1;
  return D.21703;
}


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

  try
    {
      result = mono_class_inflate_generic_type_checked (type, context, &error);
      D.21774 = mono_error_ok (&error);
      if (D.21774 == 0) goto <D.21775>; else goto <D.21776>;
      <D.21775>:
      mono_error_cleanup (&error);
      D.21777 = 0B;
      return D.21777;
      <D.21776>:
      D.21777 = result;
      return D.21777;
    }
  finally
    {
      error = {CLOBBER};
    }
}


init_stack_with_value_at_exception_boundary (struct VerifyContext * ctx, struct ILCodeDesc * code, struct MonoClass * klass)
{
  struct MonoGenericContext * D.21780;
  struct MonoType * D.21781;
  int D.21782;
  gchar * D.21785;
  struct GSList * D.21786;
  struct GSList * D.21787;
  int D.21788;
  unsigned int D.21791;
  gchar * D.21792;
  struct GSList * D.21793;
  struct ILStackDesc * D.21794;
  struct GSList * D.21795;
  struct GSList * D.21796;
  short unsigned int D.21797;
  short unsigned int D.21798;
  int D.21799;
  int D.21802;
  int D.21803;
  struct MonoError error;
  struct MonoType * type;

  try
    {
      D.21780 = ctx->generic_context;
      D.21781 = &klass->byval_arg;
      type = mono_class_inflate_generic_type_checked (D.21781, D.21780, &error);
      D.21782 = mono_error_ok (&error);
      if (D.21782 == 0) goto <D.21783>; else goto <D.21784>;
      <D.21783>:
      {
        char * name;

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

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21785 = monoeg_g_strdup_printf ("Invalid class %s used for exception", name);
          vinfo->info.message = D.21785;
          vinfo->exception_type = 3;
          D.21786 = ctx->list;
          D.21787 = monoeg_g_slist_prepend (D.21786, vinfo);
          ctx->list = D.21787;
        }
        ctx->valid = 0;
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        return;
      }
      <D.21784>:
      D.21788 = ctx->max_stack;
      if (D.21788 == 0) goto <D.21789>; else goto <D.21790>;
      <D.21789>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21791 = ctx->ip_offset;
        D.21792 = monoeg_g_strdup_printf ("Stack overflow at 0x%04x", D.21791);
        vinfo->info.message = D.21792;
        vinfo->exception_type = 3;
        D.21786 = ctx->list;
        D.21793 = monoeg_g_slist_prepend (D.21786, vinfo);
        ctx->list = D.21793;
      }
      ctx->valid = 0;
      return;
      <D.21790>:
      stack_init (ctx, code);
      ensure_stack_size (code, 1);
      D.21794 = code->stack;
      set_stack_value (ctx, D.21794, type, 0);
      D.21795 = ctx->exception_types;
      D.21796 = monoeg_g_slist_prepend (D.21795, type);
      ctx->exception_types = D.21796;
      code->size = 1;
      D.21797 = code->flags;
      D.21798 = D.21797 | 2;
      code->flags = D.21798;
      D.21799 = mono_type_is_generic_argument (type);
      if (D.21799 != 0) goto <D.21800>; else goto <D.21801>;
      <D.21800>:
      D.21794 = code->stack;
      D.21794 = code->stack;
      D.21802 = D.21794->stype;
      D.21803 = D.21802 | 4096;
      D.21794->stype = D.21803;
      <D.21801>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


ensure_stack_size (struct ILCodeDesc * stack, int required)
{
  short unsigned int D.21807;
  int D.21808;
  int D.21811;
  int D.21812;
  short unsigned int D.21813;
  int D.21814;
  _Bool D.21815;
  long int D.21816;
  long int D.21817;
  _Bool D.21820;
  long int D.21821;
  long int D.21822;
  long unsigned int D.21825;
  long unsigned int D.21826;
  struct ILStackDesc * D.21827;
  long unsigned int D.21832;
  long unsigned int D.21833;
  short unsigned int D.21834;
  int new_size;
  struct ILStackDesc * tmp;

  new_size = 8;
  D.21807 = stack->max_size;
  D.21808 = (int) D.21807;
  if (D.21808 > required) goto <D.21809>; else goto <D.21810>;
  <D.21809>:
  return;
  <D.21810>:
  D.21807 = stack->max_size;
  D.21808 = (int) D.21807;
  D.21811 = D.21808 * 2;
  D.21812 = MAX_EXPR <D.21811, required>;
  new_size = MAX_EXPR <D.21812, 8>;
  D.21813 = stack->size;
  D.21814 = (int) D.21813;
  D.21815 = D.21814 > new_size;
  D.21816 = (long int) D.21815;
  D.21817 = __builtin_expect (D.21816, 0);
  if (D.21817 != 0) goto <D.21818>; else goto <D.21819>;
  <D.21818>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1499, "new_size >= stack->size");
  <D.21819>:
  D.21820 = new_size < required;
  D.21821 = (long int) D.21820;
  D.21822 = __builtin_expect (D.21821, 0);
  if (D.21822 != 0) goto <D.21823>; else goto <D.21824>;
  <D.21823>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1500, "new_size >= required");
  <D.21824>:
  D.21825 = (long unsigned int) new_size;
  D.21826 = D.21825 * 24;
  tmp = monoeg_malloc0 (D.21826);
  D.21827 = stack->stack;
  if (D.21827 != 0B) goto <D.21828>; else goto <D.21829>;
  <D.21828>:
  D.21813 = stack->size;
  if (D.21813 != 0) goto <D.21830>; else goto <D.21831>;
  <D.21830>:
  D.21813 = stack->size;
  D.21832 = (long unsigned int) D.21813;
  D.21833 = D.21832 * 24;
  D.21827 = stack->stack;
  memcpy (tmp, D.21827, D.21833);
  <D.21831>:
  D.21827 = stack->stack;
  monoeg_g_free (D.21827);
  <D.21829>:
  stack->stack = tmp;
  D.21834 = (short unsigned int) new_size;
  stack->max_size = D.21834;
}


mono_opcode_is_prefix (int op)
{
  gboolean D.21836;

  switch (op) <default: <D.21837>, case 274: <D.19396>, case 275: <D.19397>, case 276: <D.19398>, case 278: <D.19399>, case 286: <D.19400>>
  <D.19396>:
  <D.19397>:
  <D.19398>:
  <D.19399>:
  <D.19400>:
  D.21836 = 1;
  return D.21836;
  <D.21837>:
  D.21836 = 0;
  return D.21836;
}


merge_stacks (struct VerifyContext * ctx, struct ILCodeDesc * from, struct ILCodeDesc * to, gboolean start, gboolean external)
{
  short unsigned int D.21841;
  struct ILCodeDesc * D.21845;
  int D.21846;
  int D.21847;
  short unsigned int D.21850;
  short unsigned int D.21851;
  unsigned int D.21854;
  int D.21855;
  int D.21856;
  gchar * D.21857;
  struct GSList * D.21858;
  struct GSList * D.21859;
  struct ILStackDesc * D.21860;
  long unsigned int D.21861;
  long unsigned int D.21862;
  struct ILStackDesc * D.21863;
  int D.21864;
  int D.21867;
  int D.21870;
  int D.21873;
  int D.21876;
  int D.21881;
  int D.21883;
  int D.21886;
  int D.21888;
  int D.21889;
  gchar * D.21890;
  struct GSList * D.21891;
  int D.21892;
  struct MonoClass * D.21896;
  unsigned char D.21897;
  unsigned char D.21898;
  struct MonoClass * D.21900;
  unsigned char D.21901;
  unsigned char D.21902;
  int D.21904;
  int D.21906;
  short unsigned int D.21908;
  short unsigned int D.21909;
  short unsigned int D.21910;
  int D.21911;
  struct MonoClass * * D.21912;
  long unsigned int D.21913;
  long unsigned int D.21914;
  struct MonoClass * * D.21915;
  struct MonoClass * D.21916;
  struct MonoType * D.21917;
  struct MonoClass * * D.21918;
  struct MonoClass * * D.21919;
  struct MonoClass * D.21920;
  struct MonoType * D.21921;
  int D.21922;
  int D.21925;
  const char * D.21931;
  gchar * D.21932;
  struct GSList * D.21933;
  int D.21936;
  const char * D.21942;
  gchar * D.21943;
  struct GSList * D.21944;
  unsigned int D.21947;
  unsigned int D.21948;
  int D.21951;
  struct MonoClass * * D.21954;
  struct MonoClass * * D.21955;
  struct MonoClass * D.21956;
  int D.21957;
  short unsigned int D.21960;
  int D.21961;
  unsigned int D.21962;
  unsigned int D.21963;
  int D.21966;
  struct MonoClass * * D.21969;
  struct MonoClass * * D.21970;
  struct MonoClass * D.21971;
  int D.21972;
  short unsigned int D.21975;
  int D.21976;
  int D.21979;
  int D.21981;
  gchar * D.21985;
  struct GSList * D.21986;
  int D.21989;
  struct MonoType * D.21990;
  _Bool D.21991;
  long int D.21992;
  long int D.21993;
  int D.21996;
  struct MonoType * D.21997;
  int D.21998;
  short unsigned int D.22001;
  short unsigned int D.22002;
  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.21839>; else goto <D.21840>;
      <D.21839>:
      D.21841 = to->flags;
      if (D.21841 == 0) goto <D.21842>; else goto <D.21843>;
      <D.21842>:
      from->size = 0;
      goto <D.21844>;
      <D.21843>:
      D.21845 = &ctx->eval;
      stack_copy (D.21845, to);
      <D.21844>:
      goto end_verify;
      <D.21840>:
      D.21841 = to->flags;
      D.21846 = (int) D.21841;
      D.21847 = D.21846 & 8;
      if (D.21847 == 0) goto <D.21848>; else goto <D.21849>;
      <D.21848>:
      D.21845 = &ctx->eval;
      stack_copy (to, D.21845);
      goto end_verify;
      <D.21849>:
      D.21850 = from->size;
      D.21851 = to->size;
      if (D.21850 != D.21851) goto <D.21852>; else goto <D.21853>;
      <D.21852>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21854 = ctx->ip_offset;
        D.21851 = to->size;
        D.21855 = (int) D.21851;
        D.21850 = from->size;
        D.21856 = (int) D.21850;
        D.21857 = monoeg_g_strdup_printf ("Could not merge stacks, different sizes (%d x %d) at 0x%04x", D.21856, D.21855, D.21854);
        vinfo->info.message = D.21857;
        vinfo->exception_type = 3;
        D.21858 = ctx->list;
        D.21859 = monoeg_g_slist_prepend (D.21858, vinfo);
        ctx->list = D.21859;
      }
      ctx->valid = 0;
      goto end_verify;
      <D.21853>:
      i = 0;
      goto <D.19367>;
      <D.19366>:
      {
        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.21860 = from->stack;
        D.21861 = (long unsigned int) i;
        D.21862 = D.21861 * 24;
        new_slot = D.21860 + D.21862;
        D.21863 = to->stack;
        D.21861 = (long unsigned int) i;
        D.21862 = D.21861 * 24;
        old_slot = D.21863 + D.21862;
        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.21864 = verify_stack_type_compatibility (ctx, old_type, new_slot);
        if (D.21864 != 0) goto <D.21865>; else goto <D.21866>;
        <D.21865>:
        copy_stack_value (new_slot, old_slot);
        // predicted unlikely by continue predictor.
        goto <D.19347>;
        <D.21866>:
        D.21867 = verify_stack_type_compatibility (ctx, new_type, old_slot);
        if (D.21867 != 0) goto <D.21868>; else goto <D.21869>;
        <D.21868>:
        copy_stack_value (old_slot, new_slot);
        // predicted unlikely by continue predictor.
        goto <D.19347>;
        <D.21869>:
        D.21870 = stack_slot_is_boxed_value (old_slot);
        if (D.21870 != 0) goto <D.21871>; else goto <D.21872>;
        <D.21871>:
        D.21873 = stack_slot_is_boxed_value (new_slot);
        if (D.21873 != 0) goto <D.21874>; else goto <D.21875>;
        <D.21874>:
        D.21876 = mono_metadata_type_equal (old_type, new_type);
        if (D.21876 != 0) goto <D.21877>; else goto <D.21878>;
        <D.21877>:
        copy_stack_value (new_slot, old_slot);
        // predicted unlikely by continue predictor.
        goto <D.19347>;
        <D.21878>:
        <D.21875>:
        <D.21872>:
        D.21881 = mono_type_is_generic_argument (old_type);
        if (D.21881 != 0) goto <D.21879>; else goto <D.21882>;
        <D.21882>:
        D.21883 = mono_type_is_generic_argument (new_type);
        if (D.21883 != 0) goto <D.21879>; else goto <D.21880>;
        <D.21879>:
        {
          char * old_name;
          char * new_name;

          old_name = stack_slot_full_name (old_slot);
          new_name = stack_slot_full_name (new_slot);
          D.21886 = ctx->verifiable;
          if (D.21886 != 0) goto <D.21884>; else goto <D.21887>;
          <D.21887>:
          D.21888 = ctx->level;
          D.21889 = D.21888 & 128;
          if (D.21889 != 0) goto <D.21884>; else goto <D.21885>;
          <D.21884>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.21854 = ctx->ip_offset;
            D.21890 = 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.21854);
            vinfo->info.message = D.21890;
            vinfo->exception_type = 4;
            D.21858 = ctx->list;
            D.21891 = monoeg_g_slist_prepend (D.21858, vinfo);
            ctx->list = D.21891;
          }
          ctx->verifiable = 0;
          D.21888 = ctx->level;
          D.21892 = D.21888 & 16;
          if (D.21892 != 0) goto <D.21893>; else goto <D.21894>;
          <D.21893>:
          ctx->valid = 0;
          <D.21894>:
          <D.21885>:
          monoeg_g_free (old_name);
          monoeg_g_free (new_name);
          goto end_verify;
        }
        <D.21880>:
        D.21896 = mono_class_from_mono_type (old_type);
        D.21897 = BIT_FIELD_REF <*D.21896, 8, 256>;
        D.21898 = D.21897 & 8;
        if (D.21898 == 0) goto <D.21899>; else goto <D.21895>;
        <D.21899>:
        D.21900 = mono_class_from_mono_type (new_type);
        D.21901 = BIT_FIELD_REF <*D.21900, 8, 256>;
        D.21902 = D.21901 & 8;
        if (D.21902 == 0) goto <D.21903>; else goto <D.21895>;
        <D.21903>:
        D.21904 = stack_slot_is_managed_pointer (old_slot);
        if (D.21904 == 0) goto <D.21905>; else goto <D.21895>;
        <D.21905>:
        D.21906 = stack_slot_is_managed_pointer (new_slot);
        if (D.21906 == 0) goto <D.21907>; else goto <D.21895>;
        <D.21907>:
        mono_class_setup_supertypes (old_class);
        mono_class_setup_supertypes (new_class);
        D.21908 = new_class->idepth;
        D.21909 = old_class->idepth;
        D.21910 = MIN_EXPR <D.21908, D.21909>;
        D.21911 = (int) D.21910;
        j = D.21911 + -1;
        goto <D.19353>;
        <D.19352>:
        D.21912 = new_class->supertypes;
        D.21913 = (long unsigned int) j;
        D.21914 = D.21913 * 8;
        D.21915 = D.21912 + D.21914;
        D.21916 = *D.21915;
        D.21917 = &D.21916->byval_arg;
        D.21918 = old_class->supertypes;
        D.21913 = (long unsigned int) j;
        D.21914 = D.21913 * 8;
        D.21919 = D.21918 + D.21914;
        D.21920 = *D.21919;
        D.21921 = &D.21920->byval_arg;
        D.21922 = mono_metadata_type_equal (D.21921, D.21917);
        if (D.21922 != 0) goto <D.21923>; else goto <D.21924>;
        <D.21923>:
        D.21918 = old_class->supertypes;
        D.21913 = (long unsigned int) j;
        D.21914 = D.21913 * 8;
        D.21919 = D.21918 + D.21914;
        match_class = *D.21919;
        goto match_found;
        <D.21924>:
        j = j + -1;
        <D.19353>:
        if (j > 0) goto <D.19352>; else goto <D.19354>;
        <D.19354>:
        mono_class_setup_interfaces (old_class, &error);
        D.21925 = mono_error_ok (&error);
        if (D.21925 == 0) goto <D.21926>; else goto <D.21927>;
        <D.21926>:
        D.21886 = ctx->verifiable;
        if (D.21886 != 0) goto <D.21928>; else goto <D.21930>;
        <D.21930>:
        D.21888 = ctx->level;
        D.21889 = D.21888 & 128;
        if (D.21889 != 0) goto <D.21928>; else goto <D.21929>;
        <D.21928>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21854 = ctx->ip_offset;
          D.21931 = mono_error_get_message (&error);
          D.21932 = monoeg_g_strdup_printf ("Cannot merge stacks due to a TypeLoadException %s at 0x%04x", D.21931, D.21854);
          vinfo->info.message = D.21932;
          vinfo->exception_type = 4;
          D.21858 = ctx->list;
          D.21933 = monoeg_g_slist_prepend (D.21858, vinfo);
          ctx->list = D.21933;
        }
        ctx->verifiable = 0;
        D.21888 = ctx->level;
        D.21892 = D.21888 & 16;
        if (D.21892 != 0) goto <D.21934>; else goto <D.21935>;
        <D.21934>:
        ctx->valid = 0;
        <D.21935>:
        <D.21929>:
        mono_error_cleanup (&error);
        goto end_verify;
        <D.21927>:
        mono_class_setup_interfaces (new_class, &error);
        D.21936 = mono_error_ok (&error);
        if (D.21936 == 0) goto <D.21937>; else goto <D.21938>;
        <D.21937>:
        D.21886 = ctx->verifiable;
        if (D.21886 != 0) goto <D.21939>; else goto <D.21941>;
        <D.21941>:
        D.21888 = ctx->level;
        D.21889 = D.21888 & 128;
        if (D.21889 != 0) goto <D.21939>; else goto <D.21940>;
        <D.21939>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21854 = ctx->ip_offset;
          D.21942 = mono_error_get_message (&error);
          D.21943 = monoeg_g_strdup_printf ("Cannot merge stacks due to a TypeLoadException %s at 0x%04x", D.21942, D.21854);
          vinfo->info.message = D.21943;
          vinfo->exception_type = 4;
          D.21858 = ctx->list;
          D.21944 = monoeg_g_slist_prepend (D.21858, vinfo);
          ctx->list = D.21944;
        }
        ctx->verifiable = 0;
        D.21888 = ctx->level;
        D.21892 = D.21888 & 16;
        if (D.21892 != 0) goto <D.21945>; else goto <D.21946>;
        <D.21945>:
        ctx->valid = 0;
        <D.21946>:
        <D.21940>:
        mono_error_cleanup (&error);
        goto end_verify;
        <D.21938>:
        D.21947 = old_class->flags;
        D.21948 = D.21947 & 32;
        if (D.21948 != 0) goto <D.21949>; else goto <D.21950>;
        <D.21949>:
        D.21951 = verifier_class_is_assignable_from (old_class, new_class);
        if (D.21951 != 0) goto <D.21952>; else goto <D.21953>;
        <D.21952>:
        match_class = old_class;
        goto match_found;
        <D.21953>:
        j = 0;
        goto <D.19358>;
        <D.19357>:
        D.21954 = old_class->interfaces;
        D.21913 = (long unsigned int) j;
        D.21914 = D.21913 * 8;
        D.21955 = D.21954 + D.21914;
        D.21956 = *D.21955;
        D.21957 = verifier_class_is_assignable_from (D.21956, new_class);
        if (D.21957 != 0) goto <D.21958>; else goto <D.21959>;
        <D.21958>:
        D.21954 = old_class->interfaces;
        D.21913 = (long unsigned int) j;
        D.21914 = D.21913 * 8;
        D.21955 = D.21954 + D.21914;
        match_class = *D.21955;
        goto match_found;
        <D.21959>:
        j = j + 1;
        <D.19358>:
        D.21960 = old_class->interface_count;
        D.21961 = (int) D.21960;
        if (D.21961 > j) goto <D.19357>; else goto <D.19359>;
        <D.19359>:
        <D.21950>:
        D.21962 = new_class->flags;
        D.21963 = D.21962 & 32;
        if (D.21963 != 0) goto <D.21964>; else goto <D.21965>;
        <D.21964>:
        D.21966 = verifier_class_is_assignable_from (new_class, old_class);
        if (D.21966 != 0) goto <D.21967>; else goto <D.21968>;
        <D.21967>:
        match_class = new_class;
        goto match_found;
        <D.21968>:
        j = 0;
        goto <D.19361>;
        <D.19360>:
        D.21969 = new_class->interfaces;
        D.21913 = (long unsigned int) j;
        D.21914 = D.21913 * 8;
        D.21970 = D.21969 + D.21914;
        D.21971 = *D.21970;
        D.21972 = verifier_class_is_assignable_from (D.21971, old_class);
        if (D.21972 != 0) goto <D.21973>; else goto <D.21974>;
        <D.21973>:
        D.21969 = new_class->interfaces;
        D.21913 = (long unsigned int) j;
        D.21914 = D.21913 * 8;
        D.21970 = D.21969 + D.21914;
        match_class = *D.21970;
        goto match_found;
        <D.21974>:
        j = j + 1;
        <D.19361>:
        D.21975 = new_class->interface_count;
        D.21976 = (int) D.21975;
        if (D.21976 > j) goto <D.19360>; else goto <D.19362>;
        <D.19362>:
        <D.21965>:
        match_class = mono_defaults.object_class;
        goto match_found;
        <D.21895>:
        D.21979 = is_compatible_boxed_valuetype (ctx, old_type, new_type, new_slot, 0);
        if (D.21979 != 0) goto <D.21977>; else goto <D.21980>;
        <D.21980>:
        D.21981 = is_compatible_boxed_valuetype (ctx, new_type, old_type, old_slot, 0);
        if (D.21981 != 0) goto <D.21977>; else goto <D.21978>;
        <D.21977>:
        match_class = mono_defaults.object_class;
        goto match_found;
        <D.21978>:
        {
          char * old_name;
          char * new_name;

          old_name = stack_slot_full_name (old_slot);
          new_name = stack_slot_full_name (new_slot);
          D.21886 = ctx->verifiable;
          if (D.21886 != 0) goto <D.21982>; else goto <D.21984>;
          <D.21984>:
          D.21888 = ctx->level;
          D.21889 = D.21888 & 128;
          if (D.21889 != 0) goto <D.21982>; else goto <D.21983>;
          <D.21982>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.21854 = ctx->ip_offset;
            D.21985 = 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.21854);
            vinfo->info.message = D.21985;
            vinfo->exception_type = 4;
            D.21858 = ctx->list;
            D.21986 = monoeg_g_slist_prepend (D.21858, vinfo);
            ctx->list = D.21986;
          }
          ctx->verifiable = 0;
          D.21888 = ctx->level;
          D.21892 = D.21888 & 16;
          if (D.21892 != 0) goto <D.21987>; else goto <D.21988>;
          <D.21987>:
          ctx->valid = 0;
          <D.21988>:
          <D.21983>:
          monoeg_g_free (old_name);
          monoeg_g_free (new_name);
        }
        D.21989 = stack_slot_is_managed_pointer (old_slot);
        D.21990 = &new_class->byval_arg;
        set_stack_value (ctx, old_slot, D.21990, D.21989);
        goto end_verify;
        match_found:
        D.21991 = match_class == 0B;
        D.21992 = (long int) D.21991;
        D.21993 = __builtin_expect (D.21992, 0);
        if (D.21993 != 0) goto <D.21994>; else goto <D.21995>;
        <D.21994>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 4668, "match_class");
        <D.21995>:
        D.21996 = stack_slot_is_managed_pointer (old_slot);
        D.21997 = &match_class->byval_arg;
        set_stack_value (ctx, old_slot, D.21997, D.21996);
        D.21998 = stack_slot_is_managed_pointer (old_slot);
        D.21997 = &match_class->byval_arg;
        set_stack_value (ctx, new_slot, D.21997, D.21998);
        // predicted unlikely by continue predictor.
        goto <D.19347>;
      }
      <D.19347>:
      i = i + 1;
      <D.19367>:
      D.21850 = from->size;
      D.21856 = (int) D.21850;
      if (D.21856 > i) goto <D.19366>; else goto <D.19368>;
      <D.19368>:
      end_verify:
      if (external != 0) goto <D.21999>; else goto <D.22000>;
      <D.21999>:
      D.21841 = to->flags;
      D.22001 = D.21841 | 2;
      to->flags = D.22001;
      <D.22000>:
      D.21841 = to->flags;
      D.22002 = D.21841 | 8;
      to->flags = D.22002;
    }
  finally
    {
      error = {CLOBBER};
    }
}


stack_copy (struct ILCodeDesc * to, struct ILCodeDesc * from)
{
  short unsigned int D.22003;
  int D.22004;
  long unsigned int D.22007;
  long unsigned int D.22008;
  struct ILStackDesc * D.22009;
  struct ILStackDesc * D.22010;

  D.22003 = from->size;
  D.22004 = (int) D.22003;
  ensure_stack_size (to, D.22004);
  D.22003 = from->size;
  to->size = D.22003;
  D.22003 = from->size;
  if (D.22003 != 0) goto <D.22005>; else goto <D.22006>;
  <D.22005>:
  D.22003 = from->size;
  D.22007 = (long unsigned int) D.22003;
  D.22008 = D.22007 * 24;
  D.22009 = from->stack;
  D.22010 = to->stack;
  memcpy (D.22010, D.22009, D.22008);
  <D.22006>:
}


mono_type_from_stack_slot (struct ILStackDesc * slot)
{
  int D.22011;
  struct MonoType * D.22014;
  struct MonoType * D.22015;

  D.22011 = stack_slot_is_managed_pointer (slot);
  if (D.22011 != 0) goto <D.22012>; else goto <D.22013>;
  <D.22012>:
  D.22015 = slot->type;
  D.22014 = mono_type_get_type_byref (D.22015);
  return D.22014;
  <D.22013>:
  D.22014 = slot->type;
  return D.22014;
}


mono_type_get_type_byref (struct MonoType * type)
{
  unsigned char D.22017;
  unsigned char D.22018;
  struct MonoType * D.22021;
  struct MonoClass * D.22022;

  D.22017 = BIT_FIELD_REF <*type, 8, 88>;
  D.22018 = D.22017 & 64;
  if (D.22018 != 0) goto <D.22019>; else goto <D.22020>;
  <D.22019>:
  D.22021 = type;
  return D.22021;
  <D.22020>:
  D.22022 = mono_class_from_mono_type (type);
  D.22021 = &D.22022->this_arg;
  return D.22021;
}


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

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


verify_stack_type_compatibility_full (struct VerifyContext * ctx, struct MonoType * type, struct ILStackDesc * stack, gboolean drop_byref, gboolean valuetype_must_be_boxed)
{
  int D.22026;
  unsigned char D.22029;
  unsigned char D.22030;
  int D.22033;
  int D.22036;
  int D.22037;
  int D.22042;
  int D.22045;
  int D.22050;
  struct MonoType * D.22055;
  struct MonoType * candidate;

  candidate = mono_type_from_stack_slot (stack);
  D.22026 = mono_type_is_reference (type);
  if (D.22026 != 0) goto <D.22027>; else goto <D.22028>;
  <D.22027>:
  D.22029 = BIT_FIELD_REF <*type, 8, 88>;
  D.22030 = D.22029 & 64;
  if (D.22030 == 0) goto <D.22031>; else goto <D.22032>;
  <D.22031>:
  D.22033 = stack_slot_is_null_literal (stack);
  if (D.22033 != 0) goto <D.22034>; else goto <D.22035>;
  <D.22034>:
  D.22036 = 1;
  return D.22036;
  <D.22035>:
  <D.22032>:
  <D.22028>:
  D.22037 = is_compatible_boxed_valuetype (ctx, type, candidate, stack, 1);
  if (D.22037 != 0) goto <D.22038>; else goto <D.22039>;
  <D.22038>:
  D.22036 = 1;
  return D.22036;
  <D.22039>:
  if (valuetype_must_be_boxed != 0) goto <D.22040>; else goto <D.22041>;
  <D.22040>:
  D.22042 = stack_slot_is_boxed_value (stack);
  if (D.22042 == 0) goto <D.22043>; else goto <D.22044>;
  <D.22043>:
  D.22045 = mono_type_is_reference (candidate);
  if (D.22045 == 0) goto <D.22046>; else goto <D.22047>;
  <D.22046>:
  D.22036 = 0;
  return D.22036;
  <D.22047>:
  <D.22044>:
  <D.22041>:
  if (valuetype_must_be_boxed == 0) goto <D.22048>; else goto <D.22049>;
  <D.22048>:
  D.22050 = stack_slot_is_boxed_value (stack);
  if (D.22050 != 0) goto <D.22051>; else goto <D.22052>;
  <D.22051>:
  D.22036 = 0;
  return D.22036;
  <D.22052>:
  <D.22049>:
  if (drop_byref != 0) goto <D.22053>; else goto <D.22054>;
  <D.22053>:
  D.22055 = mono_type_get_type_byval (candidate);
  D.22036 = verify_type_compatibility_full (ctx, type, D.22055, 0);
  return D.22036;
  <D.22054>:
  D.22036 = verify_type_compatibility_full (ctx, type, candidate, 0);
  return D.22036;
}


stack_slot_is_null_literal (struct ILStackDesc * value)
{
  gboolean D.22057;
  int D.22058;
  int D.22059;
  _Bool D.22060;

  D.22058 = value->stype;
  D.22059 = D.22058 & 1024;
  D.22060 = D.22059 != 0;
  D.22057 = (gboolean) D.22060;
  return D.22057;
}


mono_type_get_type_byval (struct MonoType * type)
{
  unsigned char D.22062;
  unsigned char D.22063;
  struct MonoType * D.22066;
  struct MonoClass * D.22067;

  D.22062 = BIT_FIELD_REF <*type, 8, 88>;
  D.22063 = D.22062 & 64;
  if (D.22063 == 0) goto <D.22064>; else goto <D.22065>;
  <D.22064>:
  D.22066 = type;
  return D.22066;
  <D.22065>:
  D.22067 = mono_class_from_mono_type (type);
  D.22066 = &D.22067->byval_arg;
  return D.22066;
}


verify_type_compatibility_full (struct VerifyContext * ctx, struct MonoType * target, struct MonoType * candidate, gboolean strict)
{
  unsigned char D.22069;
  unsigned char D.22070;
  unsigned char D.22071;
  unsigned char D.22072;
  int D.22075;
  unsigned char D.22078;
  int D.22083;
  int D.22085;
  int D.22086;
  unsigned int D.22087;
  gchar * D.22088;
  struct GSList * D.22089;
  struct GSList * D.22090;
  int D.22091;
  gboolean D.22094;
  <unnamed-unsigned:1> D.22095;
  int D.22096;
  unsigned char D.22097;
  int D.22098;
  unsigned char D.22099;
  _Bool D.22100;
  unsigned char D.22103;
  unsigned char D.22104;
  _Bool D.22105;
  _Bool D.22106;
  _Bool D.22107;
  unsigned char D.22110;
  unsigned char D.22111;
  _Bool D.22112;
  _Bool D.22113;
  _Bool D.22114;
  unsigned char D.22115;
  _Bool D.22116;
  unsigned char D.22117;
  _Bool D.22118;
  int D.22121;
  _Bool D.22122;
  int iftmp.38;
  int D.22128;
  unsigned char D.22129;
  _Bool D.22130;
  _Bool D.22133;
  unsigned char D.22134;
  _Bool D.22135;
  int D.22138;
  _Bool D.22139;
  int iftmp.39;
  int D.22145;
  struct MonoType * D.22148;
  struct MonoType * D.22149;
  int iftmp.40;
  int D.22155;
  unsigned char D.22157;
  unsigned char D.22158;
  unsigned char D.22159;
  unsigned char D.22160;
  int D.22162;
  int D.22167;
  int D.22170;
  int D.22173;
  _Bool D.22176;
  _Bool D.22177;
  int D.22178;
  struct MonoClass * D.22183;
  struct MonoClass * D.22184;
  _Bool D.22189;
  int D.22194;
  struct MonoGenericParam * D.22201;
  short unsigned int D.22202;
  struct MonoGenericParam * D.22203;
  short unsigned int D.22204;
  _Bool D.22205;
  struct MonoType * original_candidate;
  void handle_enum = <<< error >>>;

  original_candidate = candidate;
  D.22069 = BIT_FIELD_REF <*candidate, 8, 88>;
  D.22070 = BIT_FIELD_REF <*target, 8, 88>;
  D.22071 = D.22069 ^ D.22070;
  D.22072 = D.22071 & 64;
  if (D.22072 != 0) goto <D.22073>; else goto <D.22074>;
  <D.22073>:
  D.22075 = get_stack_type (candidate);
  if (D.22075 == 3) goto <D.22076>; else goto <D.22077>;
  <D.22076>:
  D.22070 = BIT_FIELD_REF <*target, 8, 88>;
  D.22078 = D.22070 & 64;
  if (D.22078 != 0) goto <D.22079>; else goto <D.22080>;
  <D.22079>:
  D.22083 = ctx->verifiable;
  if (D.22083 != 0) goto <D.22081>; else goto <D.22084>;
  <D.22084>:
  D.22085 = ctx->level;
  D.22086 = D.22085 & 128;
  if (D.22086 != 0) goto <D.22081>; else goto <D.22082>;
  <D.22081>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22087 = ctx->ip_offset;
    D.22088 = monoeg_g_strdup_printf ("using byref native int at 0x%04x", D.22087);
    vinfo->info.message = D.22088;
    vinfo->exception_type = 4;
    D.22089 = ctx->list;
    D.22090 = monoeg_g_slist_prepend (D.22089, vinfo);
    ctx->list = D.22090;
  }
  ctx->verifiable = 0;
  D.22085 = ctx->level;
  D.22091 = D.22085 & 16;
  if (D.22091 != 0) goto <D.22092>; else goto <D.22093>;
  <D.22092>:
  ctx->valid = 0;
  <D.22093>:
  <D.22082>:
  D.22094 = 1;
  return D.22094;
  <D.22080>:
  <D.22077>:
  D.22094 = 0;
  return D.22094;
  <D.22074>:
  D.22095 = target->byref;
  D.22096 = (int) D.22095;
  strict = D.22096 | strict;
  candidate = mono_type_get_underlying_type_any (candidate);
  handle_enum:
  D.22097 = target->type;
  D.22098 = (int) D.22097;
  switch (D.22098) <default: <D.18554>, case 1: <D.18515>, case 2: <D.18518>, case 3: <D.18521>, case 4: <D.18516>, case 5: <D.18517>, case 6: <D.18519>, case 7: <D.18520>, case 8: <D.18522>, case 9: <D.18523>, case 10: <D.18526>, case 11: <D.18527>, case 12: <D.18528>, case 13: <D.18529>, case 14: <D.18541>, case 15: <D.18534>, case 17: <D.18549>, case 18: <D.18542>, case 19: <D.18552>, case 20: <D.18547>, case 21: <D.18538>, case 22: <D.18548>, case 24: <D.18530>, case 25: <D.18531>, case 27: <D.18535>, case 28: <D.18543>, case 29: <D.18544>, case 30: <D.18553>>
  <D.18515>:
  D.22099 = candidate->type;
  D.22100 = D.22099 == 1;
  D.22094 = (gboolean) D.22100;
  return D.22094;
  <D.18516>:
  <D.18517>:
  <D.18518>:
  if (strict != 0) goto <D.22101>; else goto <D.22102>;
  <D.22101>:
  D.22103 = candidate->type;
  D.22104 = D.22103 + 252;
  D.22105 = D.22104 <= 1;
  D.22106 = D.22103 == 2;
  D.22107 = D.22105 | D.22106;
  D.22094 = (gboolean) D.22107;
  return D.22094;
  <D.22102>:
  <D.18519>:
  <D.18520>:
  <D.18521>:
  if (strict != 0) goto <D.22108>; else goto <D.22109>;
  <D.22108>:
  D.22110 = candidate->type;
  D.22111 = D.22110 + 250;
  D.22112 = D.22111 <= 1;
  D.22113 = D.22110 == 3;
  D.22114 = D.22112 | D.22113;
  D.22094 = (gboolean) D.22114;
  return D.22094;
  <D.22109>:
  <D.18522>:
  <D.18523>:
  {
    gboolean is_native_int;
    gboolean is_int4;

    D.22099 = candidate->type;
    D.22115 = D.22099 + 232;
    D.22116 = D.22115 <= 1;
    is_native_int = (gboolean) D.22116;
    D.22099 = candidate->type;
    D.22117 = D.22099 + 248;
    D.22118 = D.22117 <= 1;
    is_int4 = (gboolean) D.22118;
    if (strict != 0) goto <D.22119>; else goto <D.22120>;
    <D.22119>:
    D.22121 = is_native_int | is_int4;
    D.22122 = D.22121 != 0;
    D.22094 = (gboolean) D.22122;
    return D.22094;
    <D.22120>:
    if (is_native_int != 0) goto <D.22124>; else goto <D.22127>;
    <D.22127>:
    D.22128 = get_stack_type (candidate);
    if (D.22128 == 1) goto <D.22124>; else goto <D.22125>;
    <D.22124>:
    iftmp.38 = 1;
    goto <D.22126>;
    <D.22125>:
    iftmp.38 = 0;
    <D.22126>:
    D.22094 = iftmp.38;
    return D.22094;
  }
  <D.18526>:
  <D.18527>:
  D.22099 = candidate->type;
  D.22129 = D.22099 + 246;
  D.22130 = D.22129 <= 1;
  D.22094 = (gboolean) D.22130;
  return D.22094;
  <D.18528>:
  <D.18529>:
  if (strict != 0) goto <D.22131>; else goto <D.22132>;
  <D.22131>:
  D.22099 = candidate->type;
  D.22097 = target->type;
  D.22133 = D.22099 == D.22097;
  D.22094 = (gboolean) D.22133;
  return D.22094;
  <D.22132>:
  D.22099 = candidate->type;
  D.22134 = D.22099 + 244;
  D.22135 = D.22134 <= 1;
  D.22094 = (gboolean) D.22135;
  return D.22094;
  <D.18530>:
  <D.18531>:
  {
    gboolean is_native_int;
    gboolean is_int4;

    D.22099 = candidate->type;
    D.22115 = D.22099 + 232;
    D.22116 = D.22115 <= 1;
    is_native_int = (gboolean) D.22116;
    D.22099 = candidate->type;
    D.22117 = D.22099 + 248;
    D.22118 = D.22117 <= 1;
    is_int4 = (gboolean) D.22118;
    if (strict != 0) goto <D.22136>; else goto <D.22137>;
    <D.22136>:
    D.22138 = is_native_int | is_int4;
    D.22139 = D.22138 != 0;
    D.22094 = (gboolean) D.22139;
    return D.22094;
    <D.22137>:
    if (is_native_int != 0) goto <D.22141>; else goto <D.22144>;
    <D.22144>:
    D.22145 = get_stack_type (candidate);
    if (D.22145 == 1) goto <D.22141>; else goto <D.22142>;
    <D.22141>:
    iftmp.39 = 1;
    goto <D.22143>;
    <D.22142>:
    iftmp.39 = 0;
    <D.22143>:
    D.22094 = iftmp.39;
    return D.22094;
  }
  <D.18534>:
  D.22099 = candidate->type;
  if (D.22099 != 15) goto <D.22146>; else goto <D.22147>;
  <D.22146>:
  D.22094 = 0;
  return D.22094;
  <D.22147>:
  D.22148 = candidate->data.type;
  D.22149 = target->data.type;
  D.22094 = verify_type_compatibility_full (ctx, D.22149, D.22148, 1);
  return D.22094;
  <D.18535>:
  {
    struct MonoMethodSignature * left;
    struct MonoMethodSignature * right;

    D.22099 = candidate->type;
    if (D.22099 != 27) goto <D.22150>; else goto <D.22151>;
    <D.22150>:
    D.22094 = 0;
    return D.22094;
    <D.22151>:
    left = mono_type_get_signature (target);
    right = mono_type_get_signature (candidate);
    D.22155 = mono_metadata_signature_equal (left, right);
    if (D.22155 != 0) goto <D.22156>; else goto <D.22153>;
    <D.22156>:
    D.22157 = BIT_FIELD_REF <*left, 8, 112>;
    D.22158 = BIT_FIELD_REF <*right, 8, 112>;
    D.22159 = D.22157 ^ D.22158;
    D.22160 = D.22159 & 63;
    if (D.22160 == 0) goto <D.22161>; else goto <D.22153>;
    <D.22161>:
    iftmp.40 = 1;
    goto <D.22154>;
    <D.22153>:
    iftmp.40 = 0;
    <D.22154>:
    D.22094 = iftmp.40;
    return D.22094;
  }
  <D.18538>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    D.22162 = mono_type_is_enum_type (target);
    if (D.22162 != 0) goto <D.22163>; else goto <D.22164>;
    <D.22163>:
    target = mono_type_get_underlying_type_any (target);
    if (target == 0B) goto <D.22165>; else goto <D.22166>;
    <D.22165>:
    D.22094 = 0;
    return D.22094;
    <D.22166>:
    goto handle_enum;
    <D.22164>:
    D.22167 = mono_type_is_generic_argument (original_candidate);
    if (D.22167 != 0) goto <D.22168>; else goto <D.22169>;
    <D.22168>:
    D.22094 = 0;
    return D.22094;
    <D.22169>:
    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    D.22170 = mono_class_is_nullable (target_klass);
    if (D.22170 != 0) goto <D.22171>; else goto <D.22172>;
    <D.22171>:
    D.22173 = mono_class_is_nullable (candidate_klass);
    if (D.22173 == 0) goto <D.22174>; else goto <D.22175>;
    <D.22174>:
    D.22094 = 0;
    return D.22094;
    <D.22175>:
    D.22176 = target_klass == candidate_klass;
    D.22094 = (gboolean) D.22176;
    return D.22094;
    <D.22172>:
    D.22094 = verifier_class_is_assignable_from (target_klass, candidate_klass);
    return D.22094;
  }
  <D.18541>:
  D.22099 = candidate->type;
  D.22177 = D.22099 == 14;
  D.22094 = (gboolean) D.22177;
  return D.22094;
  <D.18542>:
  D.22178 = mono_type_is_generic_argument (original_candidate);
  if (D.22178 != 0) goto <D.22179>; else goto <D.22180>;
  <D.22179>:
  D.22094 = 0;
  return D.22094;
  <D.22180>:
  D.22099 = candidate->type;
  if (D.22099 == 17) goto <D.22181>; else goto <D.22182>;
  <D.22181>:
  D.22094 = 0;
  return D.22094;
  <D.22182>:
  D.22183 = mono_class_from_mono_type (original_candidate);
  D.22184 = target->data.klass;
  D.22094 = verifier_class_is_assignable_from (D.22184, D.22183);
  return D.22094;
  <D.18543>:
  D.22094 = mono_type_is_reference (candidate);
  return D.22094;
  <D.18544>:
  {
    struct MonoClass * left;
    struct MonoClass * right;

    D.22099 = candidate->type;
    if (D.22099 != 29) goto <D.22185>; else goto <D.22186>;
    <D.22185>:
    D.22094 = 0;
    return D.22094;
    <D.22186>:
    left = mono_class_from_mono_type (target);
    right = mono_class_from_mono_type (candidate);
    D.22094 = verifier_class_is_assignable_from (left, right);
    return D.22094;
  }
  <D.18547>:
  D.22099 = candidate->type;
  if (D.22099 != 20) goto <D.22187>; else goto <D.22188>;
  <D.22187>:
  D.22094 = 0;
  return D.22094;
  <D.22188>:
  D.22094 = is_array_type_compatible (target, candidate);
  return D.22094;
  <D.18548>:
  D.22099 = candidate->type;
  D.22189 = D.22099 == 22;
  D.22094 = (gboolean) D.22189;
  return D.22094;
  <D.18549>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    D.22099 = candidate->type;
    if (D.22099 == 18) goto <D.22190>; else goto <D.22191>;
    <D.22190>:
    D.22094 = 0;
    return D.22094;
    <D.22191>:
    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    if (target_klass == candidate_klass) goto <D.22192>; else goto <D.22193>;
    <D.22192>:
    D.22094 = 1;
    return D.22094;
    <D.22193>:
    D.22194 = mono_type_is_enum_type (target);
    if (D.22194 != 0) goto <D.22195>; else goto <D.22196>;
    <D.22195>:
    target = mono_type_get_underlying_type_any (target);
    if (target == 0B) goto <D.22197>; else goto <D.22198>;
    <D.22197>:
    D.22094 = 0;
    return D.22094;
    <D.22198>:
    goto handle_enum;
    <D.22196>:
    D.22094 = 0;
    return D.22094;
  }
  <D.18552>:
  D.22099 = candidate->type;
  if (D.22099 != 19) goto <D.22199>; else goto <D.22200>;
  <D.22199>:
  D.22094 = 0;
  return D.22094;
  <D.22200>:
  D.22201 = candidate->data.generic_param;
  D.22202 = D.22201->num;
  D.22203 = target->data.generic_param;
  D.22204 = D.22203->num;
  D.22205 = D.22202 == D.22204;
  D.22094 = (gboolean) D.22205;
  return D.22094;
  <D.18553>:
  D.22099 = candidate->type;
  if (D.22099 != 30) goto <D.22206>; else goto <D.22207>;
  <D.22206>:
  D.22094 = 0;
  return D.22094;
  <D.22207>:
  D.22201 = candidate->data.generic_param;
  D.22202 = D.22201->num;
  D.22203 = target->data.generic_param;
  D.22204 = D.22203->num;
  D.22205 = D.22202 == D.22204;
  D.22094 = (gboolean) D.22205;
  return D.22094;
  <D.18554>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "verify.c", 2389);
  D.22094 = 0;
  return D.22094;
  D.22094 = 1;
  return D.22094;
}


stack_slot_is_boxed_value (struct ILStackDesc * value)
{
  gboolean D.22209;
  int D.22210;
  int D.22211;
  _Bool D.22212;

  D.22210 = value->stype;
  D.22211 = D.22210 & 4096;
  D.22212 = D.22211 != 0;
  D.22209 = (gboolean) D.22212;
  return D.22209;
}


is_compatible_boxed_valuetype (struct VerifyContext * ctx, struct MonoType * type, struct MonoType * candidate, struct ILStackDesc * stack, gboolean strict)
{
  int D.22214;
  gboolean D.22217;
  unsigned char D.22220;
  unsigned char D.22221;
  unsigned char D.22223;
  unsigned char D.22224;
  int D.22225;
  struct MonoGenericParamInfo * iftmp.41;
  struct MonoGenericContainer * D.22231;
  struct MonoClass * D.22235;
  int D.22236;
  int D.22240;
  int iftmp.42;
  int D.22248;
  struct MonoClass * D.22250;
  struct MonoClass * D.22251;
  int D.22252;

  D.22214 = stack_slot_is_boxed_value (stack);
  if (D.22214 == 0) goto <D.22215>; else goto <D.22216>;
  <D.22215>:
  D.22217 = 0;
  return D.22217;
  <D.22216>:
  D.22220 = BIT_FIELD_REF <*type, 8, 88>;
  D.22221 = D.22220 & 64;
  if (D.22221 != 0) goto <D.22218>; else goto <D.22222>;
  <D.22222>:
  D.22223 = BIT_FIELD_REF <*candidate, 8, 88>;
  D.22224 = D.22223 & 64;
  if (D.22224 != 0) goto <D.22218>; else goto <D.22219>;
  <D.22218>:
  D.22217 = 0;
  return D.22217;
  <D.22219>:
  D.22225 = mono_type_is_generic_argument (candidate);
  if (D.22225 != 0) goto <D.22226>; else goto <D.22227>;
  <D.22226>:
  {
    struct MonoGenericParam * param;
    struct MonoClass * * class;

    param = get_generic_param (ctx, candidate);
    if (param == 0B) goto <D.22228>; else goto <D.22229>;
    <D.22228>:
    D.22217 = 0;
    return D.22217;
    <D.22229>:
    D.22231 = param->owner;
    if (D.22231 != 0B) goto <D.22232>; else goto <D.22233>;
    <D.22232>:
    iftmp.41 = &MEM[(struct MonoGenericParamFull *)param].info;
    goto <D.22234>;
    <D.22233>:
    iftmp.41 = 0B;
    <D.22234>:
    class = iftmp.41->constraints;
    goto <D.18589>;
    <D.18588>:
    D.22235 = *class;
    D.22236 = recursive_boxed_constraint_type_check (ctx, type, D.22235, 256);
    if (D.22236 != 0) goto <D.22237>; else goto <D.22238>;
    <D.22237>:
    D.22217 = 1;
    return D.22217;
    <D.22238>:
    class = class + 8;
    <D.18589>:
    if (class != 0B) goto <D.22239>; else goto <D.18590>;
    <D.22239>:
    D.22235 = *class;
    if (D.22235 != 0B) goto <D.18588>; else goto <D.18590>;
    <D.18590>:
  }
  <D.22227>:
  D.22240 = mono_type_is_generic_argument (type);
  if (D.22240 != 0) goto <D.22241>; else goto <D.22242>;
  <D.22241>:
  D.22217 = 0;
  return D.22217;
  <D.22242>:
  if (strict == 0) goto <D.22243>; else goto <D.22244>;
  <D.22243>:
  D.22217 = 1;
  return D.22217;
  <D.22244>:
  D.22248 = mono_type_is_reference (type);
  if (D.22248 != 0) goto <D.22249>; else goto <D.22246>;
  <D.22249>:
  D.22250 = mono_class_from_mono_type (candidate);
  D.22251 = mono_class_from_mono_type (type);
  D.22252 = verifier_class_is_assignable_from (D.22251, D.22250);
  if (D.22252 != 0) goto <D.22253>; else goto <D.22246>;
  <D.22253>:
  iftmp.42 = 1;
  goto <D.22247>;
  <D.22246>:
  iftmp.42 = 0;
  <D.22247>:
  D.22217 = iftmp.42;
  return D.22217;
}


get_generic_param (struct VerifyContext * ctx, struct MonoType * param)
{
  struct MonoGenericParam * D.22255;
  unsigned char D.22256;
  struct MonoGenericContext * D.22261;
  struct MonoGenericInst * D.22262;
  <unnamed-unsigned:22> D.22264;
  int D.22265;
  int D.22266;
  gchar * D.22267;
  struct GSList * D.22268;
  struct GSList * D.22269;
  struct MonoGenericParam * D.22270;
  struct MonoType * D.22271;
  struct MonoGenericInst * D.22274;
  <unnamed-unsigned:22> D.22276;
  int D.22277;
  gchar * D.22278;
  struct GSList * D.22279;
  struct MonoType * D.22280;
  guint16 param_num;

  D.22255 = param->data.generic_param;
  param_num = D.22255->num;
  D.22256 = param->type;
  if (D.22256 == 19) goto <D.22257>; else goto <D.22258>;
  <D.22257>:
  D.22261 = ctx->generic_context;
  D.22262 = D.22261->class_inst;
  if (D.22262 == 0B) goto <D.22259>; else goto <D.22263>;
  <D.22263>:
  D.22261 = ctx->generic_context;
  D.22262 = D.22261->class_inst;
  D.22264 = D.22262->type_argc;
  D.22265 = (int) D.22264;
  D.22266 = (int) param_num;
  if (D.22265 <= D.22266) goto <D.22259>; else goto <D.22260>;
  <D.22259>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.22266 = (int) param_num;
    D.22267 = monoeg_g_strdup_printf ("Invalid generic type argument %d", D.22266);
    vinfo->info.message = D.22267;
    vinfo->exception_type = 3;
    D.22268 = ctx->list;
    D.22269 = monoeg_g_slist_prepend (D.22268, vinfo);
    ctx->list = D.22269;
  }
  ctx->valid = 0;
  D.22270 = 0B;
  return D.22270;
  <D.22260>:
  D.22261 = ctx->generic_context;
  D.22262 = D.22261->class_inst;
  D.22266 = (int) param_num;
  D.22271 = D.22262->type_argv[D.22266];
  D.22270 = D.22271->data.generic_param;
  return D.22270;
  <D.22258>:
  D.22261 = ctx->generic_context;
  D.22274 = D.22261->method_inst;
  if (D.22274 == 0B) goto <D.22272>; else goto <D.22275>;
  <D.22275>:
  D.22261 = ctx->generic_context;
  D.22274 = D.22261->method_inst;
  D.22276 = D.22274->type_argc;
  D.22277 = (int) D.22276;
  D.22266 = (int) param_num;
  if (D.22277 <= D.22266) goto <D.22272>; else goto <D.22273>;
  <D.22272>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.22266 = (int) param_num;
    D.22278 = monoeg_g_strdup_printf ("Invalid generic method argument %d", D.22266);
    vinfo->info.message = D.22278;
    vinfo->exception_type = 3;
    D.22268 = ctx->list;
    D.22279 = monoeg_g_slist_prepend (D.22268, vinfo);
    ctx->list = D.22279;
  }
  ctx->valid = 0;
  D.22270 = 0B;
  return D.22270;
  <D.22273>:
  D.22261 = ctx->generic_context;
  D.22274 = D.22261->method_inst;
  D.22266 = (int) param_num;
  D.22280 = D.22274->type_argv[D.22266];
  D.22270 = D.22280->data.generic_param;
  return D.22270;
}


recursive_boxed_constraint_type_check (struct VerifyContext * ctx, struct MonoType * type, struct MonoClass * constraint_class, int recursion_level)
{
  gboolean D.22284;
  struct MonoType * D.22285;
  int D.22286;
  int D.22289;
  struct MonoGenericParamInfo * iftmp.43;
  struct MonoGenericContainer * D.22295;
  int D.22299;
  struct MonoClass * D.22300;
  int D.22301;
  struct MonoType * constraint_type;

  constraint_type = &constraint_class->byval_arg;
  if (recursion_level <= 0) goto <D.22282>; else goto <D.22283>;
  <D.22282>:
  D.22284 = 0;
  return D.22284;
  <D.22283>:
  D.22285 = mono_type_get_type_byval (constraint_type);
  D.22286 = verify_type_compatibility_full (ctx, type, D.22285, 0);
  if (D.22286 != 0) goto <D.22287>; else goto <D.22288>;
  <D.22287>:
  D.22284 = 1;
  return D.22284;
  <D.22288>:
  D.22289 = mono_type_is_generic_argument (constraint_type);
  if (D.22289 != 0) goto <D.22290>; else goto <D.22291>;
  <D.22290>:
  {
    struct MonoGenericParam * param;
    struct MonoClass * * class;

    param = get_generic_param (ctx, constraint_type);
    if (param == 0B) goto <D.22292>; else goto <D.22293>;
    <D.22292>:
    D.22284 = 0;
    return D.22284;
    <D.22293>:
    D.22295 = param->owner;
    if (D.22295 != 0B) goto <D.22296>; else goto <D.22297>;
    <D.22296>:
    iftmp.43 = &MEM[(struct MonoGenericParamFull *)param].info;
    goto <D.22298>;
    <D.22297>:
    iftmp.43 = 0B;
    <D.22298>:
    class = iftmp.43->constraints;
    goto <D.18577>;
    <D.18576>:
    D.22299 = recursion_level + -1;
    D.22300 = *class;
    D.22301 = recursive_boxed_constraint_type_check (ctx, type, D.22300, D.22299);
    if (D.22301 != 0) goto <D.22302>; else goto <D.22303>;
    <D.22302>:
    D.22284 = 1;
    return D.22284;
    <D.22303>:
    class = class + 8;
    <D.18577>:
    if (class != 0B) goto <D.22304>; else goto <D.18578>;
    <D.22304>:
    D.22300 = *class;
    if (D.22300 != 0B) goto <D.18576>; else goto <D.18578>;
    <D.18578>:
  }
  <D.22291>:
  D.22284 = 0;
  return D.22284;
}


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

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


stack_slot_stack_type_full_name (struct ILStackDesc * value)
{
  int D.22309;
  int D.22310;
  int D.22313;
  int D.22318;
  int D.22323;
  int D.22328;
  int D.22333;
  struct MonoType * D.22338;
  int D.22339;
  int D.22342;
  const char * D.22351;
  char * D.22352;
  struct GString * str;
  char * result;
  gboolean has_pred;
  gboolean first;

  str = monoeg_g_string_new ("");
  has_pred = 0;
  first = 1;
  D.22309 = value->stype;
  D.22310 = D.22309 & 15;
  D.22309 = value->stype;
  if (D.22310 != D.22309) goto <D.22311>; else goto <D.22312>;
  <D.22311>:
  monoeg_g_string_append (str, "[");
  D.22313 = stack_slot_is_this_pointer (value);
  if (D.22313 != 0) goto <D.22314>; else goto <D.22315>;
  <D.22314>:
  if (first == 0) goto <D.22316>; else goto <D.22317>;
  <D.22316>:
  monoeg_g_string_append (str, ", ");
  <D.22317>:
  monoeg_g_string_append (str, "this");
  first = 0;
  <D.22315>:
  D.22318 = stack_slot_is_boxed_value (value);
  if (D.22318 != 0) goto <D.22319>; else goto <D.22320>;
  <D.22319>:
  if (first == 0) goto <D.22321>; else goto <D.22322>;
  <D.22321>:
  monoeg_g_string_append (str, ", ");
  <D.22322>:
  monoeg_g_string_append (str, "boxed");
  first = 0;
  <D.22320>:
  D.22323 = stack_slot_is_null_literal (value);
  if (D.22323 != 0) goto <D.22324>; else goto <D.22325>;
  <D.22324>:
  if (first == 0) goto <D.22326>; else goto <D.22327>;
  <D.22326>:
  monoeg_g_string_append (str, ", ");
  <D.22327>:
  monoeg_g_string_append (str, "null");
  first = 0;
  <D.22325>:
  D.22328 = stack_slot_is_managed_mutability_pointer (value);
  if (D.22328 != 0) goto <D.22329>; else goto <D.22330>;
  <D.22329>:
  if (first == 0) goto <D.22331>; else goto <D.22332>;
  <D.22331>:
  monoeg_g_string_append (str, ", ");
  <D.22332>:
  monoeg_g_string_append (str, "cmmp");
  first = 0;
  <D.22330>:
  D.22333 = stack_slot_is_managed_pointer (value);
  if (D.22333 != 0) goto <D.22334>; else goto <D.22335>;
  <D.22334>:
  if (first == 0) goto <D.22336>; else goto <D.22337>;
  <D.22336>:
  monoeg_g_string_append (str, ", ");
  <D.22337>:
  monoeg_g_string_append (str, "mp");
  first = 0;
  <D.22335>:
  has_pred = 1;
  <D.22312>:
  D.22338 = value->type;
  D.22339 = mono_type_is_generic_argument (D.22338);
  if (D.22339 != 0) goto <D.22340>; else goto <D.22341>;
  <D.22340>:
  D.22342 = stack_slot_is_boxed_value (value);
  if (D.22342 == 0) goto <D.22343>; else goto <D.22344>;
  <D.22343>:
  if (has_pred == 0) goto <D.22345>; else goto <D.22346>;
  <D.22345>:
  monoeg_g_string_append (str, "[");
  <D.22346>:
  if (first == 0) goto <D.22347>; else goto <D.22348>;
  <D.22347>:
  monoeg_g_string_append (str, ", ");
  <D.22348>:
  monoeg_g_string_append (str, "unboxed");
  has_pred = 1;
  <D.22344>:
  <D.22341>:
  if (has_pred != 0) goto <D.22349>; else goto <D.22350>;
  <D.22349>:
  monoeg_g_string_append (str, "] ");
  <D.22350>:
  D.22351 = stack_slot_get_name (value);
  monoeg_g_string_append (str, D.22351);
  result = str->str;
  monoeg_g_string_free (str, 0);
  D.22352 = result;
  return D.22352;
}


stack_slot_is_this_pointer (struct ILStackDesc * value)
{
  gboolean D.22354;
  int D.22355;
  int D.22356;
  _Bool D.22357;

  D.22355 = value->stype;
  D.22356 = D.22355 & 2048;
  D.22357 = D.22356 != 0;
  D.22354 = (gboolean) D.22357;
  return D.22354;
}


stack_slot_is_managed_mutability_pointer (struct ILStackDesc * value)
{
  gboolean D.22359;
  int D.22360;
  int D.22361;
  _Bool D.22362;

  D.22360 = value->stype;
  D.22361 = D.22360 & 512;
  D.22362 = D.22361 != 0;
  D.22359 = (gboolean) D.22362;
  return D.22359;
}


stack_slot_get_name (struct ILStackDesc * value)
{
  const char * D.22364;
  int D.22365;
  int D.22366;

  D.22365 = value->stype;
  D.22366 = D.22365 & 15;
  D.22364 = type_names[D.22366];
  return D.22364;
}


stack_slot_is_managed_pointer (struct ILStackDesc * value)
{
  gboolean D.22368;
  int D.22369;
  int D.22370;
  _Bool D.22371;

  D.22369 = value->stype;
  D.22370 = D.22369 & 256;
  D.22371 = D.22370 != 0;
  D.22368 = (gboolean) D.22371;
  return D.22368;
}


do_binop (struct VerifyContext * ctx, unsigned int opcode, const unsigned char[6] * table)
{
  int D.22373;
  int D.22376;
  int D.22379;
  long unsigned int D.22382;
  long unsigned int D.22383;
  const unsigned char[6] * D.22384;
  int D.22389;
  int D.22391;
  int D.22392;
  const char * D.22393;
  const char * D.22394;
  gchar * D.22395;
  struct GSList * D.22396;
  struct GSList * D.22397;
  int D.22398;
  signed char res.44;
  const char * D.22407;
  const char * D.22408;
  gchar * D.22409;
  struct GSList * D.22410;
  _Bool D.22413;
  _Bool D.22414;
  _Bool D.22415;
  int D.22424;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  struct ILStackDesc * top;
  int idxa;
  int idxb;
  int complexMerge;
  unsigned char res;

  complexMerge = 0;
  D.22373 = check_underflow (ctx, 2);
  if (D.22373 == 0) goto <D.22374>; else goto <D.22375>;
  <D.22374>:
  return;
  <D.22375>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  idxa = stack_slot_get_underlying_type (a);
  D.22376 = stack_slot_is_managed_pointer (a);
  if (D.22376 != 0) goto <D.22377>; else goto <D.22378>;
  <D.22377>:
  idxa = 5;
  complexMerge = 1;
  <D.22378>:
  idxb = stack_slot_get_underlying_type (b);
  D.22379 = stack_slot_is_managed_pointer (b);
  if (D.22379 != 0) goto <D.22380>; else goto <D.22381>;
  <D.22380>:
  idxb = 5;
  complexMerge = 2;
  <D.22381>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  D.22382 = (long unsigned int) idxa;
  D.22383 = D.22382 * 6;
  D.22384 = table + D.22383;
  res = *D.22384[idxb];
  top = stack_push (ctx);
  if (res == 0) goto <D.22385>; else goto <D.22386>;
  <D.22385>:
  D.22389 = ctx->verifiable;
  if (D.22389 != 0) goto <D.22387>; else goto <D.22390>;
  <D.22390>:
  D.22391 = ctx->level;
  D.22392 = D.22391 & 128;
  if (D.22392 != 0) goto <D.22387>; else goto <D.22388>;
  <D.22387>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22393 = stack_slot_get_name (b);
    D.22394 = stack_slot_get_name (a);
    D.22395 = monoeg_g_strdup_printf ("Binary instruction applyed to ill formed stack (%s x %s)", D.22394, D.22393);
    vinfo->info.message = D.22395;
    vinfo->exception_type = 4;
    D.22396 = ctx->list;
    D.22397 = monoeg_g_slist_prepend (D.22396, vinfo);
    ctx->list = D.22397;
  }
  ctx->verifiable = 0;
  D.22391 = ctx->level;
  D.22398 = D.22391 & 16;
  if (D.22398 != 0) goto <D.22399>; else goto <D.22400>;
  <D.22399>:
  ctx->valid = 0;
  <D.22400>:
  <D.22388>:
  copy_stack_value (top, a);
  return;
  <D.22386>:
  res.44 = (signed char) res;
  if (res.44 < 0) goto <D.22402>; else goto <D.22403>;
  <D.22402>:
  D.22389 = ctx->verifiable;
  if (D.22389 != 0) goto <D.22404>; else goto <D.22406>;
  <D.22406>:
  D.22391 = ctx->level;
  D.22392 = D.22391 & 128;
  if (D.22392 != 0) goto <D.22404>; else goto <D.22405>;
  <D.22404>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22407 = stack_slot_get_name (b);
    D.22408 = stack_slot_get_name (a);
    D.22409 = monoeg_g_strdup_printf ("Binary instruction is not verifiable (%s x %s)", D.22408, D.22407);
    vinfo->info.message = D.22409;
    vinfo->exception_type = 4;
    D.22396 = ctx->list;
    D.22410 = monoeg_g_slist_prepend (D.22396, vinfo);
    ctx->list = D.22410;
  }
  ctx->verifiable = 0;
  D.22391 = ctx->level;
  D.22398 = D.22391 & 16;
  if (D.22398 != 0) goto <D.22411>; else goto <D.22412>;
  <D.22411>:
  ctx->valid = 0;
  <D.22412>:
  <D.22405>:
  res = res & 127;
  <D.22403>:
  D.22413 = complexMerge != 0;
  D.22414 = res == 5;
  D.22415 = D.22413 & D.22414;
  if (D.22415 != 0) goto <D.22416>; else goto <D.22417>;
  <D.22416>:
  if (complexMerge == 1) goto <D.22418>; else goto <D.22419>;
  <D.22418>:
  copy_stack_value (top, a);
  goto <D.22420>;
  <D.22419>:
  if (complexMerge == 2) goto <D.22421>; else goto <D.22422>;
  <D.22421>:
  copy_stack_value (top, b);
  <D.22422>:
  <D.22420>:
  goto <D.22423>;
  <D.22417>:
  D.22424 = (int) res;
  top->stype = D.22424;
  <D.22423>:
}


stack_pop (struct VerifyContext * ctx)
{
  short unsigned int D.22426;
  _Bool D.22427;
  long int D.22428;
  long int D.22429;
  struct ILStackDesc * D.22432;
  short unsigned int D.22433;
  long unsigned int D.22434;
  long unsigned int D.22435;
  int D.22436;
  int D.22437;
  int D.22442;
  int D.22444;
  int D.22445;
  unsigned int D.22446;
  gchar * D.22447;
  struct GSList * D.22448;
  struct GSList * D.22449;
  int D.22450;
  struct ILStackDesc * D.22453;
  struct ILStackDesc * ret;

  D.22426 = ctx->eval.size;
  D.22427 = D.22426 == 0;
  D.22428 = (long int) D.22427;
  D.22429 = __builtin_expect (D.22428, 0);
  if (D.22429 != 0) goto <D.22430>; else goto <D.22431>;
  <D.22430>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1610, "ctx->eval.size > 0");
  <D.22431>:
  D.22432 = ctx->eval.stack;
  D.22426 = ctx->eval.size;
  D.22433 = D.22426 + 65535;
  ctx->eval.size = D.22433;
  D.22426 = ctx->eval.size;
  D.22434 = (long unsigned int) D.22426;
  D.22435 = D.22434 * 24;
  ret = D.22432 + D.22435;
  D.22436 = ret->stype;
  D.22437 = D.22436 & 8192;
  if (D.22437 != 0) goto <D.22438>; else goto <D.22439>;
  <D.22438>:
  D.22442 = ctx->verifiable;
  if (D.22442 != 0) goto <D.22440>; else goto <D.22443>;
  <D.22443>:
  D.22444 = ctx->level;
  D.22445 = D.22444 & 128;
  if (D.22445 != 0) goto <D.22440>; else goto <D.22441>;
  <D.22440>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22446 = ctx->ip_offset;
    D.22447 = monoeg_g_strdup_printf ("Found use of uninitialized \'this ptr\' ref at 0x%04x", D.22446);
    vinfo->info.message = D.22447;
    vinfo->exception_type = 4;
    D.22448 = ctx->list;
    D.22449 = monoeg_g_slist_prepend (D.22448, vinfo);
    ctx->list = D.22449;
  }
  ctx->verifiable = 0;
  D.22444 = ctx->level;
  D.22450 = D.22444 & 16;
  if (D.22450 != 0) goto <D.22451>; else goto <D.22452>;
  <D.22451>:
  ctx->valid = 0;
  <D.22452>:
  <D.22441>:
  <D.22439>:
  D.22453 = ret;
  return D.22453;
}


stack_slot_get_underlying_type (struct ILStackDesc * value)
{
  gint32 D.22455;
  int D.22456;

  D.22456 = value->stype;
  D.22455 = D.22456 & 15;
  return D.22455;
}


stack_pop_safe (struct VerifyContext * ctx)
{
  short unsigned int D.22458;
  _Bool D.22459;
  long int D.22460;
  long int D.22461;
  struct ILStackDesc * D.22464;
  struct ILStackDesc * D.22465;
  short unsigned int D.22466;
  long unsigned int D.22467;
  long unsigned int D.22468;

  D.22458 = ctx->eval.size;
  D.22459 = D.22458 == 0;
  D.22460 = (long int) D.22459;
  D.22461 = __builtin_expect (D.22460, 0);
  if (D.22461 != 0) goto <D.22462>; else goto <D.22463>;
  <D.22462>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1623, "ctx->eval.size > 0");
  <D.22463>:
  D.22465 = ctx->eval.stack;
  D.22458 = ctx->eval.size;
  D.22466 = D.22458 + 65535;
  ctx->eval.size = D.22466;
  D.22458 = ctx->eval.size;
  D.22467 = (long unsigned int) D.22458;
  D.22468 = D.22467 * 24;
  D.22464 = D.22465 + D.22468;
  return D.22464;
}


do_ret (struct VerifyContext * ctx)
{
  struct MonoMethodSignature * D.22470;
  unsigned char D.22471;
  int D.22474;
  struct MonoType * D.22477;
  int D.22478;
  int D.22483;
  int D.22485;
  int D.22486;
  unsigned int D.22487;
  gchar * D.22488;
  struct GSList * D.22489;
  struct GSList * D.22490;
  int D.22491;
  unsigned char D.22496;
  unsigned char D.22497;
  int D.22500;
  int D.22502;
  gchar * D.22506;
  struct GSList * D.22507;
  short unsigned int D.22510;
  int D.22516;
  gchar * D.22517;
  struct GSList * D.22518;
  struct MonoMethodHeader * D.22521;
  int D.22522;
  gchar * D.22528;
  struct GSList * D.22529;
  struct MonoType * ret;

  D.22470 = ctx->signature;
  ret = D.22470->ret;
  D.22471 = ret->type;
  if (D.22471 != 1) goto <D.22472>; else goto <D.22473>;
  <D.22472>:
  {
    struct ILStackDesc * top;

    D.22474 = check_underflow (ctx, 1);
    if (D.22474 == 0) goto <D.22475>; else goto <D.22476>;
    <D.22475>:
    return;
    <D.22476>:
    top = stack_pop (ctx);
    D.22470 = ctx->signature;
    D.22477 = D.22470->ret;
    D.22478 = verify_stack_type_compatibility (ctx, D.22477, top);
    if (D.22478 == 0) goto <D.22479>; else goto <D.22480>;
    <D.22479>:
    {
      char * ret_type;
      char * stack_type;

      D.22470 = ctx->signature;
      D.22477 = D.22470->ret;
      ret_type = mono_type_full_name (D.22477);
      stack_type = stack_slot_full_name (top);
      D.22483 = ctx->verifiable;
      if (D.22483 != 0) goto <D.22481>; else goto <D.22484>;
      <D.22484>:
      D.22485 = ctx->level;
      D.22486 = D.22485 & 128;
      if (D.22486 != 0) goto <D.22481>; else goto <D.22482>;
      <D.22481>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.22487 = ctx->ip_offset;
        D.22488 = 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.22487);
        vinfo->info.message = D.22488;
        vinfo->exception_type = 4;
        D.22489 = ctx->list;
        D.22490 = monoeg_g_slist_prepend (D.22489, vinfo);
        ctx->list = D.22490;
      }
      ctx->verifiable = 0;
      D.22485 = ctx->level;
      D.22491 = D.22485 & 16;
      if (D.22491 != 0) goto <D.22492>; else goto <D.22493>;
      <D.22492>:
      ctx->valid = 0;
      <D.22493>:
      <D.22482>:
      monoeg_g_free (stack_type);
      monoeg_g_free (ret_type);
      return;
    }
    <D.22480>:
    D.22496 = BIT_FIELD_REF <*ret, 8, 88>;
    D.22497 = D.22496 & 64;
    if (D.22497 != 0) goto <D.22494>; else goto <D.22498>;
    <D.22498>:
    D.22471 = ret->type;
    if (D.22471 == 22) goto <D.22494>; else goto <D.22499>;
    <D.22499>:
    D.22500 = mono_type_is_value_type (ret, "System", "ArgIterator");
    if (D.22500 != 0) goto <D.22494>; else goto <D.22501>;
    <D.22501>:
    D.22502 = mono_type_is_value_type (ret, "System", "RuntimeArgumentHandle");
    if (D.22502 != 0) goto <D.22494>; else goto <D.22495>;
    <D.22494>:
    D.22483 = ctx->verifiable;
    if (D.22483 != 0) goto <D.22503>; else goto <D.22505>;
    <D.22505>:
    D.22485 = ctx->level;
    D.22486 = D.22485 & 128;
    if (D.22486 != 0) goto <D.22503>; else goto <D.22504>;
    <D.22503>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.22487 = ctx->ip_offset;
      D.22506 = monoeg_g_strdup_printf ("Method returns byref, TypedReference, ArgIterator or RuntimeArgumentHandle at 0x%04x", D.22487);
      vinfo->info.message = D.22506;
      vinfo->exception_type = 4;
      D.22489 = ctx->list;
      D.22507 = monoeg_g_slist_prepend (D.22489, vinfo);
      ctx->list = D.22507;
    }
    ctx->verifiable = 0;
    D.22485 = ctx->level;
    D.22491 = D.22485 & 16;
    if (D.22491 != 0) goto <D.22508>; else goto <D.22509>;
    <D.22508>:
    ctx->valid = 0;
    <D.22509>:
    <D.22504>:
    <D.22495>:
  }
  <D.22473>:
  D.22510 = ctx->eval.size;
  if (D.22510 != 0) goto <D.22511>; else goto <D.22512>;
  <D.22511>:
  D.22483 = ctx->verifiable;
  if (D.22483 != 0) goto <D.22513>; else goto <D.22515>;
  <D.22515>:
  D.22485 = ctx->level;
  D.22486 = D.22485 & 128;
  if (D.22486 != 0) goto <D.22513>; else goto <D.22514>;
  <D.22513>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22487 = ctx->ip_offset;
    D.22510 = ctx->eval.size;
    D.22516 = (int) D.22510;
    D.22517 = monoeg_g_strdup_printf ("Stack not empty (%d) after ret at 0x%04x", D.22516, D.22487);
    vinfo->info.message = D.22517;
    vinfo->exception_type = 4;
    D.22489 = ctx->list;
    D.22518 = monoeg_g_slist_prepend (D.22489, vinfo);
    ctx->list = D.22518;
  }
  ctx->verifiable = 0;
  D.22485 = ctx->level;
  D.22491 = D.22485 & 16;
  if (D.22491 != 0) goto <D.22519>; else goto <D.22520>;
  <D.22519>:
  ctx->valid = 0;
  <D.22520>:
  <D.22514>:
  <D.22512>:
  D.22487 = ctx->ip_offset;
  D.22521 = ctx->header;
  D.22522 = in_any_block (D.22521, D.22487);
  if (D.22522 != 0) goto <D.22523>; else goto <D.22524>;
  <D.22523>:
  D.22483 = ctx->verifiable;
  if (D.22483 != 0) goto <D.22525>; else goto <D.22527>;
  <D.22527>:
  D.22485 = ctx->level;
  D.22486 = D.22485 & 128;
  if (D.22486 != 0) goto <D.22525>; else goto <D.22526>;
  <D.22525>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22487 = ctx->ip_offset;
    D.22528 = monoeg_g_strdup_printf ("ret cannot escape exception blocks at 0x%04x", D.22487);
    vinfo->info.message = D.22528;
    vinfo->exception_type = 4;
    D.22489 = ctx->list;
    D.22529 = monoeg_g_slist_prepend (D.22489, vinfo);
    ctx->list = D.22529;
  }
  ctx->verifiable = 0;
  D.22485 = ctx->level;
  D.22491 = D.22485 & 16;
  if (D.22491 != 0) goto <D.22530>; else goto <D.22531>;
  <D.22530>:
  ctx->valid = 0;
  <D.22531>:
  <D.22526>:
  <D.22524>:
}


mono_type_is_value_type (struct MonoType * type, const char * namespace, const char * name)
{
  gboolean D.22533;
  int iftmp.45;
  unsigned char D.22537;
  int D.17896;
  struct MonoClass * D.22539;
  const char * D.22540;
  int D.17905;
  const char * D.22542;

  D.22537 = type->type;
  if (D.22537 == 17) goto <D.22538>; else goto <D.22535>;
  <D.22538>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.22539 = type->data.klass;
    D.22540 = D.22539->name_space;
    D.17896 = __builtin_strcmp (namespace, D.22540);
  }
  if (D.17896 == 0) goto <D.22541>; else goto <D.22535>;
  <D.22541>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.22539 = type->data.klass;
    D.22542 = D.22539->name;
    D.17905 = __builtin_strcmp (name, D.22542);
  }
  if (D.17905 == 0) goto <D.22543>; else goto <D.22535>;
  <D.22543>:
  iftmp.45 = 1;
  goto <D.22536>;
  <D.22535>:
  iftmp.45 = 0;
  <D.22536>:
  D.22533 = iftmp.45;
  return D.22533;
}


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

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


do_branch_op (struct VerifyContext * ctx, int delta, const unsigned char[6] * table)
{
  unsigned int D.22547;
  unsigned int delta.46;
  unsigned int D.22549;
  int D.22553;
  gchar * D.22554;
  struct GSList * D.22555;
  struct GSList * D.22556;
  unsigned int target.47;
  struct MonoMethodHeader * D.22558;
  int D.22559;
  int D.22562;
  int D.22564;
  int D.22565;
  gchar * D.22566;
  struct GSList * D.22567;
  int D.22568;
  gchar * D.22571;
  struct GSList * D.22572;
  int D.22574;
  int D.22577;
  int D.22580;
  int D.22586;
  int D.22588;
  long unsigned int D.22589;
  long unsigned int D.22590;
  const unsigned char[6] * D.22591;
  const char * D.22597;
  const char * D.22598;
  gchar * D.22599;
  struct GSList * D.22600;
  signed char res.48;
  const char * D.22610;
  const char * D.22611;
  gchar * D.22612;
  struct GSList * D.22613;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  int idxa;
  int idxb;
  unsigned char res;
  int target;

  D.22547 = ctx->ip_offset;
  delta.46 = (unsigned int) delta;
  D.22549 = D.22547 + delta.46;
  target = (int) D.22549;
  if (target < 0) goto <D.22550>; else goto <D.22552>;
  <D.22552>:
  D.22553 = ctx->code_size;
  if (D.22553 <= target) goto <D.22550>; else goto <D.22551>;
  <D.22550>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.22547 = ctx->ip_offset;
    D.22554 = monoeg_g_strdup_printf ("Branch target out of code at 0x%04x", D.22547);
    vinfo->info.message = D.22554;
    vinfo->exception_type = 3;
    D.22555 = ctx->list;
    D.22556 = monoeg_g_slist_prepend (D.22555, vinfo);
    ctx->list = D.22556;
  }
  ctx->valid = 0;
  return;
  <D.22551>:
  target.47 = (unsigned int) target;
  D.22547 = ctx->ip_offset;
  D.22558 = ctx->header;
  D.22559 = is_valid_cmp_branch_instruction (D.22558, D.22547, target.47);
  switch (D.22559) <default: <D.22573>, case 1: <D.18772>, case 2: <D.18775>>
  <D.18772>:
  D.22562 = ctx->verifiable;
  if (D.22562 != 0) goto <D.22560>; else goto <D.22563>;
  <D.22563>:
  D.22564 = ctx->level;
  D.22565 = D.22564 & 128;
  if (D.22565 != 0) goto <D.22560>; else goto <D.22561>;
  <D.22560>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22547 = ctx->ip_offset;
    D.22566 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22547);
    vinfo->info.message = D.22566;
    vinfo->exception_type = 4;
    D.22555 = ctx->list;
    D.22567 = monoeg_g_slist_prepend (D.22555, vinfo);
    ctx->list = D.22567;
  }
  ctx->verifiable = 0;
  D.22564 = ctx->level;
  D.22568 = D.22564 & 16;
  if (D.22568 != 0) goto <D.22569>; else goto <D.22570>;
  <D.22569>:
  ctx->valid = 0;
  <D.22570>:
  <D.22561>:
  goto <D.18774>;
  <D.18775>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.22547 = ctx->ip_offset;
    D.22571 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22547);
    vinfo->info.message = D.22571;
    vinfo->exception_type = 3;
    D.22555 = ctx->list;
    D.22572 = monoeg_g_slist_prepend (D.22555, vinfo);
    ctx->list = D.22572;
  }
  ctx->valid = 0;
  return;
  <D.22573>:
  <D.18774>:
  ctx->target = target;
  D.22574 = check_underflow (ctx, 2);
  if (D.22574 == 0) goto <D.22575>; else goto <D.22576>;
  <D.22575>:
  return;
  <D.22576>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  idxa = stack_slot_get_underlying_type (a);
  D.22577 = stack_slot_is_managed_pointer (a);
  if (D.22577 != 0) goto <D.22578>; else goto <D.22579>;
  <D.22578>:
  idxa = 5;
  <D.22579>:
  idxb = stack_slot_get_underlying_type (b);
  D.22580 = stack_slot_is_managed_pointer (b);
  if (D.22580 != 0) goto <D.22581>; else goto <D.22582>;
  <D.22581>:
  idxb = 5;
  <D.22582>:
  D.22586 = stack_slot_is_complex_type_not_reference_type (a);
  if (D.22586 != 0) goto <D.22583>; else goto <D.22587>;
  <D.22587>:
  D.22588 = stack_slot_is_complex_type_not_reference_type (b);
  if (D.22588 != 0) goto <D.22583>; else goto <D.22584>;
  <D.22583>:
  res = 0;
  goto <D.22585>;
  <D.22584>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  D.22589 = (long unsigned int) idxa;
  D.22590 = D.22589 * 6;
  D.22591 = table + D.22590;
  res = *D.22591[idxb];
  <D.22585>:
  if (res == 0) goto <D.22592>; else goto <D.22593>;
  <D.22592>:
  D.22562 = ctx->verifiable;
  if (D.22562 != 0) goto <D.22594>; else goto <D.22596>;
  <D.22596>:
  D.22564 = ctx->level;
  D.22565 = D.22564 & 128;
  if (D.22565 != 0) goto <D.22594>; else goto <D.22595>;
  <D.22594>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22547 = ctx->ip_offset;
    D.22597 = stack_slot_get_name (b);
    D.22598 = stack_slot_get_name (a);
    D.22599 = monoeg_g_strdup_printf ("Compare and Branch instruction applyed to ill formed stack (%s x %s) at 0x%04x", D.22598, D.22597, D.22547);
    vinfo->info.message = D.22599;
    vinfo->exception_type = 4;
    D.22555 = ctx->list;
    D.22600 = monoeg_g_slist_prepend (D.22555, vinfo);
    ctx->list = D.22600;
  }
  ctx->verifiable = 0;
  D.22564 = ctx->level;
  D.22568 = D.22564 & 16;
  if (D.22568 != 0) goto <D.22601>; else goto <D.22602>;
  <D.22601>:
  ctx->valid = 0;
  <D.22602>:
  <D.22595>:
  goto <D.22603>;
  <D.22593>:
  res.48 = (signed char) res;
  if (res.48 < 0) goto <D.22605>; else goto <D.22606>;
  <D.22605>:
  D.22562 = ctx->verifiable;
  if (D.22562 != 0) goto <D.22607>; else goto <D.22609>;
  <D.22609>:
  D.22564 = ctx->level;
  D.22565 = D.22564 & 128;
  if (D.22565 != 0) goto <D.22607>; else goto <D.22608>;
  <D.22607>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22547 = ctx->ip_offset;
    D.22610 = stack_slot_get_name (b);
    D.22611 = stack_slot_get_name (a);
    D.22612 = monoeg_g_strdup_printf ("Compare and Branch instruction is not verifiable (%s x %s) at 0x%04x", D.22611, D.22610, D.22547);
    vinfo->info.message = D.22612;
    vinfo->exception_type = 4;
    D.22555 = ctx->list;
    D.22613 = monoeg_g_slist_prepend (D.22555, vinfo);
    ctx->list = D.22613;
  }
  ctx->verifiable = 0;
  D.22564 = ctx->level;
  D.22568 = D.22564 & 16;
  if (D.22568 != 0) goto <D.22614>; else goto <D.22615>;
  <D.22614>:
  ctx->valid = 0;
  <D.22615>:
  <D.22608>:
  res = res & 127;
  <D.22606>:
  <D.22603>:
}


is_valid_cmp_branch_instruction (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.22617;
  long unsigned int D.22618;
  long unsigned int D.22619;
  unsigned int D.22622;
  unsigned int D.22625;
  unsigned int D.22628;
  unsigned int D.22629;
  int D.22633;
  unsigned int D.22634;
  int iftmp.49;
  unsigned int D.22641;
  unsigned int D.22642;
  _Bool D.22644;
  int iftmp.50;
  _Bool D.22650;
  _Bool D.22651;
  int iftmp.51;
  _Bool D.22659;
  int iftmp.52;
  _Bool D.22665;
  _Bool D.22666;
  int iftmp.53;
  unsigned int D.22673;
  _Bool D.22676;
  int iftmp.54;
  _Bool D.22683;
  _Bool D.22684;
  <unnamed-unsigned:15> D.22687;
  int D.22688;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18212>;
  <D.18211>:
  D.22617 = header->clauses;
  D.22618 = (long unsigned int) i;
  D.22619 = D.22618 * 32;
  clause = D.22617 + D.22619;
  D.22622 = clause->flags;
  if (D.22622 != 0) goto <D.22623>; else goto <D.22624>;
  <D.22623>:
  D.22625 = clause->handler_offset;
  if (D.22625 <= offset) goto <D.22626>; else goto <D.22627>;
  <D.22626>:
  D.22625 = clause->handler_offset;
  D.22628 = clause->handler_len;
  D.22629 = D.22625 + D.22628;
  if (D.22629 > offset) goto <D.22630>; else goto <D.22631>;
  <D.22630>:
  D.22625 = clause->handler_offset;
  if (D.22625 > target) goto <D.22620>; else goto <D.22632>;
  <D.22632>:
  D.22625 = clause->handler_offset;
  D.22628 = clause->handler_len;
  D.22629 = D.22625 + D.22628;
  if (D.22629 <= target) goto <D.22620>; else goto <D.22621>;
  <D.22620>:
  D.22633 = 1;
  return D.22633;
  <D.22621>:
  <D.22631>:
  <D.22627>:
  <D.22624>:
  D.22634 = clause->try_offset;
  if (D.22634 != target) goto <D.22635>; else goto <D.22636>;
  <D.22635>:
  D.22634 = clause->try_offset;
  if (D.22634 <= offset) goto <D.22640>; else goto <D.22638>;
  <D.22640>:
  D.22634 = clause->try_offset;
  D.22641 = clause->try_len;
  D.22642 = D.22634 + D.22641;
  if (D.22642 > offset) goto <D.22643>; else goto <D.22638>;
  <D.22643>:
  iftmp.49 = 1;
  goto <D.22639>;
  <D.22638>:
  iftmp.49 = 0;
  <D.22639>:
  D.22644 = (_Bool) iftmp.49;
  D.22634 = clause->try_offset;
  if (D.22634 <= target) goto <D.22648>; else goto <D.22646>;
  <D.22648>:
  D.22634 = clause->try_offset;
  D.22641 = clause->try_len;
  D.22642 = D.22634 + D.22641;
  if (D.22642 > target) goto <D.22649>; else goto <D.22646>;
  <D.22649>:
  iftmp.50 = 1;
  goto <D.22647>;
  <D.22646>:
  iftmp.50 = 0;
  <D.22647>:
  D.22650 = (_Bool) iftmp.50;
  D.22651 = D.22644 ^ D.22650;
  if (D.22651 != 0) goto <D.22652>; else goto <D.22653>;
  <D.22652>:
  D.22633 = 2;
  return D.22633;
  <D.22653>:
  <D.22636>:
  D.22625 = clause->handler_offset;
  if (D.22625 <= offset) goto <D.22657>; else goto <D.22655>;
  <D.22657>:
  D.22625 = clause->handler_offset;
  D.22628 = clause->handler_len;
  D.22629 = D.22625 + D.22628;
  if (D.22629 > offset) goto <D.22658>; else goto <D.22655>;
  <D.22658>:
  iftmp.51 = 1;
  goto <D.22656>;
  <D.22655>:
  iftmp.51 = 0;
  <D.22656>:
  D.22659 = (_Bool) iftmp.51;
  D.22625 = clause->handler_offset;
  if (D.22625 <= target) goto <D.22663>; else goto <D.22661>;
  <D.22663>:
  D.22625 = clause->handler_offset;
  D.22628 = clause->handler_len;
  D.22629 = D.22625 + D.22628;
  if (D.22629 > target) goto <D.22664>; else goto <D.22661>;
  <D.22664>:
  iftmp.52 = 1;
  goto <D.22662>;
  <D.22661>:
  iftmp.52 = 0;
  <D.22662>:
  D.22665 = (_Bool) iftmp.52;
  D.22666 = D.22659 ^ D.22665;
  if (D.22666 != 0) goto <D.22667>; else goto <D.22668>;
  <D.22667>:
  D.22633 = 2;
  return D.22633;
  <D.22668>:
  D.22622 = clause->flags;
  if (D.22622 == 1) goto <D.22672>; else goto <D.22670>;
  <D.22672>:
  D.22673 = clause->data.filter_offset;
  if (D.22673 <= offset) goto <D.22674>; else goto <D.22670>;
  <D.22674>:
  D.22625 = clause->handler_offset;
  if (D.22625 > offset) goto <D.22675>; else goto <D.22670>;
  <D.22675>:
  iftmp.53 = 1;
  goto <D.22671>;
  <D.22670>:
  iftmp.53 = 0;
  <D.22671>:
  D.22676 = (_Bool) iftmp.53;
  D.22622 = clause->flags;
  if (D.22622 == 1) goto <D.22680>; else goto <D.22678>;
  <D.22680>:
  D.22673 = clause->data.filter_offset;
  if (D.22673 <= target) goto <D.22681>; else goto <D.22678>;
  <D.22681>:
  D.22625 = clause->handler_offset;
  if (D.22625 > target) goto <D.22682>; else goto <D.22678>;
  <D.22682>:
  iftmp.54 = 1;
  goto <D.22679>;
  <D.22678>:
  iftmp.54 = 0;
  <D.22679>:
  D.22683 = (_Bool) iftmp.54;
  D.22684 = D.22676 ^ D.22683;
  if (D.22684 != 0) goto <D.22685>; else goto <D.22686>;
  <D.22685>:
  D.22633 = 2;
  return D.22633;
  <D.22686>:
  i = i + 1;
  <D.18212>:
  D.22687 = header->num_clauses;
  D.22688 = (int) D.22687;
  if (D.22688 > i) goto <D.18211>; else goto <D.18213>;
  <D.18213>:
  D.22633 = 0;
  return D.22633;
}


stack_slot_is_complex_type_not_reference_type (struct ILStackDesc * slot)
{
  gboolean D.22690;
  int iftmp.55;
  int D.22694;
  struct MonoType * D.22696;
  int D.22697;
  int D.22699;

  D.22694 = stack_slot_get_type (slot);
  if (D.22694 == 6) goto <D.22695>; else goto <D.22692>;
  <D.22695>:
  D.22696 = slot->type;
  D.22697 = mono_type_is_reference (D.22696);
  if (D.22697 == 0) goto <D.22698>; else goto <D.22692>;
  <D.22698>:
  D.22699 = stack_slot_is_boxed_value (slot);
  if (D.22699 == 0) goto <D.22700>; else goto <D.22692>;
  <D.22700>:
  iftmp.55 = 1;
  goto <D.22693>;
  <D.22692>:
  iftmp.55 = 0;
  <D.22693>:
  D.22690 = iftmp.55;
  return D.22690;
}


stack_slot_get_type (struct ILStackDesc * value)
{
  gint32 D.22702;
  int D.22703;

  D.22703 = value->stype;
  D.22702 = D.22703 & 271;
  return D.22702;
}


stack_peek (struct VerifyContext * ctx, int distance)
{
  short unsigned int D.22705;
  int D.22706;
  int D.22707;
  _Bool D.22708;
  long int D.22709;
  long int D.22710;
  struct ILStackDesc * D.22713;
  struct ILStackDesc * D.22714;
  int D.22715;
  int D.22716;
  long unsigned int D.22717;
  long unsigned int D.22718;

  D.22705 = ctx->eval.size;
  D.22706 = (int) D.22705;
  D.22707 = D.22706 - distance;
  D.22708 = D.22707 <= 0;
  D.22709 = (long int) D.22708;
  D.22710 = __builtin_expect (D.22709, 0);
  if (D.22710 != 0) goto <D.22711>; else goto <D.22712>;
  <D.22711>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1631, "ctx->eval.size - distance > 0");
  <D.22712>:
  D.22714 = ctx->eval.stack;
  D.22705 = ctx->eval.size;
  D.22706 = (int) D.22705;
  D.22715 = D.22706 + -1;
  D.22716 = D.22715 - distance;
  D.22717 = (long unsigned int) D.22716;
  D.22718 = D.22717 * 24;
  D.22713 = D.22714 + D.22718;
  return D.22713;
}


copy_stack_value (struct ILStackDesc * to, struct ILStackDesc * from)
{
  int D.22720;
  struct MonoType * D.22721;
  struct MonoMethod * D.22722;

  D.22720 = from->stype;
  to->stype = D.22720;
  D.22721 = from->type;
  to->type = D.22721;
  D.22722 = from->method;
  to->method = D.22722;
}


in_any_block (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.22723;
  long unsigned int D.22724;
  long unsigned int D.22725;
  unsigned int D.22726;
  unsigned int D.22729;
  unsigned int D.22730;
  int D.22733;
  unsigned int D.22734;
  unsigned int D.22737;
  unsigned int D.22738;
  unsigned int D.22741;
  unsigned int D.22744;
  <unnamed-unsigned:15> D.22749;
  int D.22750;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18183>;
  <D.18182>:
  D.22723 = header->clauses;
  D.22724 = (long unsigned int) i;
  D.22725 = D.22724 * 32;
  clause = D.22723 + D.22725;
  D.22726 = clause->try_offset;
  if (D.22726 <= offset) goto <D.22727>; else goto <D.22728>;
  <D.22727>:
  D.22726 = clause->try_offset;
  D.22729 = clause->try_len;
  D.22730 = D.22726 + D.22729;
  if (D.22730 > offset) goto <D.22731>; else goto <D.22732>;
  <D.22731>:
  D.22733 = 1;
  return D.22733;
  <D.22732>:
  <D.22728>:
  D.22734 = clause->handler_offset;
  if (D.22734 <= offset) goto <D.22735>; else goto <D.22736>;
  <D.22735>:
  D.22734 = clause->handler_offset;
  D.22737 = clause->handler_len;
  D.22738 = D.22734 + D.22737;
  if (D.22738 > offset) goto <D.22739>; else goto <D.22740>;
  <D.22739>:
  D.22733 = 1;
  return D.22733;
  <D.22740>:
  <D.22736>:
  D.22741 = clause->flags;
  if (D.22741 == 1) goto <D.22742>; else goto <D.22743>;
  <D.22742>:
  D.22744 = clause->data.filter_offset;
  if (D.22744 <= offset) goto <D.22745>; else goto <D.22746>;
  <D.22745>:
  D.22734 = clause->handler_offset;
  if (D.22734 > offset) goto <D.22747>; else goto <D.22748>;
  <D.22747>:
  D.22733 = 1;
  return D.22733;
  <D.22748>:
  <D.22746>:
  <D.22743>:
  i = i + 1;
  <D.18183>:
  D.22749 = header->num_clauses;
  D.22750 = (int) D.22749;
  if (D.22750 > i) goto <D.18182>; else goto <D.18184>;
  <D.18184>:
  D.22733 = 0;
  return D.22733;
}


do_invoke_method (struct VerifyContext * ctx, int method_token, gboolean virtual)
{
  unsigned int D.22752;
  int D.22753;
  const char * iftmp.56;
  unsigned int D.22762;
  struct MonoClass * D.22763;
  unsigned char D.22764;
  unsigned char D.22765;
  int D.22770;
  int D.22772;
  int D.22773;
  unsigned int D.22774;
  gchar * D.22775;
  struct GSList * D.22776;
  struct GSList * D.22777;
  int D.22778;
  short unsigned int D.22781;
  int D.22782;
  int D.22783;
  gchar * D.22789;
  struct GSList * D.22790;
  int D.22794;
  gchar * D.22800;
  struct GSList * D.22801;
  unsigned int D.22804;
  unsigned int D.22805;
  unsigned int D.22808;
  unsigned int D.22809;
  struct ILCodeDesc * D.22812;
  long unsigned int D.22813;
  long unsigned int D.22814;
  struct ILCodeDesc * D.22815;
  short unsigned int D.22816;
  short unsigned int D.22817;
  struct MonoGenericContext * D.22818;
  unsigned int method_token.57;
  struct MonoImage * D.22820;
  const char * D.22825;
  gchar * D.22826;
  struct GSList * D.22827;
  short unsigned int D.22828;
  int D.22829;
  <unnamed-unsigned:1> D.22830;
  int D.22831;
  int D.22832;
  struct MonoType * D.22835;
  int D.22836;
  gchar * D.22842;
  struct GSList * D.22843;
  int D.22846;
  const char * iftmp.58;
  gchar * D.22856;
  struct GSList * D.22857;
  unsigned int D.22860;
  int D.22863;
  const char * iftmp.59;
  gchar * D.22870;
  struct GSList * D.22871;
  unsigned char D.22872;
  unsigned char D.22873;
  int D.22878;
  int D.22881;
  struct MonoMethod * D.22884;
  int D.22885;
  gchar * D.22891;
  struct GSList * D.22892;
  struct MonoClass * D.22897;
  struct MonoClass * D.22898;
  gchar * D.22906;
  struct GSList * D.22907;
  int D.22912;
  int D.22913;
  gchar * D.22919;
  struct GSList * D.22920;
  struct MonoType * D.22923;
  struct MonoType * D.22924;
  int D.22925;
  int D.22926;
  int D.22929;
  int D.22934;
  gchar * D.22940;
  struct GSList * D.22941;
  _Bool D.22944;
  _Bool D.22945;
  _Bool D.22946;
  int D.22949;
  gchar * D.22955;
  struct GSList * D.22956;
  struct MonoType * D.22959;
  struct MonoType * D.22960;
  struct MonoType * D.22961;
  int D.22962;
  gchar * D.22968;
  struct GSList * D.22969;
  int D.22972;
  int D.22974;
  struct MonoClass * D.22977;
  unsigned char D.22978;
  unsigned char D.22979;
  gchar * D.22985;
  struct GSList * D.22986;
  struct MonoClass * D.22991;
  unsigned char D.22992;
  unsigned char D.22993;
  int D.22998;
  gchar * D.23004;
  struct GSList * D.23005;
  struct MonoClass * D.23010;
  unsigned char D.23011;
  unsigned char D.23012;
  int D.23015;
  gchar * D.23021;
  struct GSList * D.23022;
  int D.23029;
  int D.23031;
  gchar * D.23035;
  struct GSList * D.23036;
  int D.23039;
  gchar * D.23045;
  struct GSList * D.23046;
  int D.23049;
  struct MonoClass * D.23052;
  int D.23053;
  gchar * D.23059;
  struct GSList * D.23060;
  int D.23066;
  gchar * D.23072;
  struct GSList * D.23073;
  struct MonoType * D.23076;
  unsigned char D.23077;
  int D.23080;
  int D.23083;
  unsigned int D.23086;
  unsigned char D.23089;
  int D.18855;
  int iftmp.60;
  int D.18854;
  const char[8] * D.23095;
  unsigned char D.23096;
  int D.23097;
  unsigned char D.23098;
  int D.23099;
  _Bool D.23100;
  _Bool D.23101;
  _Bool D.23102;
  const unsigned char * D.23105;
  unsigned char D.23106;
  int D.23107;
  const unsigned char * D.23108;
  unsigned char D.23109;
  int D.23110;
  _Bool D.23111;
  _Bool D.23112;
  const unsigned char * D.23115;
  unsigned char D.23116;
  int D.23117;
  const unsigned char * D.23118;
  unsigned char D.23119;
  int D.23120;
  _Bool D.23121;
  _Bool D.23122;
  const unsigned char * D.23125;
  unsigned char D.23126;
  int D.23127;
  const unsigned char * D.23128;
  unsigned char D.23129;
  int D.23130;
  unsigned int D.23134;
  int D.23135;
  struct MonoMethodSignature * D.23138;
  struct MonoType * D.23139;
  int D.23140;
  gchar * D.23146;
  struct GSList * D.23147;
  struct MonoMethodHeader * D.23150;
  const unsigned char * D.23151;
  unsigned int D.23152;
  sizetype D.23153;
  const unsigned char * D.23154;
  unsigned char D.23155;
  gchar * D.23161;
  struct GSList * D.23162;
  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.22752 = ctx->prefix_set;
  D.22753 = (int) D.22752;
  constrained = D.22753 & 8;
  if (virtual != 0) goto <D.22755>; else goto <D.22756>;
  <D.22755>:
  iftmp.56 = "callvirt";
  goto <D.22757>;
  <D.22756>:
  iftmp.56 = "call";
  <D.22757>:
  method = verifier_load_method (ctx, method_token, iftmp.56);
  if (method == 0B) goto <D.22758>; else goto <D.22759>;
  <D.22758>:
  return;
  <D.22759>:
  if (virtual != 0) goto <D.22760>; else goto <D.22761>;
  <D.22760>:
  D.22752 = ctx->prefix_set;
  D.22762 = D.22752 & 4294967287;
  ctx->prefix_set = D.22762;
  D.22763 = method->klass;
  D.22764 = BIT_FIELD_REF <*D.22763, 8, 256>;
  D.22765 = D.22764 & 8;
  if (D.22765 != 0) goto <D.22766>; else goto <D.22767>;
  <D.22766>:
  D.22770 = ctx->verifiable;
  if (D.22770 != 0) goto <D.22768>; else goto <D.22771>;
  <D.22771>:
  D.22772 = ctx->level;
  D.22773 = D.22772 & 128;
  if (D.22773 != 0) goto <D.22768>; else goto <D.22769>;
  <D.22768>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22774 = ctx->ip_offset;
    D.22775 = monoeg_g_strdup_printf ("Cannot use callvirtual with valuetype method at 0x%04x", D.22774);
    vinfo->info.message = D.22775;
    vinfo->exception_type = 4;
    D.22776 = ctx->list;
    D.22777 = monoeg_g_slist_prepend (D.22776, vinfo);
    ctx->list = D.22777;
  }
  ctx->verifiable = 0;
  D.22772 = ctx->level;
  D.22778 = D.22772 & 16;
  if (D.22778 != 0) goto <D.22779>; else goto <D.22780>;
  <D.22779>:
  ctx->valid = 0;
  <D.22780>:
  <D.22769>:
  <D.22767>:
  D.22781 = method->flags;
  D.22782 = (int) D.22781;
  D.22783 = D.22782 & 16;
  if (D.22783 != 0) goto <D.22784>; else goto <D.22785>;
  <D.22784>:
  D.22770 = ctx->verifiable;
  if (D.22770 != 0) goto <D.22786>; else goto <D.22788>;
  <D.22788>:
  D.22772 = ctx->level;
  D.22773 = D.22772 & 128;
  if (D.22773 != 0) goto <D.22786>; else goto <D.22787>;
  <D.22786>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22774 = ctx->ip_offset;
    D.22789 = monoeg_g_strdup_printf ("Cannot use callvirtual with static method at 0x%04x", D.22774);
    vinfo->info.message = D.22789;
    vinfo->exception_type = 4;
    D.22776 = ctx->list;
    D.22790 = monoeg_g_slist_prepend (D.22776, vinfo);
    ctx->list = D.22790;
  }
  ctx->verifiable = 0;
  D.22772 = ctx->level;
  D.22778 = D.22772 & 16;
  if (D.22778 != 0) goto <D.22791>; else goto <D.22792>;
  <D.22791>:
  ctx->valid = 0;
  <D.22792>:
  <D.22787>:
  <D.22785>:
  goto <D.22793>;
  <D.22761>:
  D.22781 = method->flags;
  D.22782 = (int) D.22781;
  D.22794 = D.22782 & 1024;
  if (D.22794 != 0) goto <D.22795>; else goto <D.22796>;
  <D.22795>:
  D.22770 = ctx->verifiable;
  if (D.22770 != 0) goto <D.22797>; else goto <D.22799>;
  <D.22799>:
  D.22772 = ctx->level;
  D.22773 = D.22772 & 128;
  if (D.22773 != 0) goto <D.22797>; else goto <D.22798>;
  <D.22797>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22774 = ctx->ip_offset;
    D.22800 = monoeg_g_strdup_printf ("Cannot use call with an abstract method at 0x%04x", D.22774);
    vinfo->info.message = D.22800;
    vinfo->exception_type = 4;
    D.22776 = ctx->list;
    D.22801 = monoeg_g_slist_prepend (D.22776, vinfo);
    ctx->list = D.22801;
  }
  ctx->verifiable = 0;
  D.22772 = ctx->level;
  D.22778 = D.22772 & 16;
  if (D.22778 != 0) goto <D.22802>; else goto <D.22803>;
  <D.22802>:
  ctx->valid = 0;
  <D.22803>:
  <D.22798>:
  <D.22796>:
  D.22781 = method->flags;
  D.22804 = (unsigned int) D.22781;
  D.22805 = D.22804 & 96;
  if (D.22805 == 64) goto <D.22806>; else goto <D.22807>;
  <D.22806>:
  D.22763 = method->klass;
  D.22808 = D.22763->flags;
  D.22809 = D.22808 & 256;
  if (D.22809 == 0) goto <D.22810>; else goto <D.22811>;
  <D.22810>:
  virt_check_this = 1;
  D.22812 = ctx->code;
  D.22774 = ctx->ip_offset;
  D.22813 = (long unsigned int) D.22774;
  D.22814 = D.22813 * 16;
  D.22815 = D.22812 + D.22814;
  D.22812 = ctx->code;
  D.22774 = ctx->ip_offset;
  D.22813 = (long unsigned int) D.22774;
  D.22814 = D.22813 * 16;
  D.22815 = D.22812 + D.22814;
  D.22816 = D.22815->flags;
  D.22817 = D.22816 | 64;
  D.22815->flags = D.22817;
  <D.22811>:
  <D.22807>:
  <D.22793>:
  D.22818 = ctx->generic_context;
  method_token.57 = (unsigned int) method_token;
  D.22820 = ctx->image;
  sig = mono_method_get_signature_full (method, D.22820, method_token.57, D.22818);
  if (sig == 0B) goto <D.22821>; else goto <D.22822>;
  <D.22821>:
  method_token.57 = (unsigned int) method_token;
  D.22820 = ctx->image;
  sig = mono_method_get_signature (method, D.22820, method_token.57);
  <D.22822>:
  if (sig == 0B) goto <D.22823>; else goto <D.22824>;
  <D.22823>:
  {
    char * name;

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

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.22774 = ctx->ip_offset;
      D.22825 = method->name;
      D.22826 = monoeg_g_strdup_printf ("Could not resolve signature of %s:%s at 0x%04x", name, D.22825, D.22774);
      vinfo->info.message = D.22826;
      vinfo->exception_type = 3;
      D.22776 = ctx->list;
      D.22827 = monoeg_g_slist_prepend (D.22776, vinfo);
      ctx->list = D.22827;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.22824>:
  D.22828 = sig->param_count;
  D.22829 = (int) D.22828;
  D.22830 = sig->hasthis;
  D.22831 = (int) D.22830;
  param_count = D.22829 + D.22831;
  D.22832 = check_underflow (ctx, param_count);
  if (D.22832 == 0) goto <D.22833>; else goto <D.22834>;
  <D.22833>:
  return;
  <D.22834>:
  D.22828 = sig->param_count;
  D.22829 = (int) D.22828;
  i = D.22829 + -1;
  goto <D.18825>;
  <D.18824>:
  value = stack_pop (ctx);
  D.22835 = sig->params[i];
  D.22836 = verify_stack_type_compatibility (ctx, D.22835, value);
  if (D.22836 == 0) goto <D.22837>; else goto <D.22838>;
  <D.22837>:
  {
    char * stack_name;
    char * sig_name;

    stack_name = stack_slot_full_name (value);
    D.22835 = sig->params[i];
    sig_name = mono_type_full_name (D.22835);
    D.22770 = ctx->verifiable;
    if (D.22770 != 0) goto <D.22839>; else goto <D.22841>;
    <D.22841>:
    D.22772 = ctx->level;
    D.22773 = D.22772 & 128;
    if (D.22773 != 0) goto <D.22839>; else goto <D.22840>;
    <D.22839>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.22774 = ctx->ip_offset;
      D.22842 = 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.22774);
      vinfo->info.message = D.22842;
      vinfo->exception_type = 4;
      D.22776 = ctx->list;
      D.22843 = monoeg_g_slist_prepend (D.22776, vinfo);
      ctx->list = D.22843;
    }
    ctx->verifiable = 0;
    D.22772 = ctx->level;
    D.22778 = D.22772 & 16;
    if (D.22778 != 0) goto <D.22844>; else goto <D.22845>;
    <D.22844>:
    ctx->valid = 0;
    <D.22845>:
    <D.22840>:
    monoeg_g_free (stack_name);
    monoeg_g_free (sig_name);
  }
  <D.22838>:
  D.22846 = stack_slot_is_managed_mutability_pointer (value);
  if (D.22846 != 0) goto <D.22847>; else goto <D.22848>;
  <D.22847>:
  D.22770 = ctx->verifiable;
  if (D.22770 != 0) goto <D.22849>; else goto <D.22851>;
  <D.22851>:
  D.22772 = ctx->level;
  D.22773 = D.22772 & 128;
  if (D.22773 != 0) goto <D.22849>; else goto <D.22850>;
  <D.22849>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22774 = ctx->ip_offset;
    if (virtual != 0) goto <D.22853>; else goto <D.22854>;
    <D.22853>:
    iftmp.58 = "callvirt";
    goto <D.22855>;
    <D.22854>:
    iftmp.58 = "call";
    <D.22855>:
    D.22856 = monoeg_g_strdup_printf ("Cannot use a readonly pointer as argument of %s at 0x%04x", iftmp.58, D.22774);
    vinfo->info.message = D.22856;
    vinfo->exception_type = 4;
    D.22776 = ctx->list;
    D.22857 = monoeg_g_slist_prepend (D.22776, vinfo);
    ctx->list = D.22857;
  }
  ctx->verifiable = 0;
  D.22772 = ctx->level;
  D.22778 = D.22772 & 16;
  if (D.22778 != 0) goto <D.22858>; else goto <D.22859>;
  <D.22858>:
  ctx->valid = 0;
  <D.22859>:
  <D.22850>:
  <D.22848>:
  D.22752 = ctx->prefix_set;
  D.22860 = D.22752 & 4;
  if (D.22860 != 0) goto <D.22861>; else goto <D.22862>;
  <D.22861>:
  D.22863 = stack_slot_is_managed_pointer (value);
  if (D.22863 != 0) goto <D.22864>; else goto <D.22865>;
  <D.22864>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.22774 = ctx->ip_offset;
    if (virtual != 0) goto <D.22867>; else goto <D.22868>;
    <D.22867>:
    iftmp.59 = "callvirt";
    goto <D.22869>;
    <D.22868>:
    iftmp.59 = "call";
    <D.22869>:
    D.22870 = monoeg_g_strdup_printf ("Cannot  pass a byref argument to a tail %s at 0x%04x", iftmp.59, D.22774);
    vinfo->info.message = D.22870;
    vinfo->exception_type = 3;
    D.22776 = ctx->list;
    D.22871 = monoeg_g_slist_prepend (D.22776, vinfo);
    ctx->list = D.22871;
  }
  ctx->valid = 0;
  return;
  <D.22865>:
  <D.22862>:
  i = i + -1;
  <D.18825>:
  if (i >= 0) goto <D.18824>; else goto <D.18826>;
  <D.18826>:
  D.22872 = BIT_FIELD_REF <*sig, 8, 112>;
  D.22873 = D.22872 & 64;
  if (D.22873 != 0) goto <D.22874>; else goto <D.22875>;
  <D.22874>:
  {
    struct MonoType * type;
    struct ILStackDesc copy;

    try
      {
        D.22763 = method->klass;
        type = &D.22763->byval_arg;
        D.22878 = mono_method_is_constructor (method);
        if (D.22878 != 0) goto <D.22879>; else goto <D.22876>;
        <D.22879>:
        D.22763 = method->klass;
        D.22764 = BIT_FIELD_REF <*D.22763, 8, 256>;
        D.22765 = D.22764 & 8;
        if (D.22765 == 0) goto <D.22880>; else goto <D.22876>;
        <D.22880>:
        D.22772 = ctx->level;
        D.22881 = D.22772 & 32;
        if (D.22881 == 0) goto <D.22882>; else goto <D.22883>;
        <D.22882>:
        D.22884 = ctx->method;
        D.22885 = mono_method_is_constructor (D.22884);
        if (D.22885 == 0) goto <D.22886>; else goto <D.22887>;
        <D.22886>:
        D.22770 = ctx->verifiable;
        if (D.22770 != 0) goto <D.22888>; else goto <D.22890>;
        <D.22890>:
        D.22772 = ctx->level;
        D.22773 = D.22772 & 128;
        if (D.22773 != 0) goto <D.22888>; else goto <D.22889>;
        <D.22888>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22774 = ctx->ip_offset;
          D.22891 = monoeg_g_strdup_printf ("Cannot call a constructor outside one at 0x%04x", D.22774);
          vinfo->info.message = D.22891;
          vinfo->exception_type = 4;
          D.22776 = ctx->list;
          D.22892 = monoeg_g_slist_prepend (D.22776, vinfo);
          ctx->list = D.22892;
        }
        ctx->verifiable = 0;
        D.22772 = ctx->level;
        D.22778 = D.22772 & 16;
        if (D.22778 != 0) goto <D.22893>; else goto <D.22894>;
        <D.22893>:
        ctx->valid = 0;
        <D.22894>:
        <D.22889>:
        <D.22887>:
        <D.22883>:
        D.22772 = ctx->level;
        D.22881 = D.22772 & 32;
        if (D.22881 == 0) goto <D.22895>; else goto <D.22896>;
        <D.22895>:
        D.22763 = method->klass;
        D.22884 = ctx->method;
        D.22897 = D.22884->klass;
        D.22898 = D.22897->parent;
        if (D.22763 != D.22898) goto <D.22899>; else goto <D.22900>;
        <D.22899>:
        D.22763 = method->klass;
        D.22884 = ctx->method;
        D.22897 = D.22884->klass;
        if (D.22763 != D.22897) goto <D.22901>; else goto <D.22902>;
        <D.22901>:
        D.22770 = ctx->verifiable;
        if (D.22770 != 0) goto <D.22903>; else goto <D.22905>;
        <D.22905>:
        D.22772 = ctx->level;
        D.22773 = D.22772 & 128;
        if (D.22773 != 0) goto <D.22903>; else goto <D.22904>;
        <D.22903>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22774 = ctx->ip_offset;
          D.22906 = monoeg_g_strdup_printf ("Cannot call a constructor of a type different from this or super at 0x%04x", D.22774);
          vinfo->info.message = D.22906;
          vinfo->exception_type = 4;
          D.22776 = ctx->list;
          D.22907 = monoeg_g_slist_prepend (D.22776, vinfo);
          ctx->list = D.22907;
        }
        ctx->verifiable = 0;
        D.22772 = ctx->level;
        D.22778 = D.22772 & 16;
        if (D.22778 != 0) goto <D.22908>; else goto <D.22909>;
        <D.22908>:
        ctx->valid = 0;
        <D.22909>:
        <D.22904>:
        <D.22902>:
        <D.22900>:
        <D.22896>:
        ctx->super_ctor_called = 1;
        value = stack_pop_safe (ctx);
        D.22772 = ctx->level;
        D.22881 = D.22772 & 32;
        if (D.22881 == 0) goto <D.22910>; else goto <D.22911>;
        <D.22910>:
        D.22912 = value->stype;
        D.22913 = D.22912 & 2048;
        if (D.22913 == 0) goto <D.22914>; else goto <D.22915>;
        <D.22914>:
        D.22770 = ctx->verifiable;
        if (D.22770 != 0) goto <D.22916>; else goto <D.22918>;
        <D.22918>:
        D.22772 = ctx->level;
        D.22773 = D.22772 & 128;
        if (D.22773 != 0) goto <D.22916>; else goto <D.22917>;
        <D.22916>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22774 = ctx->ip_offset;
          D.22919 = monoeg_g_strdup_printf ("Invalid \'this ptr\' argument for constructor at 0x%04x", D.22774);
          vinfo->info.message = D.22919;
          vinfo->exception_type = 4;
          D.22776 = ctx->list;
          D.22920 = monoeg_g_slist_prepend (D.22776, vinfo);
          ctx->list = D.22920;
        }
        ctx->verifiable = 0;
        D.22772 = ctx->level;
        D.22778 = D.22772 & 16;
        if (D.22778 != 0) goto <D.22921>; else goto <D.22922>;
        <D.22921>:
        ctx->valid = 0;
        <D.22922>:
        <D.22917>:
        <D.22915>:
        <D.22911>:
        goto <D.22877>;
        <D.22876>:
        value = stack_pop (ctx);
        <D.22877>:
        copy_stack_value (&copy, value);
        D.22923 = copy.type;
        D.22924 = mono_type_get_type_byval (D.22923);
        copy.type = D.22924;
        D.22925 = copy.stype;
        D.22926 = D.22925 & -257;
        copy.stype = D.22926;
        if (virt_check_this != 0) goto <D.22927>; else goto <D.22928>;
        <D.22927>:
        D.22929 = stack_slot_is_this_pointer (value);
        if (D.22929 == 0) goto <D.22930>; else goto <D.22931>;
        <D.22930>:
        D.22763 = method->klass;
        D.22764 = BIT_FIELD_REF <*D.22763, 8, 256>;
        D.22765 = D.22764 & 8;
        if (D.22765 == 0) goto <D.22932>; else goto <D.22933>;
        <D.22932>:
        D.22934 = stack_slot_is_boxed_value (value);
        if (D.22934 == 0) goto <D.22935>; else goto <D.22936>;
        <D.22935>:
        D.22770 = ctx->verifiable;
        if (D.22770 != 0) goto <D.22937>; else goto <D.22939>;
        <D.22939>:
        D.22772 = ctx->level;
        D.22773 = D.22772 & 128;
        if (D.22773 != 0) goto <D.22937>; else goto <D.22938>;
        <D.22937>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22774 = ctx->ip_offset;
          D.22940 = 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.22774);
          vinfo->info.message = D.22940;
          vinfo->exception_type = 4;
          D.22776 = ctx->list;
          D.22941 = monoeg_g_slist_prepend (D.22776, vinfo);
          ctx->list = D.22941;
        }
        ctx->verifiable = 0;
        D.22772 = ctx->level;
        D.22778 = D.22772 & 16;
        if (D.22778 != 0) goto <D.22942>; else goto <D.22943>;
        <D.22942>:
        ctx->valid = 0;
        <D.22943>:
        <D.22938>:
        <D.22936>:
        <D.22933>:
        <D.22931>:
        <D.22928>:
        D.22944 = constrained != 0;
        D.22945 = virtual != 0;
        D.22946 = D.22944 & D.22945;
        if (D.22946 != 0) goto <D.22947>; else goto <D.22948>;
        <D.22947>:
        D.22949 = stack_slot_is_managed_pointer (value);
        if (D.22949 == 0) goto <D.22950>; else goto <D.22951>;
        <D.22950>:
        D.22770 = ctx->verifiable;
        if (D.22770 != 0) goto <D.22952>; else goto <D.22954>;
        <D.22954>:
        D.22772 = ctx->level;
        D.22773 = D.22772 & 128;
        if (D.22773 != 0) goto <D.22952>; else goto <D.22953>;
        <D.22952>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22774 = ctx->ip_offset;
          D.22955 = monoeg_g_strdup_printf ("Object is not a managed pointer for a constrained call at 0x%04x", D.22774);
          vinfo->info.message = D.22955;
          vinfo->exception_type = 4;
          D.22776 = ctx->list;
          D.22956 = monoeg_g_slist_prepend (D.22776, vinfo);
          ctx->list = D.22956;
        }
        ctx->verifiable = 0;
        D.22772 = ctx->level;
        D.22778 = D.22772 & 16;
        if (D.22778 != 0) goto <D.22957>; else goto <D.22958>;
        <D.22957>:
        ctx->valid = 0;
        <D.22958>:
        <D.22953>:
        <D.22951>:
        D.22959 = ctx->constrained_type;
        D.22960 = value->type;
        D.22961 = mono_type_get_type_byval (D.22960);
        D.22962 = mono_metadata_type_equal_full (D.22961, D.22959, 1);
        if (D.22962 == 0) goto <D.22963>; else goto <D.22964>;
        <D.22963>:
        D.22770 = ctx->verifiable;
        if (D.22770 != 0) goto <D.22965>; else goto <D.22967>;
        <D.22967>:
        D.22772 = ctx->level;
        D.22773 = D.22772 & 128;
        if (D.22773 != 0) goto <D.22965>; else goto <D.22966>;
        <D.22965>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22774 = ctx->ip_offset;
          D.22968 = monoeg_g_strdup_printf ("Object not compatible with constrained type at 0x%04x", D.22774);
          vinfo->info.message = D.22968;
          vinfo->exception_type = 4;
          D.22776 = ctx->list;
          D.22969 = monoeg_g_slist_prepend (D.22776, vinfo);
          ctx->list = D.22969;
        }
        ctx->verifiable = 0;
        D.22772 = ctx->level;
        D.22778 = D.22772 & 16;
        if (D.22778 != 0) goto <D.22970>; else goto <D.22971>;
        <D.22970>:
        ctx->valid = 0;
        <D.22971>:
        <D.22966>:
        <D.22964>:
        D.22925 = copy.stype;
        D.22972 = D.22925 | 4096;
        copy.stype = D.22972;
        goto <D.22973>;
        <D.22948>:
        D.22974 = stack_slot_is_managed_pointer (value);
        if (D.22974 != 0) goto <D.22975>; else goto <D.22976>;
        <D.22975>:
        D.22960 = value->type;
        D.22977 = mono_class_from_mono_type (D.22960);
        D.22978 = BIT_FIELD_REF <*D.22977, 8, 256>;
        D.22979 = D.22978 & 8;
        if (D.22979 == 0) goto <D.22980>; else goto <D.22981>;
        <D.22980>:
        D.22770 = ctx->verifiable;
        if (D.22770 != 0) goto <D.22982>; else goto <D.22984>;
        <D.22984>:
        D.22772 = ctx->level;
        D.22773 = D.22772 & 128;
        if (D.22773 != 0) goto <D.22982>; else goto <D.22983>;
        <D.22982>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22774 = ctx->ip_offset;
          D.22985 = monoeg_g_strdup_printf ("Cannot call a reference type using a managed pointer to the this arg at 0x%04x", D.22774);
          vinfo->info.message = D.22985;
          vinfo->exception_type = 4;
          D.22776 = ctx->list;
          D.22986 = monoeg_g_slist_prepend (D.22776, vinfo);
          ctx->list = D.22986;
        }
        ctx->verifiable = 0;
        D.22772 = ctx->level;
        D.22778 = D.22772 & 16;
        if (D.22778 != 0) goto <D.22987>; else goto <D.22988>;
        <D.22987>:
        ctx->valid = 0;
        <D.22988>:
        <D.22983>:
        <D.22981>:
        <D.22976>:
        if (virtual == 0) goto <D.22989>; else goto <D.22990>;
        <D.22989>:
        D.22960 = value->type;
        D.22991 = mono_class_from_mono_type (D.22960);
        D.22992 = BIT_FIELD_REF <*D.22991, 8, 256>;
        D.22993 = D.22992 & 8;
        if (D.22993 != 0) goto <D.22994>; else goto <D.22995>;
        <D.22994>:
        D.22763 = method->klass;
        D.22764 = BIT_FIELD_REF <*D.22763, 8, 256>;
        D.22765 = D.22764 & 8;
        if (D.22765 == 0) goto <D.22996>; else goto <D.22997>;
        <D.22996>:
        D.22998 = stack_slot_is_boxed_value (value);
        if (D.22998 == 0) goto <D.22999>; else goto <D.23000>;
        <D.22999>:
        D.22770 = ctx->verifiable;
        if (D.22770 != 0) goto <D.23001>; else goto <D.23003>;
        <D.23003>:
        D.22772 = ctx->level;
        D.22773 = D.22772 & 128;
        if (D.22773 != 0) goto <D.23001>; else goto <D.23002>;
        <D.23001>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22774 = ctx->ip_offset;
          D.23004 = monoeg_g_strdup_printf ("Cannot call a valuetype baseclass at 0x%04x", D.22774);
          vinfo->info.message = D.23004;
          vinfo->exception_type = 4;
          D.22776 = ctx->list;
          D.23005 = monoeg_g_slist_prepend (D.22776, vinfo);
          ctx->list = D.23005;
        }
        ctx->verifiable = 0;
        D.22772 = ctx->level;
        D.22778 = D.22772 & 16;
        if (D.22778 != 0) goto <D.23006>; else goto <D.23007>;
        <D.23006>:
        ctx->valid = 0;
        <D.23007>:
        <D.23002>:
        <D.23000>:
        <D.22997>:
        <D.22995>:
        <D.22990>:
        if (virtual != 0) goto <D.23008>; else goto <D.23009>;
        <D.23008>:
        D.22960 = value->type;
        D.23010 = mono_class_from_mono_type (D.22960);
        D.23011 = BIT_FIELD_REF <*D.23010, 8, 256>;
        D.23012 = D.23011 & 8;
        if (D.23012 != 0) goto <D.23013>; else goto <D.23014>;
        <D.23013>:
        D.23015 = stack_slot_is_boxed_value (value);
        if (D.23015 == 0) goto <D.23016>; else goto <D.23017>;
        <D.23016>:
        D.22770 = ctx->verifiable;
        if (D.22770 != 0) goto <D.23018>; else goto <D.23020>;
        <D.23020>:
        D.22772 = ctx->level;
        D.22773 = D.22772 & 128;
        if (D.22773 != 0) goto <D.23018>; else goto <D.23019>;
        <D.23018>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22774 = ctx->ip_offset;
          D.23021 = monoeg_g_strdup_printf ("Cannot use a valuetype with callvirt at 0x%04x", D.22774);
          vinfo->info.message = D.23021;
          vinfo->exception_type = 4;
          D.22776 = ctx->list;
          D.23022 = monoeg_g_slist_prepend (D.22776, vinfo);
          ctx->list = D.23022;
        }
        ctx->verifiable = 0;
        D.22772 = ctx->level;
        D.22778 = D.22772 & 16;
        if (D.22778 != 0) goto <D.23023>; else goto <D.23024>;
        <D.23023>:
        ctx->valid = 0;
        <D.23024>:
        <D.23019>:
        <D.23017>:
        <D.23014>:
        <D.23009>:
        D.22763 = method->klass;
        D.22764 = BIT_FIELD_REF <*D.22763, 8, 256>;
        D.22765 = D.22764 & 8;
        if (D.22765 != 0) goto <D.23027>; else goto <D.23028>;
        <D.23027>:
        D.23029 = stack_slot_is_boxed_value (value);
        if (D.23029 != 0) goto <D.23025>; else goto <D.23030>;
        <D.23030>:
        D.23031 = stack_slot_is_managed_pointer (value);
        if (D.23031 == 0) goto <D.23025>; else goto <D.23026>;
        <D.23025>:
        D.22770 = ctx->verifiable;
        if (D.22770 != 0) goto <D.23032>; else goto <D.23034>;
        <D.23034>:
        D.22772 = ctx->level;
        D.22773 = D.22772 & 128;
        if (D.22773 != 0) goto <D.23032>; else goto <D.23033>;
        <D.23032>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22774 = ctx->ip_offset;
          D.23035 = monoeg_g_strdup_printf ("Cannot use a boxed or literal valuetype to call a valuetype method at 0x%04x", D.22774);
          vinfo->info.message = D.23035;
          vinfo->exception_type = 4;
          D.22776 = ctx->list;
          D.23036 = monoeg_g_slist_prepend (D.22776, vinfo);
          ctx->list = D.23036;
        }
        ctx->verifiable = 0;
        D.22772 = ctx->level;
        D.22778 = D.22772 & 16;
        if (D.22778 != 0) goto <D.23037>; else goto <D.23038>;
        <D.23037>:
        ctx->valid = 0;
        <D.23038>:
        <D.23033>:
        <D.23026>:
        <D.23028>:
        <D.22973>:
        D.23039 = verify_stack_type_compatibility (ctx, type, &copy);
        if (D.23039 == 0) goto <D.23040>; else goto <D.23041>;
        <D.23040>:
        {
          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.22770 = ctx->verifiable;
          if (D.22770 != 0) goto <D.23042>; else goto <D.23044>;
          <D.23044>:
          D.22772 = ctx->level;
          D.22773 = D.22772 & 128;
          if (D.22773 != 0) goto <D.23042>; else goto <D.23043>;
          <D.23042>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.22774 = ctx->ip_offset;
            D.23045 = 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.22774);
            vinfo->info.message = D.23045;
            vinfo->exception_type = 4;
            D.22776 = ctx->list;
            D.23046 = monoeg_g_slist_prepend (D.22776, vinfo);
            ctx->list = D.23046;
          }
          ctx->verifiable = 0;
          D.22772 = ctx->level;
          D.22778 = D.22772 & 16;
          if (D.22778 != 0) goto <D.23047>; else goto <D.23048>;
          <D.23047>:
          ctx->valid = 0;
          <D.23048>:
          <D.23043>:
          monoeg_g_free (method_name);
          monoeg_g_free (effective);
          monoeg_g_free (expected);
        }
        <D.23041>:
        D.22772 = ctx->level;
        D.23049 = D.22772 & 64;
        if (D.23049 == 0) goto <D.23050>; else goto <D.23051>;
        <D.23050>:
        D.22960 = value->type;
        D.23052 = mono_class_from_mono_type (D.22960);
        D.22884 = ctx->method;
        D.23053 = mono_method_can_access_method_full (D.22884, method, D.23052);
        if (D.23053 == 0) goto <D.23054>; else goto <D.23055>;
        <D.23054>:
        {
          char * name;

          name = mono_method_full_name (method, 1);
          D.22770 = ctx->verifiable;
          if (D.22770 != 0) goto <D.23056>; else goto <D.23058>;
          <D.23058>:
          D.22772 = ctx->level;
          D.22773 = D.22772 & 128;
          if (D.22773 != 0) goto <D.23056>; else goto <D.23057>;
          <D.23056>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.22774 = ctx->ip_offset;
            D.23059 = monoeg_g_strdup_printf ("Method %s is not accessible at 0x%04x", name, D.22774);
            vinfo->info.message = D.23059;
            vinfo->exception_type = 9;
            D.22776 = ctx->list;
            D.23060 = monoeg_g_slist_prepend (D.22776, vinfo);
            ctx->list = D.23060;
          }
          ctx->verifiable = 0;
          D.22772 = ctx->level;
          D.22778 = D.22772 & 16;
          if (D.22778 != 0) goto <D.23061>; else goto <D.23062>;
          <D.23061>:
          ctx->valid = 0;
          <D.23062>:
          <D.23057>:
          monoeg_g_free (name);
        }
        <D.23055>:
        <D.23051>:
      }
    finally
      {
        copy = {CLOBBER};
      }
  }
  goto <D.23063>;
  <D.22875>:
  D.22772 = ctx->level;
  D.23049 = D.22772 & 64;
  if (D.23049 == 0) goto <D.23064>; else goto <D.23065>;
  <D.23064>:
  D.22884 = ctx->method;
  D.23066 = mono_method_can_access_method_full (D.22884, method, 0B);
  if (D.23066 == 0) goto <D.23067>; else goto <D.23068>;
  <D.23067>:
  {
    char * name;

    name = mono_method_full_name (method, 1);
    D.22770 = ctx->verifiable;
    if (D.22770 != 0) goto <D.23069>; else goto <D.23071>;
    <D.23071>:
    D.22772 = ctx->level;
    D.22773 = D.22772 & 128;
    if (D.22773 != 0) goto <D.23069>; else goto <D.23070>;
    <D.23069>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.22774 = ctx->ip_offset;
      D.23072 = monoeg_g_strdup_printf ("Method %s is not accessible at 0x%04x", name, D.22774);
      vinfo->info.message = D.23072;
      vinfo->exception_type = 9;
      D.22776 = ctx->list;
      D.23073 = monoeg_g_slist_prepend (D.22776, vinfo);
      ctx->list = D.23073;
    }
    ctx->verifiable = 0;
    D.22772 = ctx->level;
    D.22778 = D.22772 & 16;
    if (D.22778 != 0) goto <D.23074>; else goto <D.23075>;
    <D.23074>:
    ctx->valid = 0;
    <D.23075>:
    <D.23070>:
    monoeg_g_free (name);
  }
  <D.23068>:
  <D.23065>:
  <D.23063>:
  D.23076 = sig->ret;
  D.23077 = D.23076->type;
  if (D.23077 != 1) goto <D.23078>; else goto <D.23079>;
  <D.23078>:
  D.23076 = sig->ret;
  D.23080 = mono_type_is_valid_in_context (ctx, D.23076);
  if (D.23080 == 0) goto <D.23081>; else goto <D.23082>;
  <D.23081>:
  return;
  <D.23082>:
  D.23083 = check_overflow (ctx);
  if (D.23083 != 0) goto <D.23084>; else goto <D.23085>;
  <D.23084>:
  value = stack_push (ctx);
  D.23076 = sig->ret;
  set_stack_value (ctx, value, D.23076, 0);
  D.22752 = ctx->prefix_set;
  D.23086 = D.22752 & 16;
  if (D.23086 != 0) goto <D.23087>; else goto <D.23088>;
  <D.23087>:
  D.22763 = method->klass;
  D.23089 = D.22763->rank;
  if (D.23089 != 0) goto <D.23090>; else goto <D.23091>;
  <D.23090>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = method->name;
      D.23095 = "Address";
      D.23096 = MEM[(const unsigned char *)D.23095];
      D.23097 = (int) D.23096;
      D.23098 = *__s2;
      D.23099 = (int) D.23098;
      __result = D.23097 - D.23099;
      {
        D.23100 = __s2_len != 0;
        D.23101 = __result == 0;
        D.23102 = D.23100 & D.23101;
        if (D.23102 != 0) goto <D.23103>; else goto <D.23104>;
        <D.23103>:
        D.23105 = &MEM[(void *)"Address" + 1B];
        D.23106 = *D.23105;
        D.23107 = (int) D.23106;
        D.23108 = __s2 + 1;
        D.23109 = *D.23108;
        D.23110 = (int) D.23109;
        __result = D.23107 - D.23110;
        D.23111 = __s2_len > 1;
        D.23101 = __result == 0;
        D.23112 = D.23111 & D.23101;
        if (D.23112 != 0) goto <D.23113>; else goto <D.23114>;
        <D.23113>:
        D.23115 = &MEM[(void *)"Address" + 2B];
        D.23116 = *D.23115;
        D.23117 = (int) D.23116;
        D.23118 = __s2 + 2;
        D.23119 = *D.23118;
        D.23120 = (int) D.23119;
        __result = D.23117 - D.23120;
        D.23121 = __s2_len > 2;
        D.23101 = __result == 0;
        D.23122 = D.23121 & D.23101;
        if (D.23122 != 0) goto <D.23123>; else goto <D.23124>;
        <D.23123>:
        D.23125 = &MEM[(void *)"Address" + 3B];
        D.23126 = *D.23125;
        D.23127 = (int) D.23126;
        D.23128 = __s2 + 3;
        D.23129 = *D.23128;
        D.23130 = (int) D.23129;
        __result = D.23127 - D.23130;
        <D.23124>:
        <D.23114>:
        <D.23104>:
      }
      D.18854 = __result;
    }
    iftmp.60 = -D.18854;
    goto <D.23131>;
    <D.23094>:
    D.22825 = method->name;
    iftmp.60 = __builtin_strcmp (D.22825, "Address");
    <D.23131>:
    D.18855 = iftmp.60;
  }
  if (D.18855 == 0) goto <D.23132>; else goto <D.23133>;
  <D.23132>:
  D.22752 = ctx->prefix_set;
  D.23134 = D.22752 & 4294967279;
  ctx->prefix_set = D.23134;
  D.22912 = value->stype;
  D.23135 = D.22912 | 512;
  value->stype = D.23135;
  <D.23133>:
  <D.23091>:
  <D.23088>:
  <D.23085>:
  <D.23079>:
  D.22752 = ctx->prefix_set;
  D.22860 = D.22752 & 4;
  if (D.22860 != 0) goto <D.23136>; else goto <D.23137>;
  <D.23136>:
  D.23076 = sig->ret;
  D.22884 = ctx->method;
  D.23138 = mono_method_signature (D.22884);
  D.23139 = D.23138->ret;
  D.23140 = mono_delegate_ret_equal (D.23139, D.23076);
  if (D.23140 == 0) goto <D.23141>; else goto <D.23142>;
  <D.23141>:
  D.22770 = ctx->verifiable;
  if (D.22770 != 0) goto <D.23143>; else goto <D.23145>;
  <D.23145>:
  D.22772 = ctx->level;
  D.22773 = D.22772 & 128;
  if (D.22773 != 0) goto <D.23143>; else goto <D.23144>;
  <D.23143>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22774 = ctx->ip_offset;
    D.23146 = monoeg_g_strdup_printf ("Tail call with incompatible return type at 0x%04x", D.22774);
    vinfo->info.message = D.23146;
    vinfo->exception_type = 4;
    D.22776 = ctx->list;
    D.23147 = monoeg_g_slist_prepend (D.22776, vinfo);
    ctx->list = D.23147;
  }
  ctx->verifiable = 0;
  D.22772 = ctx->level;
  D.22778 = D.22772 & 16;
  if (D.22778 != 0) goto <D.23148>; else goto <D.23149>;
  <D.23148>:
  ctx->valid = 0;
  <D.23149>:
  <D.23144>:
  <D.23142>:
  D.23150 = ctx->header;
  D.23151 = D.23150->code;
  D.22774 = ctx->ip_offset;
  D.23152 = D.22774 + 5;
  D.23153 = (sizetype) D.23152;
  D.23154 = D.23151 + D.23153;
  D.23155 = *D.23154;
  if (D.23155 != 42) goto <D.23156>; else goto <D.23157>;
  <D.23156>:
  D.22770 = ctx->verifiable;
  if (D.22770 != 0) goto <D.23158>; else goto <D.23160>;
  <D.23160>:
  D.22772 = ctx->level;
  D.22773 = D.22772 & 128;
  if (D.22773 != 0) goto <D.23158>; else goto <D.23159>;
  <D.23158>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22774 = ctx->ip_offset;
    D.23161 = monoeg_g_strdup_printf ("Tail call not followed by ret at 0x%04x", D.22774);
    vinfo->info.message = D.23161;
    vinfo->exception_type = 4;
    D.22776 = ctx->list;
    D.23162 = monoeg_g_slist_prepend (D.22776, vinfo);
    ctx->list = D.23162;
  }
  ctx->verifiable = 0;
  D.22772 = ctx->level;
  D.22778 = D.22772 & 16;
  if (D.22778 != 0) goto <D.23163>; else goto <D.23164>;
  <D.23163>:
  ctx->valid = 0;
  <D.23164>:
  <D.23159>:
  <D.23157>:
  <D.23137>:
}


verifier_load_method (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoMethod * D.23166;
  unsigned char D.23167;
  unsigned char D.23168;
  unsigned int token.61;
  int D.23176;
  _Bool D.23177;
  _Bool D.23178;
  _Bool D.23179;
  int D.23181;
  unsigned int token.62;
  struct MonoImage * D.23183;
  int D.23184;
  unsigned int D.23185;
  gchar * D.23186;
  struct GSList * D.23187;
  struct GSList * D.23188;
  struct MonoMethod * D.23189;
  struct MonoGenericContext * D.23190;
  unsigned int token.63;
  struct MonoLoaderError * D.23195;
  gchar * D.23196;
  struct GSList * D.23197;
  <unnamed type> D.23198;
  struct MonoMethod * method;

  D.23166 = ctx->method;
  D.23167 = BIT_FIELD_REF <*D.23166, 8, 256>;
  D.23168 = D.23167 & 124;
  if (D.23168 != 0) goto <D.23169>; else goto <D.23170>;
  <D.23169>:
  token.61 = (unsigned int) token;
  D.23166 = ctx->method;
  method = mono_method_get_wrapper_data (D.23166, token.61);
  goto <D.23172>;
  <D.23170>:
  D.23176 = token >> 24;
  D.23177 = D.23176 != 6;
  D.23178 = D.23176 != 10;
  D.23179 = D.23177 & D.23178;
  if (D.23179 != 0) goto <D.23180>; else goto <D.23173>;
  <D.23180>:
  D.23181 = token >> 24;
  if (D.23181 != 43) goto <D.23174>; else goto <D.23173>;
  <D.23173>:
  token.62 = (unsigned int) token;
  D.23183 = ctx->image;
  D.23184 = token_bounds_check (D.23183, token.62);
  if (D.23184 == 0) goto <D.23174>; else goto <D.23175>;
  <D.23174>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23185 = ctx->ip_offset;
    D.23186 = monoeg_g_strdup_printf ("Invalid method token 0x%08x for %s at 0x%04x", token, opcode, D.23185);
    vinfo->info.message = D.23186;
    vinfo->exception_type = 12;
    D.23187 = ctx->list;
    D.23188 = monoeg_g_slist_prepend (D.23187, vinfo);
    ctx->list = D.23188;
  }
  ctx->valid = 0;
  D.23189 = 0B;
  return D.23189;
  <D.23175>:
  D.23190 = ctx->generic_context;
  token.63 = (unsigned int) token;
  D.23183 = ctx->image;
  method = mono_get_method_full (D.23183, token.63, 0B, D.23190);
  <D.23172>:
  if (method == 0B) goto <D.23192>; else goto <D.23194>;
  <D.23194>:
  D.23195 = mono_loader_get_last_error ();
  if (D.23195 != 0B) goto <D.23192>; else goto <D.23193>;
  <D.23192>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23185 = ctx->ip_offset;
    D.23196 = monoeg_g_strdup_printf ("Cannot load method from token 0x%08x for %s at 0x%04x", token, opcode, D.23185);
    vinfo->info.message = D.23196;
    vinfo->exception_type = 12;
    D.23187 = ctx->list;
    D.23197 = monoeg_g_slist_prepend (D.23187, vinfo);
    ctx->list = D.23197;
  }
  ctx->valid = 0;
  mono_loader_clear_error ();
  D.23189 = 0B;
  return D.23189;
  <D.23193>:
  D.23198 = mono_method_is_valid_in_context (ctx, method);
  if (D.23198 == 2) goto <D.23199>; else goto <D.23200>;
  <D.23199>:
  D.23189 = 0B;
  return D.23189;
  <D.23200>:
  D.23189 = method;
  return D.23189;
}


token_bounds_check (struct MonoImage * image, guint32 token)
{
  unsigned char D.23202;
  unsigned char D.23203;
  gboolean D.23206;
  int iftmp.64;
  unsigned int D.23210;
  <unnamed-unsigned:24> D.23211;
  unsigned int D.23212;
  unsigned int D.23213;

  D.23202 = BIT_FIELD_REF <*image, 8, 224>;
  D.23203 = D.23202 & 8;
  if (D.23203 != 0) goto <D.23204>; else goto <D.23205>;
  <D.23204>:
  D.23206 = mono_reflection_is_valid_dynamic_token (image, token);
  return D.23206;
  <D.23205>:
  D.23210 = token >> 24;
  D.23211 = image->tables[D.23210].rows;
  D.23212 = (unsigned int) D.23211;
  D.23213 = token & 16777215;
  if (D.23212 >= D.23213) goto <D.23214>; else goto <D.23208>;
  <D.23214>:
  D.23213 = token & 16777215;
  if (D.23213 != 0) goto <D.23215>; else goto <D.23208>;
  <D.23215>:
  iftmp.64 = 1;
  goto <D.23209>;
  <D.23208>:
  iftmp.64 = 0;
  <D.23209>:
  D.23206 = iftmp.64;
  return D.23206;
}


mono_method_is_valid_in_context (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoClass * D.23217;
  struct MonoType * D.23218;
  int D.23219;
  verify_result_t D.23222;
  unsigned char D.23223;
  unsigned char D.23224;
  int D.23227;
  unsigned int D.23230;
  const char * D.23231;
  const char * D.23232;
  const char * D.23233;
  gchar * D.23234;
  struct GSList * D.23235;
  struct GSList * D.23236;
  int D.23237;
  int D.23242;
  int D.23244;
  int D.23245;
  gchar * D.23246;
  struct GSList * D.23247;
  int D.23248;

  D.23217 = method->klass;
  D.23218 = &D.23217->byval_arg;
  D.23219 = mono_type_is_valid_in_context (ctx, D.23218);
  if (D.23219 == 0) goto <D.23220>; else goto <D.23221>;
  <D.23220>:
  D.23222 = 2;
  return D.23222;
  <D.23221>:
  D.23223 = BIT_FIELD_REF <*method, 8, 264>;
  D.23224 = D.23223 & 16;
  if (D.23224 == 0) goto <D.23225>; else goto <D.23226>;
  <D.23225>:
  D.23222 = 0;
  return D.23222;
  <D.23226>:
  D.23227 = mono_method_is_valid_generic_instantiation (ctx, method);
  if (D.23227 == 0) goto <D.23228>; else goto <D.23229>;
  <D.23228>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23230 = ctx->ip_offset;
    D.23231 = method->name;
    D.23217 = method->klass;
    D.23232 = D.23217->name;
    D.23217 = method->klass;
    D.23233 = D.23217->name_space;
    D.23234 = monoeg_g_strdup_printf ("Invalid generic method instantiation of method %s.%s::%s at 0x%04x", D.23233, D.23232, D.23231, D.23230);
    vinfo->info.message = D.23234;
    vinfo->exception_type = 4;
    D.23235 = ctx->list;
    D.23236 = monoeg_g_slist_prepend (D.23235, vinfo);
    ctx->list = D.23236;
  }
  ctx->valid = 0;
  D.23222 = 2;
  return D.23222;
  <D.23229>:
  D.23237 = mono_method_repect_method_constraints (ctx, method);
  if (D.23237 == 0) goto <D.23238>; else goto <D.23239>;
  <D.23238>:
  D.23242 = ctx->verifiable;
  if (D.23242 != 0) goto <D.23240>; else goto <D.23243>;
  <D.23243>:
  D.23244 = ctx->level;
  D.23245 = D.23244 & 128;
  if (D.23245 != 0) goto <D.23240>; else goto <D.23241>;
  <D.23240>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23230 = ctx->ip_offset;
    D.23231 = method->name;
    D.23217 = method->klass;
    D.23232 = D.23217->name;
    D.23217 = method->klass;
    D.23233 = D.23217->name_space;
    D.23246 = 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.23233, D.23232, D.23231, D.23230);
    vinfo->info.message = D.23246;
    vinfo->exception_type = 4;
    D.23235 = ctx->list;
    D.23247 = monoeg_g_slist_prepend (D.23235, vinfo);
    ctx->list = D.23247;
  }
  ctx->verifiable = 0;
  D.23244 = ctx->level;
  D.23248 = D.23244 & 16;
  if (D.23248 != 0) goto <D.23249>; else goto <D.23250>;
  <D.23249>:
  ctx->valid = 0;
  <D.23250>:
  <D.23241>:
  D.23222 = 1;
  return D.23222;
  <D.23239>:
  D.23222 = 0;
  return D.23222;
}


mono_method_is_valid_generic_instantiation (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethod * D.23252;
  gboolean D.23255;
  int D.23258;
  struct MonoGenericContext * D.23261;
  struct MonoMethodInflated * gmethod;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gmethod = method;
  ginst = gmethod->context.method_inst;
  D.23252 = gmethod->declaring;
  gc = mono_method_get_generic_container (D.23252);
  if (gc == 0B) goto <D.23253>; else goto <D.23254>;
  <D.23253>:
  D.23255 = 1;
  return D.23255;
  <D.23254>:
  if (ctx != 0B) goto <D.23256>; else goto <D.23257>;
  <D.23256>:
  D.23258 = is_valid_generic_instantiation_in_context (ctx, ginst, 1);
  if (D.23258 == 0) goto <D.23259>; else goto <D.23260>;
  <D.23259>:
  D.23255 = 0;
  return D.23255;
  <D.23260>:
  <D.23257>:
  D.23261 = &gmethod->context;
  D.23255 = is_valid_generic_instantiation (gc, D.23261, ginst);
  return D.23255;
}


mono_method_repect_method_constraints (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethod * D.23263;
  gboolean D.23264;
  int iftmp.65;
  struct MonoGenericContext * D.23270;
  int D.23271;
  struct MonoMethodInflated * gmethod;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gmethod = method;
  ginst = gmethod->context.method_inst;
  D.23263 = gmethod->declaring;
  gc = mono_method_get_generic_container (D.23263);
  if (gc == 0B) goto <D.23266>; else goto <D.23269>;
  <D.23269>:
  D.23270 = &gmethod->context;
  D.23271 = generic_arguments_respect_constraints (ctx, gc, D.23270, ginst);
  if (D.23271 != 0) goto <D.23266>; else goto <D.23267>;
  <D.23266>:
  iftmp.65 = 1;
  goto <D.23268>;
  <D.23267>:
  iftmp.65 = 0;
  <D.23268>:
  D.23264 = iftmp.65;
  return D.23264;
}


do_static_branch (struct VerifyContext * ctx, int delta)
{
  unsigned int D.23273;
  unsigned int delta.66;
  unsigned int D.23275;
  int D.23279;
  gchar * D.23280;
  struct GSList * D.23281;
  struct GSList * D.23282;
  unsigned int target.67;
  struct MonoMethodHeader * D.23284;
  int D.23285;
  int D.23288;
  int D.23290;
  int D.23291;
  gchar * D.23292;
  struct GSList * D.23293;
  int D.23294;
  gchar * D.23297;
  struct GSList * D.23298;
  int target;

  D.23273 = ctx->ip_offset;
  delta.66 = (unsigned int) delta;
  D.23275 = D.23273 + delta.66;
  target = (int) D.23275;
  if (target < 0) goto <D.23276>; else goto <D.23278>;
  <D.23278>:
  D.23279 = ctx->code_size;
  if (D.23279 <= target) goto <D.23276>; else goto <D.23277>;
  <D.23276>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23273 = ctx->ip_offset;
    D.23280 = monoeg_g_strdup_printf ("branch target out of code at 0x%04x", D.23273);
    vinfo->info.message = D.23280;
    vinfo->exception_type = 3;
    D.23281 = ctx->list;
    D.23282 = monoeg_g_slist_prepend (D.23281, vinfo);
    ctx->list = D.23282;
  }
  ctx->valid = 0;
  return;
  <D.23277>:
  target.67 = (unsigned int) target;
  D.23273 = ctx->ip_offset;
  D.23284 = ctx->header;
  D.23285 = is_valid_branch_instruction (D.23284, D.23273, target.67);
  switch (D.23285) <default: <D.23299>, case 1: <D.19240>, case 2: <D.19243>>
  <D.19240>:
  D.23288 = ctx->verifiable;
  if (D.23288 != 0) goto <D.23286>; else goto <D.23289>;
  <D.23289>:
  D.23290 = ctx->level;
  D.23291 = D.23290 & 128;
  if (D.23291 != 0) goto <D.23286>; else goto <D.23287>;
  <D.23286>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23273 = ctx->ip_offset;
    D.23292 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23273);
    vinfo->info.message = D.23292;
    vinfo->exception_type = 4;
    D.23281 = ctx->list;
    D.23293 = monoeg_g_slist_prepend (D.23281, vinfo);
    ctx->list = D.23293;
  }
  ctx->verifiable = 0;
  D.23290 = ctx->level;
  D.23294 = D.23290 & 16;
  if (D.23294 != 0) goto <D.23295>; else goto <D.23296>;
  <D.23295>:
  ctx->valid = 0;
  <D.23296>:
  <D.23287>:
  goto <D.19242>;
  <D.19243>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23273 = ctx->ip_offset;
    D.23297 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23273);
    vinfo->info.message = D.23297;
    vinfo->exception_type = 3;
    D.23281 = ctx->list;
    D.23298 = monoeg_g_slist_prepend (D.23281, vinfo);
    ctx->list = D.23298;
  }
  ctx->valid = 0;
  goto <D.19242>;
  <D.23299>:
  <D.19242>:
  ctx->target = target;
}


is_valid_branch_instruction (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.23301;
  long unsigned int D.23302;
  long unsigned int D.23303;
  unsigned int D.23306;
  _Bool D.23307;
  _Bool D.23308;
  _Bool D.23309;
  unsigned int D.23312;
  unsigned int D.23314;
  unsigned int D.23315;
  int D.23320;
  unsigned int D.23321;
  int iftmp.68;
  unsigned int D.23328;
  unsigned int D.23329;
  _Bool D.23331;
  int iftmp.69;
  _Bool D.23337;
  _Bool D.23338;
  int iftmp.70;
  _Bool D.23346;
  int iftmp.71;
  _Bool D.23352;
  _Bool D.23353;
  int iftmp.72;
  unsigned int D.23359;
  unsigned int D.23361;
  _Bool D.23364;
  int iftmp.73;
  _Bool D.23371;
  _Bool D.23372;
  <unnamed-unsigned:15> D.23375;
  int D.23376;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18202>;
  <D.18201>:
  D.23301 = header->clauses;
  D.23302 = (long unsigned int) i;
  D.23303 = D.23302 * 32;
  clause = D.23301 + D.23303;
  D.23306 = clause->flags;
  D.23307 = D.23306 == 2;
  D.23308 = D.23306 == 4;
  D.23309 = D.23307 | D.23308;
  if (D.23309 != 0) goto <D.23310>; else goto <D.23311>;
  <D.23310>:
  D.23312 = clause->handler_offset;
  if (D.23312 > offset) goto <D.23304>; else goto <D.23313>;
  <D.23313>:
  D.23312 = clause->handler_offset;
  D.23314 = clause->handler_len;
  D.23315 = D.23312 + D.23314;
  if (D.23315 <= offset) goto <D.23304>; else goto <D.23305>;
  <D.23304>:
  D.23312 = clause->handler_offset;
  if (D.23312 <= target) goto <D.23316>; else goto <D.23317>;
  <D.23316>:
  D.23312 = clause->handler_offset;
  D.23314 = clause->handler_len;
  D.23315 = D.23312 + D.23314;
  if (D.23315 > target) goto <D.23318>; else goto <D.23319>;
  <D.23318>:
  D.23320 = 2;
  return D.23320;
  <D.23319>:
  <D.23317>:
  <D.23305>:
  <D.23311>:
  D.23321 = clause->try_offset;
  if (D.23321 != target) goto <D.23322>; else goto <D.23323>;
  <D.23322>:
  D.23321 = clause->try_offset;
  if (D.23321 <= offset) goto <D.23327>; else goto <D.23325>;
  <D.23327>:
  D.23321 = clause->try_offset;
  D.23328 = clause->try_len;
  D.23329 = D.23321 + D.23328;
  if (D.23329 > offset) goto <D.23330>; else goto <D.23325>;
  <D.23330>:
  iftmp.68 = 1;
  goto <D.23326>;
  <D.23325>:
  iftmp.68 = 0;
  <D.23326>:
  D.23331 = (_Bool) iftmp.68;
  D.23321 = clause->try_offset;
  if (D.23321 <= target) goto <D.23335>; else goto <D.23333>;
  <D.23335>:
  D.23321 = clause->try_offset;
  D.23328 = clause->try_len;
  D.23329 = D.23321 + D.23328;
  if (D.23329 > target) goto <D.23336>; else goto <D.23333>;
  <D.23336>:
  iftmp.69 = 1;
  goto <D.23334>;
  <D.23333>:
  iftmp.69 = 0;
  <D.23334>:
  D.23337 = (_Bool) iftmp.69;
  D.23338 = D.23331 ^ D.23337;
  if (D.23338 != 0) goto <D.23339>; else goto <D.23340>;
  <D.23339>:
  D.23320 = 1;
  return D.23320;
  <D.23340>:
  <D.23323>:
  D.23312 = clause->handler_offset;
  if (D.23312 <= offset) goto <D.23344>; else goto <D.23342>;
  <D.23344>:
  D.23312 = clause->handler_offset;
  D.23314 = clause->handler_len;
  D.23315 = D.23312 + D.23314;
  if (D.23315 > offset) goto <D.23345>; else goto <D.23342>;
  <D.23345>:
  iftmp.70 = 1;
  goto <D.23343>;
  <D.23342>:
  iftmp.70 = 0;
  <D.23343>:
  D.23346 = (_Bool) iftmp.70;
  D.23312 = clause->handler_offset;
  if (D.23312 <= target) goto <D.23350>; else goto <D.23348>;
  <D.23350>:
  D.23312 = clause->handler_offset;
  D.23314 = clause->handler_len;
  D.23315 = D.23312 + D.23314;
  if (D.23315 > target) goto <D.23351>; else goto <D.23348>;
  <D.23351>:
  iftmp.71 = 1;
  goto <D.23349>;
  <D.23348>:
  iftmp.71 = 0;
  <D.23349>:
  D.23352 = (_Bool) iftmp.71;
  D.23353 = D.23346 ^ D.23352;
  if (D.23353 != 0) goto <D.23354>; else goto <D.23355>;
  <D.23354>:
  D.23320 = 1;
  return D.23320;
  <D.23355>:
  D.23359 = clause->flags;
  if (D.23359 == 1) goto <D.23360>; else goto <D.23357>;
  <D.23360>:
  D.23361 = clause->data.filter_offset;
  if (D.23361 <= offset) goto <D.23362>; else goto <D.23357>;
  <D.23362>:
  D.23312 = clause->handler_offset;
  if (D.23312 > offset) goto <D.23363>; else goto <D.23357>;
  <D.23363>:
  iftmp.72 = 1;
  goto <D.23358>;
  <D.23357>:
  iftmp.72 = 0;
  <D.23358>:
  D.23364 = (_Bool) iftmp.72;
  D.23359 = clause->flags;
  if (D.23359 == 1) goto <D.23368>; else goto <D.23366>;
  <D.23368>:
  D.23361 = clause->data.filter_offset;
  if (D.23361 <= target) goto <D.23369>; else goto <D.23366>;
  <D.23369>:
  D.23312 = clause->handler_offset;
  if (D.23312 > target) goto <D.23370>; else goto <D.23366>;
  <D.23370>:
  iftmp.73 = 1;
  goto <D.23367>;
  <D.23366>:
  iftmp.73 = 0;
  <D.23367>:
  D.23371 = (_Bool) iftmp.73;
  D.23372 = D.23364 ^ D.23371;
  if (D.23372 != 0) goto <D.23373>; else goto <D.23374>;
  <D.23373>:
  D.23320 = 1;
  return D.23320;
  <D.23374>:
  i = i + 1;
  <D.18202>:
  D.23375 = header->num_clauses;
  D.23376 = (int) D.23375;
  if (D.23376 > i) goto <D.18201>; else goto <D.18203>;
  <D.18203>:
  D.23320 = 0;
  return D.23320;
}


do_boolean_branch_op (struct VerifyContext * ctx, int delta)
{
  unsigned int D.23378;
  unsigned int delta.74;
  unsigned int D.23380;
  int D.23384;
  gchar * D.23385;
  struct GSList * D.23386;
  struct GSList * D.23387;
  unsigned int target.75;
  struct MonoMethodHeader * D.23389;
  int D.23390;
  int D.23393;
  int D.23395;
  int D.23396;
  gchar * D.23397;
  struct GSList * D.23398;
  int D.23399;
  gchar * D.23402;
  struct GSList * D.23403;
  int D.23405;
  int D.23408;
  const char * D.23414;
  gchar * D.23415;
  struct GSList * D.23416;
  int target;
  struct ILStackDesc * top;

  D.23378 = ctx->ip_offset;
  delta.74 = (unsigned int) delta;
  D.23380 = D.23378 + delta.74;
  target = (int) D.23380;
  if (target < 0) goto <D.23381>; else goto <D.23383>;
  <D.23383>:
  D.23384 = ctx->code_size;
  if (D.23384 <= target) goto <D.23381>; else goto <D.23382>;
  <D.23381>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23378 = ctx->ip_offset;
    D.23385 = monoeg_g_strdup_printf ("Boolean branch target out of code at 0x%04x", D.23378);
    vinfo->info.message = D.23385;
    vinfo->exception_type = 3;
    D.23386 = ctx->list;
    D.23387 = monoeg_g_slist_prepend (D.23386, vinfo);
    ctx->list = D.23387;
  }
  ctx->valid = 0;
  return;
  <D.23382>:
  target.75 = (unsigned int) target;
  D.23378 = ctx->ip_offset;
  D.23389 = ctx->header;
  D.23390 = is_valid_branch_instruction (D.23389, D.23378, target.75);
  switch (D.23390) <default: <D.23404>, case 1: <D.18751>, case 2: <D.18754>>
  <D.18751>:
  D.23393 = ctx->verifiable;
  if (D.23393 != 0) goto <D.23391>; else goto <D.23394>;
  <D.23394>:
  D.23395 = ctx->level;
  D.23396 = D.23395 & 128;
  if (D.23396 != 0) goto <D.23391>; else goto <D.23392>;
  <D.23391>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23378 = ctx->ip_offset;
    D.23397 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23378);
    vinfo->info.message = D.23397;
    vinfo->exception_type = 4;
    D.23386 = ctx->list;
    D.23398 = monoeg_g_slist_prepend (D.23386, vinfo);
    ctx->list = D.23398;
  }
  ctx->verifiable = 0;
  D.23395 = ctx->level;
  D.23399 = D.23395 & 16;
  if (D.23399 != 0) goto <D.23400>; else goto <D.23401>;
  <D.23400>:
  ctx->valid = 0;
  <D.23401>:
  <D.23392>:
  goto <D.18753>;
  <D.18754>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23378 = ctx->ip_offset;
    D.23402 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23378);
    vinfo->info.message = D.23402;
    vinfo->exception_type = 3;
    D.23386 = ctx->list;
    D.23403 = monoeg_g_slist_prepend (D.23386, vinfo);
    ctx->list = D.23403;
  }
  ctx->valid = 0;
  return;
  <D.23404>:
  <D.18753>:
  ctx->target = target;
  D.23405 = check_underflow (ctx, 1);
  if (D.23405 == 0) goto <D.23406>; else goto <D.23407>;
  <D.23406>:
  return;
  <D.23407>:
  top = stack_pop (ctx);
  D.23408 = is_valid_bool_arg (top);
  if (D.23408 == 0) goto <D.23409>; else goto <D.23410>;
  <D.23409>:
  D.23393 = ctx->verifiable;
  if (D.23393 != 0) goto <D.23411>; else goto <D.23413>;
  <D.23413>:
  D.23395 = ctx->level;
  D.23396 = D.23395 & 128;
  if (D.23396 != 0) goto <D.23411>; else goto <D.23412>;
  <D.23411>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23378 = ctx->ip_offset;
    D.23414 = stack_slot_get_name (top);
    D.23415 = monoeg_g_strdup_printf ("Argument type %s not valid for brtrue/brfalse at 0x%04x", D.23414, D.23378);
    vinfo->info.message = D.23415;
    vinfo->exception_type = 4;
    D.23386 = ctx->list;
    D.23416 = monoeg_g_slist_prepend (D.23386, vinfo);
    ctx->list = D.23416;
  }
  ctx->verifiable = 0;
  D.23395 = ctx->level;
  D.23399 = D.23395 & 16;
  if (D.23399 != 0) goto <D.23417>; else goto <D.23418>;
  <D.23417>:
  ctx->valid = 0;
  <D.23418>:
  <D.23412>:
  <D.23410>:
  check_unmanaged_pointer (ctx, top);
}


is_valid_bool_arg (struct ILStackDesc * arg)
{
  int D.23422;
  int D.23424;
  int D.23426;
  gboolean D.23427;
  int D.23428;
  struct MonoType * D.23429;
  _Bool D.23430;
  long int D.23431;
  long int D.23432;
  unsigned char D.23435;
  int D.23436;
  struct MonoGenericClass * D.23437;
  struct MonoClass * D.23438;
  unsigned char D.23439;
  unsigned char D.23440;
  _Bool D.23441;

  D.23422 = stack_slot_is_managed_pointer (arg);
  if (D.23422 != 0) goto <D.23420>; else goto <D.23423>;
  <D.23423>:
  D.23424 = stack_slot_is_boxed_value (arg);
  if (D.23424 != 0) goto <D.23420>; else goto <D.23425>;
  <D.23425>:
  D.23426 = stack_slot_is_null_literal (arg);
  if (D.23426 != 0) goto <D.23420>; else goto <D.23421>;
  <D.23420>:
  D.23427 = 1;
  return D.23427;
  <D.23421>:
  D.23428 = stack_slot_get_underlying_type (arg);
  switch (D.23428) <default: <D.18277>, case 1: <D.18264>, case 2: <D.18265>, case 3: <D.18266>, case 5: <D.18267>, case 6: <D.18268>>
  <D.18264>:
  <D.18265>:
  <D.18266>:
  <D.18267>:
  D.23427 = 1;
  return D.23427;
  <D.18268>:
  D.23429 = arg->type;
  D.23430 = D.23429 == 0B;
  D.23431 = (long int) D.23430;
  D.23432 = __builtin_expect (D.23431, 0);
  if (D.23432 != 0) goto <D.23433>; else goto <D.23434>;
  <D.23433>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1433, "arg->type");
  <D.23434>:
  D.23429 = arg->type;
  D.23435 = D.23429->type;
  D.23436 = (int) D.23435;
  switch (D.23436) <default: <D.23442>, case 14: <D.18270>, case 15: <D.18275>, case 18: <D.18269>, case 20: <D.18273>, case 21: <D.18276>, case 27: <D.18274>, case 28: <D.18271>, case 29: <D.18272>>
  <D.18269>:
  <D.18270>:
  <D.18271>:
  <D.18272>:
  <D.18273>:
  <D.18274>:
  <D.18275>:
  D.23427 = 1;
  return D.23427;
  <D.18276>:
  D.23429 = arg->type;
  D.23437 = D.23429->data.generic_class;
  D.23438 = D.23437->container_class;
  D.23439 = BIT_FIELD_REF <*D.23438, 8, 256>;
  D.23440 = D.23439 & 8;
  D.23441 = D.23440 == 0;
  D.23427 = (gboolean) D.23441;
  return D.23427;
  <D.23442>:
  <D.18277>:
  D.23427 = 0;
  return D.23427;
}


check_unmanaged_pointer (struct VerifyContext * ctx, struct ILStackDesc * value)
{
  int D.23444;
  int D.23449;
  int D.23451;
  int D.23452;
  unsigned int D.23453;
  gchar * D.23454;
  struct GSList * D.23455;
  struct GSList * D.23456;
  int D.23457;
  gboolean D.23460;

  D.23444 = stack_slot_get_type (value);
  if (D.23444 == 5) goto <D.23445>; else goto <D.23446>;
  <D.23445>:
  D.23449 = ctx->verifiable;
  if (D.23449 != 0) goto <D.23447>; else goto <D.23450>;
  <D.23450>:
  D.23451 = ctx->level;
  D.23452 = D.23451 & 128;
  if (D.23452 != 0) goto <D.23447>; else goto <D.23448>;
  <D.23447>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23453 = ctx->ip_offset;
    D.23454 = monoeg_g_strdup_printf ("Unmanaged pointer is not a verifiable type at 0x%04x", D.23453);
    vinfo->info.message = D.23454;
    vinfo->exception_type = 4;
    D.23455 = ctx->list;
    D.23456 = monoeg_g_slist_prepend (D.23455, vinfo);
    ctx->list = D.23456;
  }
  ctx->verifiable = 0;
  D.23451 = ctx->level;
  D.23457 = D.23451 & 16;
  if (D.23457 != 0) goto <D.23458>; else goto <D.23459>;
  <D.23458>:
  ctx->valid = 0;
  <D.23459>:
  <D.23448>:
  D.23460 = 0;
  return D.23460;
  <D.23446>:
  D.23460 = 1;
  return D.23460;
}


do_switch (struct VerifyContext * ctx, int count, const unsigned char * data)
{
  unsigned int D.23462;
  int D.23463;
  unsigned int D.23464;
  unsigned int D.23465;
  unsigned int D.23466;
  int D.23467;
  int D.23470;
  int D.23473;
  int D.23478;
  int D.23480;
  int D.23481;
  gchar * D.23482;
  struct GSList * D.23483;
  struct GSList * D.23484;
  int D.23485;
  int D.23488;
  sizetype D.23489;
  const guint32 * D.23490;
  unsigned int D.23491;
  unsigned int base.76;
  unsigned int D.23493;
  int D.23497;
  gchar * D.23498;
  struct GSList * D.23499;
  unsigned int target.77;
  struct MonoMethodHeader * D.23501;
  int D.23502;
  gchar * D.23506;
  struct GSList * D.23507;
  gchar * D.23510;
  struct GSList * D.23511;
  struct ILCodeDesc * D.23513;
  long unsigned int D.23514;
  long unsigned int D.23515;
  struct ILCodeDesc * D.23516;
  struct ILCodeDesc * D.23517;
  int i;
  int base;
  struct ILStackDesc * value;

  D.23462 = ctx->ip_offset;
  D.23463 = count * 4;
  D.23464 = (unsigned int) D.23463;
  D.23465 = D.23462 + D.23464;
  D.23466 = D.23465 + 5;
  base = (int) D.23466;
  D.23467 = check_underflow (ctx, 1);
  if (D.23467 == 0) goto <D.23468>; else goto <D.23469>;
  <D.23468>:
  return;
  <D.23469>:
  value = stack_pop (ctx);
  D.23470 = stack_slot_get_type (value);
  if (D.23470 != 1) goto <D.23471>; else goto <D.23472>;
  <D.23471>:
  D.23473 = stack_slot_get_type (value);
  if (D.23473 != 3) goto <D.23474>; else goto <D.23475>;
  <D.23474>:
  D.23478 = ctx->verifiable;
  if (D.23478 != 0) goto <D.23476>; else goto <D.23479>;
  <D.23479>:
  D.23480 = ctx->level;
  D.23481 = D.23480 & 128;
  if (D.23481 != 0) goto <D.23476>; else goto <D.23477>;
  <D.23476>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23462 = ctx->ip_offset;
    D.23482 = monoeg_g_strdup_printf ("Invalid argument to switch at 0x%04x", D.23462);
    vinfo->info.message = D.23482;
    vinfo->exception_type = 4;
    D.23483 = ctx->list;
    D.23484 = monoeg_g_slist_prepend (D.23483, vinfo);
    ctx->list = D.23484;
  }
  ctx->verifiable = 0;
  D.23480 = ctx->level;
  D.23485 = D.23480 & 16;
  if (D.23485 != 0) goto <D.23486>; else goto <D.23487>;
  <D.23486>:
  ctx->valid = 0;
  <D.23487>:
  <D.23477>:
  <D.23475>:
  <D.23472>:
  i = 0;
  goto <D.19262>;
  <D.19261>:
  {
    int target;

    D.23488 = i * 4;
    D.23489 = (sizetype) D.23488;
    D.23490 = data + D.23489;
    D.23491 = *D.23490;
    base.76 = (unsigned int) base;
    D.23493 = D.23491 + base.76;
    target = (int) D.23493;
    if (target < 0) goto <D.23494>; else goto <D.23496>;
    <D.23496>:
    D.23497 = ctx->code_size;
    if (D.23497 <= target) goto <D.23494>; else goto <D.23495>;
    <D.23494>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23462 = ctx->ip_offset;
      D.23498 = monoeg_g_strdup_printf ("Switch target %x out of code at 0x%04x", i, D.23462);
      vinfo->info.message = D.23498;
      vinfo->exception_type = 3;
      D.23483 = ctx->list;
      D.23499 = monoeg_g_slist_prepend (D.23483, vinfo);
      ctx->list = D.23499;
    }
    ctx->valid = 0;
    return;
    <D.23495>:
    target.77 = (unsigned int) target;
    D.23462 = ctx->ip_offset;
    D.23501 = ctx->header;
    D.23502 = is_valid_branch_instruction (D.23501, D.23462, target.77);
    switch (D.23502) <default: <D.23512>, case 1: <D.19256>, case 2: <D.19259>>
    <D.19256>:
    D.23478 = ctx->verifiable;
    if (D.23478 != 0) goto <D.23503>; else goto <D.23505>;
    <D.23505>:
    D.23480 = ctx->level;
    D.23481 = D.23480 & 128;
    if (D.23481 != 0) goto <D.23503>; else goto <D.23504>;
    <D.23503>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23462 = ctx->ip_offset;
      D.23506 = monoeg_g_strdup_printf ("Switch target %x escapes out of exception block at 0x%04x", i, D.23462);
      vinfo->info.message = D.23506;
      vinfo->exception_type = 4;
      D.23483 = ctx->list;
      D.23507 = monoeg_g_slist_prepend (D.23483, vinfo);
      ctx->list = D.23507;
    }
    ctx->verifiable = 0;
    D.23480 = ctx->level;
    D.23485 = D.23480 & 16;
    if (D.23485 != 0) goto <D.23508>; else goto <D.23509>;
    <D.23508>:
    ctx->valid = 0;
    <D.23509>:
    <D.23504>:
    goto <D.19258>;
    <D.19259>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23462 = ctx->ip_offset;
      D.23510 = monoeg_g_strdup_printf ("Switch target %x escapes out of exception block at 0x%04x", i, D.23462);
      vinfo->info.message = D.23510;
      vinfo->exception_type = 3;
      D.23483 = ctx->list;
      D.23511 = monoeg_g_slist_prepend (D.23483, vinfo);
      ctx->list = D.23511;
    }
    ctx->valid = 0;
    return;
    <D.23512>:
    <D.19258>:
    D.23513 = ctx->code;
    D.23514 = (long unsigned int) target;
    D.23515 = D.23514 * 16;
    D.23516 = D.23513 + D.23515;
    D.23517 = &ctx->eval;
    merge_stacks (ctx, D.23517, D.23516, 0, 1);
  }
  i = i + 1;
  <D.19262>:
  if (i < count) goto <D.19261>; else goto <D.19263>;
  <D.19263>:
}


do_load_indirect (struct VerifyContext * ctx, int opcode)
{
  unsigned int D.23519;
  unsigned int D.23520;
  int D.23521;
  int D.23524;
  int D.23529;
  int D.23531;
  int D.23532;
  unsigned int D.23533;
  gchar * D.23534;
  struct GSList * D.23535;
  struct GSList * D.23536;
  int D.23537;
  struct MonoType * D.23540;
  struct ILStackDesc * D.23541;
  int D.23546;
  struct MonoType * D.23548;
  struct MonoClass * D.23549;
  unsigned char D.23550;
  unsigned char D.23551;
  gchar * D.23555;
  struct GSList * D.23556;
  struct MonoType * D.23559;
  struct ILStackDesc * D.23560;
  struct MonoType * D.23562;
  struct MonoType * D.23563;
  int D.23564;
  gchar * D.23570;
  struct GSList * D.23571;
  struct MonoType * D.23574;
  struct ILStackDesc * D.23575;
  struct ILStackDesc * value;

  D.23519 = ctx->prefix_set;
  D.23520 = D.23519 & 4294967292;
  ctx->prefix_set = D.23520;
  D.23521 = check_underflow (ctx, 1);
  if (D.23521 == 0) goto <D.23522>; else goto <D.23523>;
  <D.23522>:
  return;
  <D.23523>:
  value = stack_pop (ctx);
  D.23524 = stack_slot_is_managed_pointer (value);
  if (D.23524 == 0) goto <D.23525>; else goto <D.23526>;
  <D.23525>:
  D.23529 = ctx->verifiable;
  if (D.23529 != 0) goto <D.23527>; else goto <D.23530>;
  <D.23530>:
  D.23531 = ctx->level;
  D.23532 = D.23531 & 128;
  if (D.23532 != 0) goto <D.23527>; else goto <D.23528>;
  <D.23527>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23533 = ctx->ip_offset;
    D.23534 = monoeg_g_strdup_printf ("Load indirect not using a manager pointer at 0x%04x", D.23533);
    vinfo->info.message = D.23534;
    vinfo->exception_type = 4;
    D.23535 = ctx->list;
    D.23536 = monoeg_g_slist_prepend (D.23535, vinfo);
    ctx->list = D.23536;
  }
  ctx->verifiable = 0;
  D.23531 = ctx->level;
  D.23537 = D.23531 & 16;
  if (D.23537 != 0) goto <D.23538>; else goto <D.23539>;
  <D.23538>:
  ctx->valid = 0;
  <D.23539>:
  <D.23528>:
  D.23540 = mono_type_from_opcode (opcode);
  D.23541 = stack_push (ctx);
  set_stack_value (ctx, D.23541, D.23540, 0);
  return;
  <D.23526>:
  if (opcode == 80) goto <D.23542>; else goto <D.23543>;
  <D.23542>:
  D.23546 = stack_slot_get_underlying_type (value);
  if (D.23546 != 6) goto <D.23544>; else goto <D.23547>;
  <D.23547>:
  D.23548 = value->type;
  D.23549 = mono_class_from_mono_type (D.23548);
  D.23550 = BIT_FIELD_REF <*D.23549, 8, 256>;
  D.23551 = D.23550 & 8;
  if (D.23551 != 0) goto <D.23544>; else goto <D.23545>;
  <D.23544>:
  D.23529 = ctx->verifiable;
  if (D.23529 != 0) goto <D.23552>; else goto <D.23554>;
  <D.23554>:
  D.23531 = ctx->level;
  D.23532 = D.23531 & 128;
  if (D.23532 != 0) goto <D.23552>; else goto <D.23553>;
  <D.23552>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23533 = ctx->ip_offset;
    D.23555 = monoeg_g_strdup_printf ("Invalid type at stack for ldind_ref expected object byref operation at 0x%04x", D.23533);
    vinfo->info.message = D.23555;
    vinfo->exception_type = 4;
    D.23535 = ctx->list;
    D.23556 = monoeg_g_slist_prepend (D.23535, vinfo);
    ctx->list = D.23556;
  }
  ctx->verifiable = 0;
  D.23531 = ctx->level;
  D.23537 = D.23531 & 16;
  if (D.23537 != 0) goto <D.23557>; else goto <D.23558>;
  <D.23557>:
  ctx->valid = 0;
  <D.23558>:
  <D.23553>:
  <D.23545>:
  D.23548 = value->type;
  D.23559 = mono_type_get_type_byval (D.23548);
  D.23560 = stack_push (ctx);
  set_stack_value (ctx, D.23560, D.23559, 0);
  goto <D.23561>;
  <D.23543>:
  D.23548 = value->type;
  D.23562 = mono_type_get_type_byval (D.23548);
  D.23563 = mono_type_from_opcode (opcode);
  D.23564 = verify_type_compatibility_full (ctx, D.23563, D.23562, 1);
  if (D.23564 == 0) goto <D.23565>; else goto <D.23566>;
  <D.23565>:
  D.23529 = ctx->verifiable;
  if (D.23529 != 0) goto <D.23567>; else goto <D.23569>;
  <D.23569>:
  D.23531 = ctx->level;
  D.23532 = D.23531 & 128;
  if (D.23532 != 0) goto <D.23567>; else goto <D.23568>;
  <D.23567>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23533 = ctx->ip_offset;
    D.23570 = monoeg_g_strdup_printf ("Invalid type at stack for ldind 0x%x operation at 0x%04x", opcode, D.23533);
    vinfo->info.message = D.23570;
    vinfo->exception_type = 4;
    D.23535 = ctx->list;
    D.23571 = monoeg_g_slist_prepend (D.23535, vinfo);
    ctx->list = D.23571;
  }
  ctx->verifiable = 0;
  D.23531 = ctx->level;
  D.23537 = D.23531 & 16;
  if (D.23537 != 0) goto <D.23572>; else goto <D.23573>;
  <D.23572>:
  ctx->valid = 0;
  <D.23573>:
  <D.23568>:
  <D.23566>:
  D.23574 = mono_type_from_opcode (opcode);
  D.23575 = stack_push (ctx);
  set_stack_value (ctx, D.23575, D.23574, 0);
  <D.23561>:
}


mono_type_from_opcode (int opcode)
{
  struct MonoType * D.23577;
  struct MonoClass * D.23578;
  struct MonoClass * D.23579;
  struct MonoClass * D.23580;
  struct MonoClass * D.23581;
  struct MonoClass * D.23582;
  struct MonoClass * D.23583;
  struct MonoClass * D.23584;
  struct MonoClass * D.23585;

  switch (opcode) <default: <D.19132>, case 70: <D.19094>, case 71: <D.19095>, case 72: <D.19100>, case 73: <D.19101>, case 74: <D.19106>, case 75: <D.19107>, case 76: <D.19112>, case 77: <D.19124>, case 78: <D.19116>, case 79: <D.19120>, case 80: <D.19128>, case 81: <D.19129>, case 82: <D.19096>, case 83: <D.19102>, case 84: <D.19108>, case 85: <D.19113>, case 86: <D.19117>, case 87: <D.19121>, case 144: <D.19097>, case 145: <D.19098>, case 146: <D.19103>, case 147: <D.19104>, case 148: <D.19109>, case 149: <D.19110>, case 150: <D.19114>, case 151: <D.19126>, case 152: <D.19118>, case 153: <D.19122>, case 154: <D.19130>, case 155: <D.19127>, case 156: <D.19099>, case 157: <D.19105>, case 158: <D.19111>, case 159: <D.19115>, case 160: <D.19119>, case 161: <D.19123>, case 162: <D.19131>, case 223: <D.19125>>
  <D.19094>:
  <D.19095>:
  <D.19096>:
  <D.19097>:
  <D.19098>:
  <D.19099>:
  D.23578 = mono_defaults.sbyte_class;
  D.23577 = &D.23578->byval_arg;
  return D.23577;
  <D.19100>:
  <D.19101>:
  <D.19102>:
  <D.19103>:
  <D.19104>:
  <D.19105>:
  D.23579 = mono_defaults.int16_class;
  D.23577 = &D.23579->byval_arg;
  return D.23577;
  <D.19106>:
  <D.19107>:
  <D.19108>:
  <D.19109>:
  <D.19110>:
  <D.19111>:
  D.23580 = mono_defaults.int32_class;
  D.23577 = &D.23580->byval_arg;
  return D.23577;
  <D.19112>:
  <D.19113>:
  <D.19114>:
  <D.19115>:
  D.23581 = mono_defaults.int64_class;
  D.23577 = &D.23581->byval_arg;
  return D.23577;
  <D.19116>:
  <D.19117>:
  <D.19118>:
  <D.19119>:
  D.23582 = mono_defaults.single_class;
  D.23577 = &D.23582->byval_arg;
  return D.23577;
  <D.19120>:
  <D.19121>:
  <D.19122>:
  <D.19123>:
  D.23583 = mono_defaults.double_class;
  D.23577 = &D.23583->byval_arg;
  return D.23577;
  <D.19124>:
  <D.19125>:
  <D.19126>:
  <D.19127>:
  D.23584 = mono_defaults.int_class;
  D.23577 = &D.23584->byval_arg;
  return D.23577;
  <D.19128>:
  <D.19129>:
  <D.19130>:
  <D.19131>:
  D.23585 = mono_defaults.object_class;
  D.23577 = &D.23585->byval_arg;
  return D.23577;
  <D.19132>:
  monoeg_g_log (0B, 4, "unknown opcode %02x in mono_type_from_opcode ", opcode);
  <D.19133>:
  goto <D.19133>;
  D.23577 = 0B;
  return D.23577;
}


do_store_indirect (struct VerifyContext * ctx, int opcode)
{
  unsigned int D.23587;
  unsigned int D.23588;
  int D.23589;
  int D.23592;
  int D.23595;
  int D.23600;
  int D.23602;
  int D.23603;
  unsigned int D.23604;
  gchar * D.23605;
  struct GSList * D.23606;
  struct GSList * D.23607;
  int D.23608;
  int D.23611;
  gchar * D.23617;
  struct GSList * D.23618;
  struct MonoType * D.23621;
  struct MonoType * D.23622;
  struct MonoType * D.23623;
  int D.23624;
  gchar * D.23630;
  struct GSList * D.23631;
  struct MonoType * D.23634;
  int D.23635;
  gchar * D.23641;
  struct GSList * D.23642;
  struct ILStackDesc * addr;
  struct ILStackDesc * val;

  D.23587 = ctx->prefix_set;
  D.23588 = D.23587 & 4294967292;
  ctx->prefix_set = D.23588;
  D.23589 = check_underflow (ctx, 2);
  if (D.23589 == 0) goto <D.23590>; else goto <D.23591>;
  <D.23590>:
  return;
  <D.23591>:
  val = stack_pop (ctx);
  addr = stack_pop (ctx);
  check_unmanaged_pointer (ctx, addr);
  D.23592 = stack_slot_is_managed_pointer (addr);
  if (D.23592 == 0) goto <D.23593>; else goto <D.23594>;
  <D.23593>:
  D.23595 = stack_slot_get_type (addr);
  if (D.23595 != 5) goto <D.23596>; else goto <D.23597>;
  <D.23596>:
  D.23600 = ctx->verifiable;
  if (D.23600 != 0) goto <D.23598>; else goto <D.23601>;
  <D.23601>:
  D.23602 = ctx->level;
  D.23603 = D.23602 & 128;
  if (D.23603 != 0) goto <D.23598>; else goto <D.23599>;
  <D.23598>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23604 = ctx->ip_offset;
    D.23605 = monoeg_g_strdup_printf ("Invalid non-pointer argument to stind at 0x%04x", D.23604);
    vinfo->info.message = D.23605;
    vinfo->exception_type = 4;
    D.23606 = ctx->list;
    D.23607 = monoeg_g_slist_prepend (D.23606, vinfo);
    ctx->list = D.23607;
  }
  ctx->verifiable = 0;
  D.23602 = ctx->level;
  D.23608 = D.23602 & 16;
  if (D.23608 != 0) goto <D.23609>; else goto <D.23610>;
  <D.23609>:
  ctx->valid = 0;
  <D.23610>:
  <D.23599>:
  return;
  <D.23597>:
  <D.23594>:
  D.23611 = stack_slot_is_managed_mutability_pointer (addr);
  if (D.23611 != 0) goto <D.23612>; else goto <D.23613>;
  <D.23612>:
  D.23600 = ctx->verifiable;
  if (D.23600 != 0) goto <D.23614>; else goto <D.23616>;
  <D.23616>:
  D.23602 = ctx->level;
  D.23603 = D.23602 & 128;
  if (D.23603 != 0) goto <D.23614>; else goto <D.23615>;
  <D.23614>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23604 = ctx->ip_offset;
    D.23617 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with stind at 0x%04x", D.23604);
    vinfo->info.message = D.23617;
    vinfo->exception_type = 4;
    D.23606 = ctx->list;
    D.23618 = monoeg_g_slist_prepend (D.23606, vinfo);
    ctx->list = D.23618;
  }
  ctx->verifiable = 0;
  D.23602 = ctx->level;
  D.23608 = D.23602 & 16;
  if (D.23608 != 0) goto <D.23619>; else goto <D.23620>;
  <D.23619>:
  ctx->valid = 0;
  <D.23620>:
  <D.23615>:
  return;
  <D.23613>:
  D.23621 = addr->type;
  D.23622 = mono_type_get_type_byval (D.23621);
  D.23623 = mono_type_from_opcode (opcode);
  D.23624 = verify_type_compatibility_full (ctx, D.23623, D.23622, 1);
  if (D.23624 == 0) goto <D.23625>; else goto <D.23626>;
  <D.23625>:
  D.23600 = ctx->verifiable;
  if (D.23600 != 0) goto <D.23627>; else goto <D.23629>;
  <D.23629>:
  D.23602 = ctx->level;
  D.23603 = D.23602 & 128;
  if (D.23603 != 0) goto <D.23627>; else goto <D.23628>;
  <D.23627>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23604 = ctx->ip_offset;
    D.23630 = monoeg_g_strdup_printf ("Invalid addr type at stack for stind 0x%x operation at 0x%04x", opcode, D.23604);
    vinfo->info.message = D.23630;
    vinfo->exception_type = 4;
    D.23606 = ctx->list;
    D.23631 = monoeg_g_slist_prepend (D.23606, vinfo);
    ctx->list = D.23631;
  }
  ctx->verifiable = 0;
  D.23602 = ctx->level;
  D.23608 = D.23602 & 16;
  if (D.23608 != 0) goto <D.23632>; else goto <D.23633>;
  <D.23632>:
  ctx->valid = 0;
  <D.23633>:
  <D.23628>:
  <D.23626>:
  D.23634 = mono_type_from_opcode (opcode);
  D.23635 = verify_stack_type_compatibility (ctx, D.23634, val);
  if (D.23635 == 0) goto <D.23636>; else goto <D.23637>;
  <D.23636>:
  D.23600 = ctx->verifiable;
  if (D.23600 != 0) goto <D.23638>; else goto <D.23640>;
  <D.23640>:
  D.23602 = ctx->level;
  D.23603 = D.23602 & 128;
  if (D.23603 != 0) goto <D.23638>; else goto <D.23639>;
  <D.23638>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23604 = ctx->ip_offset;
    D.23641 = monoeg_g_strdup_printf ("Invalid value type at stack for stind 0x%x operation at 0x%04x", opcode, D.23604);
    vinfo->info.message = D.23641;
    vinfo->exception_type = 4;
    D.23606 = ctx->list;
    D.23642 = monoeg_g_slist_prepend (D.23606, vinfo);
    ctx->list = D.23642;
  }
  ctx->verifiable = 0;
  D.23602 = ctx->level;
  D.23608 = D.23602 & 16;
  if (D.23608 != 0) goto <D.23643>; else goto <D.23644>;
  <D.23643>:
  ctx->valid = 0;
  <D.23644>:
  <D.23639>:
  <D.23637>:
}


do_unary_math_op (struct VerifyContext * ctx, int op)
{
  int D.23646;
  int D.23649;
  struct MonoType * D.23651;
  int D.23652;
  int D.23656;
  int D.23658;
  int D.23659;
  unsigned int D.23660;
  gchar * D.23661;
  struct GSList * D.23662;
  struct GSList * D.23663;
  int D.23664;
  struct ILStackDesc * value;

  D.23646 = check_underflow (ctx, 1);
  if (D.23646 == 0) goto <D.23647>; else goto <D.23648>;
  <D.23647>:
  return;
  <D.23648>:
  value = stack_pop (ctx);
  D.23649 = stack_slot_get_type (value);
  switch (D.23649) <default: <D.18960>, case 1: <D.18954>, case 2: <D.18955>, case 3: <D.18956>, case 4: <D.18958>, case 6: <D.18959>>
  <D.18954>:
  <D.18955>:
  <D.18956>:
  goto <D.18957>;
  <D.18958>:
  if (op == 101) goto <D.18957>; else goto <D.23650>;
  <D.23650>:
  <D.18959>:
  D.23651 = value->type;
  D.23652 = mono_type_is_enum_type (D.23651);
  if (D.23652 != 0) goto <D.18957>; else goto <D.23653>;
  <D.23653>:
  <D.18960>:
  D.23656 = ctx->verifiable;
  if (D.23656 != 0) goto <D.23654>; else goto <D.23657>;
  <D.23657>:
  D.23658 = ctx->level;
  D.23659 = D.23658 & 128;
  if (D.23659 != 0) goto <D.23654>; else goto <D.23655>;
  <D.23654>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23660 = ctx->ip_offset;
    D.23661 = monoeg_g_strdup_printf ("Invalid type at stack for unary not at 0x%04x", D.23660);
    vinfo->info.message = D.23661;
    vinfo->exception_type = 4;
    D.23662 = ctx->list;
    D.23663 = monoeg_g_slist_prepend (D.23662, vinfo);
    ctx->list = D.23663;
  }
  ctx->verifiable = 0;
  D.23658 = ctx->level;
  D.23664 = D.23658 & 16;
  if (D.23664 != 0) goto <D.23665>; else goto <D.23666>;
  <D.23665>:
  ctx->valid = 0;
  <D.23666>:
  <D.23655>:
  <D.18957>:
  stack_push_stack_val (ctx, value);
}


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

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


do_cpobj (struct VerifyContext * ctx, int token)
{
  int D.23673;
  int D.23676;
  int D.23681;
  int D.23683;
  int D.23684;
  unsigned int D.23685;
  gchar * D.23686;
  struct GSList * D.23687;
  struct GSList * D.23688;
  int D.23689;
  int D.23692;
  gchar * D.23698;
  struct GSList * D.23699;
  int D.23702;
  gchar * D.23708;
  struct GSList * D.23709;
  struct MonoType * D.23712;
  struct MonoType * D.23713;
  int D.23714;
  gchar * D.23720;
  struct GSList * D.23721;
  struct MonoType * D.23724;
  struct MonoType * D.23725;
  int D.23726;
  gchar * D.23732;
  struct GSList * D.23733;
  struct ILStackDesc * dest;
  struct ILStackDesc * src;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "cpobj");
  if (type == 0B) goto <D.23671>; else goto <D.23672>;
  <D.23671>:
  return;
  <D.23672>:
  D.23673 = check_underflow (ctx, 2);
  if (D.23673 == 0) goto <D.23674>; else goto <D.23675>;
  <D.23674>:
  return;
  <D.23675>:
  src = stack_pop (ctx);
  dest = stack_pop (ctx);
  D.23676 = stack_slot_is_managed_pointer (src);
  if (D.23676 == 0) goto <D.23677>; else goto <D.23678>;
  <D.23677>:
  D.23681 = ctx->verifiable;
  if (D.23681 != 0) goto <D.23679>; else goto <D.23682>;
  <D.23682>:
  D.23683 = ctx->level;
  D.23684 = D.23683 & 128;
  if (D.23684 != 0) goto <D.23679>; else goto <D.23680>;
  <D.23679>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23685 = ctx->ip_offset;
    D.23686 = monoeg_g_strdup_printf ("Invalid source of cpobj operation at 0x%04x", D.23685);
    vinfo->info.message = D.23686;
    vinfo->exception_type = 4;
    D.23687 = ctx->list;
    D.23688 = monoeg_g_slist_prepend (D.23687, vinfo);
    ctx->list = D.23688;
  }
  ctx->verifiable = 0;
  D.23683 = ctx->level;
  D.23689 = D.23683 & 16;
  if (D.23689 != 0) goto <D.23690>; else goto <D.23691>;
  <D.23690>:
  ctx->valid = 0;
  <D.23691>:
  <D.23680>:
  <D.23678>:
  D.23692 = stack_slot_is_managed_pointer (dest);
  if (D.23692 == 0) goto <D.23693>; else goto <D.23694>;
  <D.23693>:
  D.23681 = ctx->verifiable;
  if (D.23681 != 0) goto <D.23695>; else goto <D.23697>;
  <D.23697>:
  D.23683 = ctx->level;
  D.23684 = D.23683 & 128;
  if (D.23684 != 0) goto <D.23695>; else goto <D.23696>;
  <D.23695>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23685 = ctx->ip_offset;
    D.23698 = monoeg_g_strdup_printf ("Invalid destination of cpobj operation at 0x%04x", D.23685);
    vinfo->info.message = D.23698;
    vinfo->exception_type = 4;
    D.23687 = ctx->list;
    D.23699 = monoeg_g_slist_prepend (D.23687, vinfo);
    ctx->list = D.23699;
  }
  ctx->verifiable = 0;
  D.23683 = ctx->level;
  D.23689 = D.23683 & 16;
  if (D.23689 != 0) goto <D.23700>; else goto <D.23701>;
  <D.23700>:
  ctx->valid = 0;
  <D.23701>:
  <D.23696>:
  <D.23694>:
  D.23702 = stack_slot_is_managed_mutability_pointer (dest);
  if (D.23702 != 0) goto <D.23703>; else goto <D.23704>;
  <D.23703>:
  D.23681 = ctx->verifiable;
  if (D.23681 != 0) goto <D.23705>; else goto <D.23707>;
  <D.23707>:
  D.23683 = ctx->level;
  D.23684 = D.23683 & 128;
  if (D.23684 != 0) goto <D.23705>; else goto <D.23706>;
  <D.23705>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23685 = ctx->ip_offset;
    D.23708 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with cpobj at 0x%04x", D.23685);
    vinfo->info.message = D.23708;
    vinfo->exception_type = 4;
    D.23687 = ctx->list;
    D.23709 = monoeg_g_slist_prepend (D.23687, vinfo);
    ctx->list = D.23709;
  }
  ctx->verifiable = 0;
  D.23683 = ctx->level;
  D.23689 = D.23683 & 16;
  if (D.23689 != 0) goto <D.23710>; else goto <D.23711>;
  <D.23710>:
  ctx->valid = 0;
  <D.23711>:
  <D.23706>:
  <D.23704>:
  D.23712 = src->type;
  D.23713 = mono_type_get_type_byval (D.23712);
  D.23714 = verify_type_compatibility (ctx, type, D.23713);
  if (D.23714 == 0) goto <D.23715>; else goto <D.23716>;
  <D.23715>:
  D.23681 = ctx->verifiable;
  if (D.23681 != 0) goto <D.23717>; else goto <D.23719>;
  <D.23719>:
  D.23683 = ctx->level;
  D.23684 = D.23683 & 128;
  if (D.23684 != 0) goto <D.23717>; else goto <D.23718>;
  <D.23717>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23685 = ctx->ip_offset;
    D.23720 = monoeg_g_strdup_printf ("Token and source types of cpobj don\'t match at 0x%04x", D.23685);
    vinfo->info.message = D.23720;
    vinfo->exception_type = 4;
    D.23687 = ctx->list;
    D.23721 = monoeg_g_slist_prepend (D.23687, vinfo);
    ctx->list = D.23721;
  }
  ctx->verifiable = 0;
  D.23683 = ctx->level;
  D.23689 = D.23683 & 16;
  if (D.23689 != 0) goto <D.23722>; else goto <D.23723>;
  <D.23722>:
  ctx->valid = 0;
  <D.23723>:
  <D.23718>:
  <D.23716>:
  D.23724 = dest->type;
  D.23725 = mono_type_get_type_byval (D.23724);
  D.23726 = verify_type_compatibility (ctx, D.23725, type);
  if (D.23726 == 0) goto <D.23727>; else goto <D.23728>;
  <D.23727>:
  D.23681 = ctx->verifiable;
  if (D.23681 != 0) goto <D.23729>; else goto <D.23731>;
  <D.23731>:
  D.23683 = ctx->level;
  D.23684 = D.23683 & 128;
  if (D.23684 != 0) goto <D.23729>; else goto <D.23730>;
  <D.23729>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23685 = ctx->ip_offset;
    D.23732 = monoeg_g_strdup_printf ("Destination and token types of cpobj don\'t match at 0x%04x", D.23685);
    vinfo->info.message = D.23732;
    vinfo->exception_type = 4;
    D.23687 = ctx->list;
    D.23733 = monoeg_g_slist_prepend (D.23687, vinfo);
    ctx->list = D.23733;
  }
  ctx->verifiable = 0;
  D.23683 = ctx->level;
  D.23689 = D.23683 & 16;
  if (D.23689 != 0) goto <D.23734>; else goto <D.23735>;
  <D.23734>:
  ctx->valid = 0;
  <D.23735>:
  <D.23730>:
  <D.23728>:
}


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

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


do_ldobj_value (struct VerifyContext * ctx, int token)
{
  unsigned int D.23739;
  unsigned int D.23740;
  int D.23743;
  int D.23748;
  int D.23751;
  int D.23754;
  struct MonoType * D.23756;
  unsigned char D.23757;
  unsigned int D.23758;
  const char * D.23759;
  gchar * D.23760;
  struct GSList * D.23761;
  struct GSList * D.23762;
  int D.23763;
  int D.23768;
  int D.23770;
  int D.23771;
  gchar * D.23772;
  struct GSList * D.23773;
  int D.23774;
  struct MonoType * D.23777;
  int D.23778;
  gchar * D.23784;
  struct GSList * D.23785;
  struct ILStackDesc * D.23788;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "ldobj");
  D.23739 = ctx->prefix_set;
  D.23740 = D.23739 & 4294967292;
  ctx->prefix_set = D.23740;
  if (type == 0B) goto <D.23741>; else goto <D.23742>;
  <D.23741>:
  return;
  <D.23742>:
  D.23743 = check_underflow (ctx, 1);
  if (D.23743 == 0) goto <D.23744>; else goto <D.23745>;
  <D.23744>:
  return;
  <D.23745>:
  value = stack_pop (ctx);
  D.23748 = stack_slot_is_managed_pointer (value);
  if (D.23748 == 0) goto <D.23749>; else goto <D.23750>;
  <D.23749>:
  D.23751 = stack_slot_get_type (value);
  if (D.23751 != 3) goto <D.23752>; else goto <D.23753>;
  <D.23752>:
  D.23754 = stack_slot_get_type (value);
  if (D.23754 != 5) goto <D.23746>; else goto <D.23755>;
  <D.23755>:
  D.23756 = value->type;
  D.23757 = D.23756->type;
  if (D.23757 == 27) goto <D.23746>; else goto <D.23747>;
  <D.23746>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23758 = ctx->ip_offset;
    D.23759 = stack_slot_get_name (value);
    D.23760 = monoeg_g_strdup_printf ("Invalid argument %s to ldobj at 0x%04x", D.23759, D.23758);
    vinfo->info.message = D.23760;
    vinfo->exception_type = 3;
    D.23761 = ctx->list;
    D.23762 = monoeg_g_slist_prepend (D.23761, vinfo);
    ctx->list = D.23762;
  }
  ctx->valid = 0;
  return;
  <D.23747>:
  <D.23753>:
  <D.23750>:
  D.23763 = stack_slot_get_type (value);
  if (D.23763 == 3) goto <D.23764>; else goto <D.23765>;
  <D.23764>:
  D.23768 = ctx->verifiable;
  if (D.23768 != 0) goto <D.23766>; else goto <D.23769>;
  <D.23769>:
  D.23770 = ctx->level;
  D.23771 = D.23770 & 128;
  if (D.23771 != 0) goto <D.23766>; else goto <D.23767>;
  <D.23766>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23758 = ctx->ip_offset;
    D.23772 = monoeg_g_strdup_printf ("Using native pointer to ldobj at 0x%04x", D.23758);
    vinfo->info.message = D.23772;
    vinfo->exception_type = 4;
    D.23761 = ctx->list;
    D.23773 = monoeg_g_slist_prepend (D.23761, vinfo);
    ctx->list = D.23773;
  }
  ctx->verifiable = 0;
  D.23770 = ctx->level;
  D.23774 = D.23770 & 16;
  if (D.23774 != 0) goto <D.23775>; else goto <D.23776>;
  <D.23775>:
  ctx->valid = 0;
  <D.23776>:
  <D.23767>:
  <D.23765>:
  D.23756 = value->type;
  D.23777 = mono_type_get_type_byval (D.23756);
  D.23778 = verify_type_compatibility_full (ctx, type, D.23777, 1);
  if (D.23778 == 0) goto <D.23779>; else goto <D.23780>;
  <D.23779>:
  D.23768 = ctx->verifiable;
  if (D.23768 != 0) goto <D.23781>; else goto <D.23783>;
  <D.23783>:
  D.23770 = ctx->level;
  D.23771 = D.23770 & 128;
  if (D.23771 != 0) goto <D.23781>; else goto <D.23782>;
  <D.23781>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23758 = ctx->ip_offset;
    D.23784 = monoeg_g_strdup_printf ("Invalid type at stack for ldojb operation at 0x%04x", D.23758);
    vinfo->info.message = D.23784;
    vinfo->exception_type = 4;
    D.23761 = ctx->list;
    D.23785 = monoeg_g_slist_prepend (D.23761, vinfo);
    ctx->list = D.23785;
  }
  ctx->verifiable = 0;
  D.23770 = ctx->level;
  D.23774 = D.23770 & 16;
  if (D.23774 != 0) goto <D.23786>; else goto <D.23787>;
  <D.23786>:
  ctx->valid = 0;
  <D.23787>:
  <D.23782>:
  <D.23780>:
  D.23788 = stack_push (ctx);
  set_stack_value (ctx, D.23788, type, 0);
}


do_ldstr (struct VerifyContext * ctx, guint32 token)
{
  struct MonoMethod * D.23790;
  unsigned char D.23791;
  unsigned char D.23792;
  struct MonoImage * D.23795;
  unsigned char D.23796;
  unsigned char D.23797;
  unsigned int D.23800;
  unsigned int D.23803;
  gchar * D.23804;
  struct GSList * D.23805;
  struct GSList * D.23806;
  unsigned int D.23807;
  int D.23808;
  struct GSList * error.78;
  struct GSList * D.23814;
  gchar * D.23815;
  struct GSList * D.23816;
  int D.23817;
  struct MonoClass * D.23820;
  struct MonoType * D.23821;
  struct GSList * error;

  try
    {
      error = 0B;
      D.23790 = ctx->method;
      D.23791 = BIT_FIELD_REF <*D.23790, 8, 256>;
      D.23792 = D.23791 & 124;
      if (D.23792 == 0) goto <D.23793>; else goto <D.23794>;
      <D.23793>:
      D.23795 = ctx->image;
      D.23796 = BIT_FIELD_REF <*D.23795, 8, 224>;
      D.23797 = D.23796 & 8;
      if (D.23797 == 0) goto <D.23798>; else goto <D.23799>;
      <D.23798>:
      D.23800 = token & 4278190080;
      if (D.23800 != 1879048192) goto <D.23801>; else goto <D.23802>;
      <D.23801>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23803 = ctx->ip_offset;
        D.23804 = monoeg_g_strdup_printf ("Invalid string token %x at 0x%04x", token, D.23803);
        vinfo->info.message = D.23804;
        vinfo->exception_type = 12;
        D.23805 = ctx->list;
        D.23806 = monoeg_g_slist_prepend (D.23805, vinfo);
        ctx->list = D.23806;
      }
      ctx->valid = 0;
      return;
      <D.23802>:
      D.23807 = token & 16777215;
      D.23795 = ctx->image;
      D.23808 = mono_verifier_verify_string_signature (D.23795, D.23807, &error);
      if (D.23808 == 0) goto <D.23809>; else goto <D.23810>;
      <D.23809>:
      error.78 = error;
      if (error.78 != 0B) goto <D.23812>; else goto <D.23813>;
      <D.23812>:
      error.78 = error;
      D.23805 = ctx->list;
      D.23814 = monoeg_g_slist_concat (D.23805, error.78);
      ctx->list = D.23814;
      <D.23813>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23803 = ctx->ip_offset;
        D.23815 = monoeg_g_strdup_printf ("Invalid string index %x at 0x%04x", token, D.23803);
        vinfo->info.message = D.23815;
        vinfo->exception_type = 12;
        D.23805 = ctx->list;
        D.23816 = monoeg_g_slist_prepend (D.23805, vinfo);
        ctx->list = D.23816;
      }
      ctx->valid = 0;
      return;
      <D.23810>:
      <D.23799>:
      <D.23794>:
      D.23817 = check_overflow (ctx);
      if (D.23817 != 0) goto <D.23818>; else goto <D.23819>;
      <D.23818>:
      D.23820 = mono_defaults.string_class;
      D.23821 = &D.23820->byval_arg;
      stack_push_val (ctx, 6, D.23821);
      <D.23819>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


do_newobj (struct VerifyContext * ctx, int token)
{
  int D.23827;
  unsigned int D.23830;
  gchar * D.23831;
  struct GSList * D.23832;
  struct GSList * D.23833;
  struct MonoClass * D.23834;
  unsigned int D.23835;
  unsigned int D.23836;
  int D.23841;
  int D.23843;
  int D.23844;
  gchar * D.23845;
  struct GSList * D.23846;
  int D.23847;
  int D.23850;
  struct MonoMethod * D.23853;
  int D.23854;
  gchar * D.23860;
  struct GSList * D.23861;
  gchar * D.23866;
  struct GSList * D.23867;
  unsigned char D.23868;
  unsigned char D.23869;
  gchar * D.23872;
  struct GSList * D.23873;
  short unsigned int D.23874;
  int D.23875;
  int D.23876;
  struct MonoClass * D.23879;
  struct MonoClass * D.23880;
  _Bool D.23881;
  gchar * D.23886;
  struct GSList * D.23887;
  struct MonoType * D.23889;
  int D.23890;
  gchar * D.23896;
  struct GSList * D.23897;
  int D.23900;
  gchar * D.23906;
  struct GSList * D.23907;
  int D.23910;
  struct MonoType * D.23913;
  struct ILStackDesc * D.23914;
  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.23825>; else goto <D.23826>;
  <D.23825>:
  return;
  <D.23826>:
  D.23827 = mono_method_is_constructor (method);
  if (D.23827 == 0) goto <D.23828>; else goto <D.23829>;
  <D.23828>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23830 = ctx->ip_offset;
    D.23831 = monoeg_g_strdup_printf ("Method from token 0x%08x not a constructor at 0x%04x", token, D.23830);
    vinfo->info.message = D.23831;
    vinfo->exception_type = 3;
    D.23832 = ctx->list;
    D.23833 = monoeg_g_slist_prepend (D.23832, vinfo);
    ctx->list = D.23833;
  }
  ctx->valid = 0;
  return;
  <D.23829>:
  D.23834 = method->klass;
  D.23835 = D.23834->flags;
  D.23836 = D.23835 & 160;
  if (D.23836 != 0) goto <D.23837>; else goto <D.23838>;
  <D.23837>:
  D.23841 = ctx->verifiable;
  if (D.23841 != 0) goto <D.23839>; else goto <D.23842>;
  <D.23842>:
  D.23843 = ctx->level;
  D.23844 = D.23843 & 128;
  if (D.23844 != 0) goto <D.23839>; else goto <D.23840>;
  <D.23839>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23830 = ctx->ip_offset;
    D.23845 = monoeg_g_strdup_printf ("Trying to instantiate an abstract or interface type at 0x%04x", D.23830);
    vinfo->info.message = D.23845;
    vinfo->exception_type = 4;
    D.23832 = ctx->list;
    D.23846 = monoeg_g_slist_prepend (D.23832, vinfo);
    ctx->list = D.23846;
  }
  ctx->verifiable = 0;
  D.23843 = ctx->level;
  D.23847 = D.23843 & 16;
  if (D.23847 != 0) goto <D.23848>; else goto <D.23849>;
  <D.23848>:
  ctx->valid = 0;
  <D.23849>:
  <D.23840>:
  <D.23838>:
  D.23843 = ctx->level;
  D.23850 = D.23843 & 64;
  if (D.23850 == 0) goto <D.23851>; else goto <D.23852>;
  <D.23851>:
  D.23853 = ctx->method;
  D.23854 = mono_method_can_access_method_full (D.23853, method, 0B);
  if (D.23854 == 0) goto <D.23855>; else goto <D.23856>;
  <D.23855>:
  {
    char * from;
    char * to;

    D.23853 = ctx->method;
    from = mono_method_full_name (D.23853, 1);
    to = mono_method_full_name (method, 1);
    D.23841 = ctx->verifiable;
    if (D.23841 != 0) goto <D.23857>; else goto <D.23859>;
    <D.23859>:
    D.23843 = ctx->level;
    D.23844 = D.23843 & 128;
    if (D.23844 != 0) goto <D.23857>; else goto <D.23858>;
    <D.23857>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23830 = ctx->ip_offset;
      D.23860 = monoeg_g_strdup_printf ("Constructor %s not visible from %s at 0x%04x", to, from, D.23830);
      vinfo->info.message = D.23860;
      vinfo->exception_type = 9;
      D.23832 = ctx->list;
      D.23861 = monoeg_g_slist_prepend (D.23832, vinfo);
      ctx->list = D.23861;
    }
    ctx->verifiable = 0;
    D.23843 = ctx->level;
    D.23847 = D.23843 & 16;
    if (D.23847 != 0) goto <D.23862>; else goto <D.23863>;
    <D.23862>:
    ctx->valid = 0;
    <D.23863>:
    <D.23858>:
    monoeg_g_free (from);
    monoeg_g_free (to);
  }
  <D.23856>:
  <D.23852>:
  sig = mono_method_signature (method);
  if (sig == 0B) goto <D.23864>; else goto <D.23865>;
  <D.23864>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23830 = ctx->ip_offset;
    D.23866 = monoeg_g_strdup_printf ("Invalid constructor signature to newobj at 0x%04x", D.23830);
    vinfo->info.message = D.23866;
    vinfo->exception_type = 3;
    D.23832 = ctx->list;
    D.23867 = monoeg_g_slist_prepend (D.23832, vinfo);
    ctx->list = D.23867;
  }
  ctx->valid = 0;
  return;
  <D.23865>:
  D.23868 = BIT_FIELD_REF <*sig, 8, 112>;
  D.23869 = D.23868 & 64;
  if (D.23869 == 0) goto <D.23870>; else goto <D.23871>;
  <D.23870>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23830 = ctx->ip_offset;
    D.23872 = monoeg_g_strdup_printf ("Invalid constructor signature missing hasthis at 0x%04x", D.23830);
    vinfo->info.message = D.23872;
    vinfo->exception_type = 3;
    D.23832 = ctx->list;
    D.23873 = monoeg_g_slist_prepend (D.23832, vinfo);
    ctx->list = D.23873;
  }
  ctx->valid = 0;
  return;
  <D.23871>:
  D.23874 = sig->param_count;
  D.23875 = (int) D.23874;
  D.23876 = check_underflow (ctx, D.23875);
  if (D.23876 == 0) goto <D.23877>; else goto <D.23878>;
  <D.23877>:
  return;
  <D.23878>:
  D.23834 = method->klass;
  D.23879 = D.23834->parent;
  D.23880 = mono_defaults.multicastdelegate_class;
  D.23881 = D.23879 == D.23880;
  is_delegate = (gboolean) D.23881;
  if (is_delegate != 0) goto <D.23882>; else goto <D.23883>;
  <D.23882>:
  {
    struct ILStackDesc * funptr;

    D.23874 = sig->param_count;
    if (D.23874 != 2) goto <D.23884>; else goto <D.23885>;
    <D.23884>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23830 = ctx->ip_offset;
      D.23886 = monoeg_g_strdup_printf ("Invalid delegate constructor at 0x%04x", D.23830);
      vinfo->info.message = D.23886;
      vinfo->exception_type = 3;
      D.23832 = ctx->list;
      D.23887 = monoeg_g_slist_prepend (D.23832, vinfo);
      ctx->list = D.23887;
    }
    ctx->valid = 0;
    return;
    <D.23885>:
    funptr = stack_pop (ctx);
    value = stack_pop (ctx);
    D.23834 = method->klass;
    verify_delegate_compatibility (ctx, D.23834, value, funptr);
  }
  goto <D.23888>;
  <D.23883>:
  D.23874 = sig->param_count;
  D.23875 = (int) D.23874;
  i = D.23875 + -1;
  goto <D.19072>;
  <D.19071>:
  value = stack_pop (ctx);
  D.23889 = sig->params[i];
  D.23890 = verify_stack_type_compatibility (ctx, D.23889, value);
  if (D.23890 == 0) goto <D.23891>; else goto <D.23892>;
  <D.23891>:
  {
    char * stack_name;
    char * sig_name;

    stack_name = stack_slot_full_name (value);
    D.23889 = sig->params[i];
    sig_name = mono_type_full_name (D.23889);
    D.23841 = ctx->verifiable;
    if (D.23841 != 0) goto <D.23893>; else goto <D.23895>;
    <D.23895>:
    D.23843 = ctx->level;
    D.23844 = D.23843 & 128;
    if (D.23844 != 0) goto <D.23893>; else goto <D.23894>;
    <D.23893>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23830 = ctx->ip_offset;
      D.23896 = monoeg_g_strdup_printf ("Incompatible parameter value with constructor signature: %s X %s at 0x%04x", sig_name, stack_name, D.23830);
      vinfo->info.message = D.23896;
      vinfo->exception_type = 4;
      D.23832 = ctx->list;
      D.23897 = monoeg_g_slist_prepend (D.23832, vinfo);
      ctx->list = D.23897;
    }
    ctx->verifiable = 0;
    D.23843 = ctx->level;
    D.23847 = D.23843 & 16;
    if (D.23847 != 0) goto <D.23898>; else goto <D.23899>;
    <D.23898>:
    ctx->valid = 0;
    <D.23899>:
    <D.23894>:
    monoeg_g_free (stack_name);
    monoeg_g_free (sig_name);
  }
  <D.23892>:
  D.23900 = stack_slot_is_managed_mutability_pointer (value);
  if (D.23900 != 0) goto <D.23901>; else goto <D.23902>;
  <D.23901>:
  D.23841 = ctx->verifiable;
  if (D.23841 != 0) goto <D.23903>; else goto <D.23905>;
  <D.23905>:
  D.23843 = ctx->level;
  D.23844 = D.23843 & 128;
  if (D.23844 != 0) goto <D.23903>; else goto <D.23904>;
  <D.23903>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23830 = ctx->ip_offset;
    D.23906 = monoeg_g_strdup_printf ("Cannot use a readonly pointer as argument of newobj at 0x%04x", D.23830);
    vinfo->info.message = D.23906;
    vinfo->exception_type = 4;
    D.23832 = ctx->list;
    D.23907 = monoeg_g_slist_prepend (D.23832, vinfo);
    ctx->list = D.23907;
  }
  ctx->verifiable = 0;
  D.23843 = ctx->level;
  D.23847 = D.23843 & 16;
  if (D.23847 != 0) goto <D.23908>; else goto <D.23909>;
  <D.23908>:
  ctx->valid = 0;
  <D.23909>:
  <D.23904>:
  <D.23902>:
  i = i + -1;
  <D.19072>:
  if (i >= 0) goto <D.19071>; else goto <D.19073>;
  <D.19073>:
  <D.23888>:
  D.23910 = check_overflow (ctx);
  if (D.23910 != 0) goto <D.23911>; else goto <D.23912>;
  <D.23911>:
  D.23834 = method->klass;
  D.23913 = &D.23834->byval_arg;
  D.23914 = stack_push (ctx);
  set_stack_value (ctx, D.23914, D.23913, 0);
  <D.23912>:
}


verify_delegate_compatibility (struct VerifyContext * ctx, struct MonoClass * delegate, struct ILStackDesc * value, struct ILStackDesc * funptr)
{
  struct MonoMethodHeader * D.23916;
  int D.23919;
  struct MonoMethod * D.23921;
  int D.23924;
  int D.23926;
  int D.23927;
  unsigned int D.23928;
  gchar * D.23929;
  struct GSList * D.23930;
  struct GSList * D.23931;
  int D.23932;
  struct MonoMethodSignature * D.23938;
  gchar * D.23939;
  struct GSList * D.23940;
  struct MonoMethodSignature * D.23944;
  gchar * D.23945;
  struct GSList * D.23946;
  int iftmp.79;
  unsigned int D.23951;
  sizetype D.23952;
  const guint8 * D.23953;
  unsigned char D.23954;
  struct ILCodeDesc * D.23956;
  long unsigned int D.23957;
  long unsigned int D.23958;
  struct ILCodeDesc * D.23959;
  short unsigned int D.23960;
  int D.23961;
  int D.23962;
  unsigned int D.23964;
  sizetype D.23965;
  const guint8 * D.23966;
  unsigned char D.23967;
  short unsigned int D.23969;
  int D.23970;
  int D.23971;
  struct MonoMethodSignature * D.23975;
  short unsigned int D.23976;
  int D.23977;
  int D.23978;
  struct MonoMethodSignature * D.23979;
  short unsigned int D.23980;
  int D.23981;
  _Bool D.23982;
  struct MonoMethodSignature * D.23983;
  struct MonoMethodSignature * D.23984;
  int D.23985;
  struct MonoMethodSignature * D.23988;
  struct MonoMethodSignature * D.23989;
  gchar * D.23993;
  struct GSList * D.23994;
  unsigned int D.24006;
  sizetype D.24007;
  const guint8 * D.24008;
  unsigned char D.24009;
  long unsigned int D.24011;
  long unsigned int D.24012;
  struct ILCodeDesc * D.24013;
  short unsigned int D.24014;
  int D.24015;
  int D.24016;
  short unsigned int D.24021;
  gchar * D.24025;
  struct GSList * D.24026;
  long unsigned int D.24029;
  long unsigned int D.24030;
  struct ILCodeDesc * D.24031;
  short unsigned int D.24032;
  short unsigned int D.24033;
  struct MonoMethodSignature * D.24038;
  short unsigned int D.24039;
  struct MonoMethodSignature * D.24041;
  struct MonoType * D.24042;
  int D.24043;
  gchar * D.24047;
  struct GSList * D.24048;
  int D.24054;
  gchar * D.24062;
  struct GSList * D.24063;
  struct MonoClass * D.24067;
  struct MonoType * D.24068;
  int D.24069;
  int D.24072;
  gchar * D.24078;
  struct GSList * D.24079;
  int D.24082;
  gchar * D.24088;
  struct GSList * D.24089;
  struct MonoMethod * invoke;
  struct MonoMethod * method;
  const guint8 * ip;
  guint32 ip_offset;
  gboolean is_static_ldftn;
  gboolean is_first_arg_bound;

  D.23916 = ctx->header;
  ip = D.23916->code;
  ip_offset = ctx->ip_offset;
  is_static_ldftn = 0;
  is_first_arg_bound = 0;
  D.23919 = stack_slot_get_type (funptr);
  if (D.23919 != 5) goto <D.23917>; else goto <D.23920>;
  <D.23920>:
  D.23921 = funptr->method;
  if (D.23921 == 0B) goto <D.23917>; else goto <D.23918>;
  <D.23917>:
  D.23924 = ctx->verifiable;
  if (D.23924 != 0) goto <D.23922>; else goto <D.23925>;
  <D.23925>:
  D.23926 = ctx->level;
  D.23927 = D.23926 & 128;
  if (D.23927 != 0) goto <D.23922>; else goto <D.23923>;
  <D.23922>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23928 = ctx->ip_offset;
    D.23929 = monoeg_g_strdup_printf ("Invalid function pointer parameter for delegate constructor at 0x%04x", D.23928);
    vinfo->info.message = D.23929;
    vinfo->exception_type = 4;
    D.23930 = ctx->list;
    D.23931 = monoeg_g_slist_prepend (D.23930, vinfo);
    ctx->list = D.23931;
  }
  ctx->verifiable = 0;
  D.23926 = ctx->level;
  D.23932 = D.23926 & 16;
  if (D.23932 != 0) goto <D.23933>; else goto <D.23934>;
  <D.23933>:
  ctx->valid = 0;
  <D.23934>:
  <D.23923>:
  return;
  <D.23918>:
  invoke = mono_get_delegate_invoke (delegate);
  method = funptr->method;
  if (method == 0B) goto <D.23935>; else goto <D.23937>;
  <D.23937>:
  D.23938 = mono_method_signature (method);
  if (D.23938 == 0B) goto <D.23935>; else goto <D.23936>;
  <D.23935>:
  {
    char * name;

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

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23928 = ctx->ip_offset;
      D.23939 = monoeg_g_strdup_printf ("Invalid method on stack to create delegate %s construction at 0x%04x", name, D.23928);
      vinfo->info.message = D.23939;
      vinfo->exception_type = 3;
      D.23930 = ctx->list;
      D.23940 = monoeg_g_slist_prepend (D.23930, vinfo);
      ctx->list = D.23940;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.23936>:
  if (invoke == 0B) goto <D.23941>; else goto <D.23943>;
  <D.23943>:
  D.23944 = mono_method_signature (invoke);
  if (D.23944 == 0B) goto <D.23941>; else goto <D.23942>;
  <D.23941>:
  {
    char * name;

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

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23928 = ctx->ip_offset;
      D.23945 = monoeg_g_strdup_printf ("Delegate type %s with bad Invoke method at 0x%04x", name, D.23928);
      vinfo->info.message = D.23945;
      vinfo->exception_type = 3;
      D.23930 = ctx->list;
      D.23946 = monoeg_g_slist_prepend (D.23930, vinfo);
      ctx->list = D.23946;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.23942>:
  if (ip_offset > 5) goto <D.23950>; else goto <D.23948>;
  <D.23950>:
  D.23951 = ip_offset + 4294967290;
  D.23952 = (sizetype) D.23951;
  D.23953 = ip + D.23952;
  D.23954 = *D.23953;
  if (D.23954 == 254) goto <D.23955>; else goto <D.23948>;
  <D.23955>:
  D.23956 = ctx->code;
  D.23951 = ip_offset + 4294967290;
  D.23957 = (long unsigned int) D.23951;
  D.23958 = D.23957 * 16;
  D.23959 = D.23956 + D.23958;
  D.23960 = D.23959->flags;
  D.23961 = (int) D.23960;
  D.23962 = D.23961 & 1;
  if (D.23962 != 0) goto <D.23963>; else goto <D.23948>;
  <D.23963>:
  D.23964 = ip_offset + 4294967291;
  D.23965 = (sizetype) D.23964;
  D.23966 = ip + D.23965;
  D.23967 = *D.23966;
  if (D.23967 == 6) goto <D.23968>; else goto <D.23948>;
  <D.23968>:
  D.23969 = method->flags;
  D.23970 = (int) D.23969;
  D.23971 = D.23970 & 16;
  if (D.23971 != 0) goto <D.23972>; else goto <D.23948>;
  <D.23972>:
  iftmp.79 = 1;
  goto <D.23949>;
  <D.23948>:
  iftmp.79 = 0;
  <D.23949>:
  is_static_ldftn = iftmp.79;
  if (is_static_ldftn != 0) goto <D.23973>; else goto <D.23974>;
  <D.23973>:
  D.23975 = mono_method_signature (invoke);
  D.23976 = D.23975->param_count;
  D.23977 = (int) D.23976;
  D.23978 = D.23977 + 1;
  D.23979 = mono_method_signature (method);
  D.23980 = D.23979->param_count;
  D.23981 = (int) D.23980;
  D.23982 = D.23978 == D.23981;
  is_first_arg_bound = (gboolean) D.23982;
  <D.23974>:
  D.23983 = mono_method_signature (method);
  D.23984 = mono_method_signature (invoke);
  D.23985 = mono_delegate_signature_equal (D.23984, D.23983, is_first_arg_bound);
  if (D.23985 == 0) goto <D.23986>; else goto <D.23987>;
  <D.23986>:
  {
    char * fun_sig;
    char * invoke_sig;

    D.23988 = mono_method_signature (method);
    fun_sig = mono_signature_get_desc (D.23988, 0);
    D.23989 = mono_method_signature (invoke);
    invoke_sig = mono_signature_get_desc (D.23989, 0);
    D.23924 = ctx->verifiable;
    if (D.23924 != 0) goto <D.23990>; else goto <D.23992>;
    <D.23992>:
    D.23926 = ctx->level;
    D.23927 = D.23926 & 128;
    if (D.23927 != 0) goto <D.23990>; else goto <D.23991>;
    <D.23990>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23928 = ctx->ip_offset;
      D.23993 = monoeg_g_strdup_printf ("Function pointer signature \'%s\' doesn\'t match delegate\'s signature \'%s\' at 0x%04x", fun_sig, invoke_sig, D.23928);
      vinfo->info.message = D.23993;
      vinfo->exception_type = 4;
      D.23930 = ctx->list;
      D.23994 = monoeg_g_slist_prepend (D.23930, vinfo);
      ctx->list = D.23994;
    }
    ctx->verifiable = 0;
    D.23926 = ctx->level;
    D.23932 = D.23926 & 16;
    if (D.23932 != 0) goto <D.23995>; else goto <D.23996>;
    <D.23995>:
    ctx->valid = 0;
    <D.23996>:
    <D.23991>:
    monoeg_g_free (fun_sig);
    monoeg_g_free (invoke_sig);
  }
  <D.23987>:
  if (ip_offset > 5) goto <D.23999>; else goto <D.23997>;
  <D.23999>:
  D.23951 = ip_offset + 4294967290;
  D.23952 = (sizetype) D.23951;
  D.23953 = ip + D.23952;
  D.23954 = *D.23953;
  if (D.23954 == 254) goto <D.24000>; else goto <D.23997>;
  <D.24000>:
  D.23956 = ctx->code;
  D.23951 = ip_offset + 4294967290;
  D.23957 = (long unsigned int) D.23951;
  D.23958 = D.23957 * 16;
  D.23959 = D.23956 + D.23958;
  D.23960 = D.23959->flags;
  D.23961 = (int) D.23960;
  D.23962 = D.23961 & 1;
  if (D.23962 != 0) goto <D.24001>; else goto <D.23997>;
  <D.24001>:
  D.23964 = ip_offset + 4294967291;
  D.23965 = (sizetype) D.23964;
  D.23966 = ip + D.23965;
  D.23967 = *D.23966;
  if (D.23967 == 6) goto <D.24002>; else goto <D.23997>;
  <D.24002>:
  verify_ldftn_delegate (ctx, delegate, value, funptr);
  goto <D.23998>;
  <D.23997>:
  if (ip_offset > 6) goto <D.24005>; else goto <D.24003>;
  <D.24005>:
  D.24006 = ip_offset + 4294967289;
  D.24007 = (sizetype) D.24006;
  D.24008 = ip + D.24007;
  D.24009 = *D.24008;
  if (D.24009 == 37) goto <D.24010>; else goto <D.24003>;
  <D.24010>:
  D.23956 = ctx->code;
  D.24006 = ip_offset + 4294967289;
  D.24011 = (long unsigned int) D.24006;
  D.24012 = D.24011 * 16;
  D.24013 = D.23956 + D.24012;
  D.24014 = D.24013->flags;
  D.24015 = (int) D.24014;
  D.24016 = D.24015 & 1;
  if (D.24016 != 0) goto <D.24017>; else goto <D.24003>;
  <D.24017>:
  D.23951 = ip_offset + 4294967290;
  D.23952 = (sizetype) D.23951;
  D.23953 = ip + D.23952;
  D.23954 = *D.23953;
  if (D.23954 == 254) goto <D.24018>; else goto <D.24003>;
  <D.24018>:
  D.23956 = ctx->code;
  D.23951 = ip_offset + 4294967290;
  D.23957 = (long unsigned int) D.23951;
  D.23958 = D.23957 * 16;
  D.23959 = D.23956 + D.23958;
  D.23960 = D.23959->flags;
  D.23961 = (int) D.23960;
  D.23962 = D.23961 & 1;
  if (D.23962 != 0) goto <D.24019>; else goto <D.24003>;
  <D.24019>:
  D.23964 = ip_offset + 4294967291;
  D.23965 = (sizetype) D.23964;
  D.23966 = ip + D.23965;
  D.23967 = *D.23966;
  if (D.23967 == 7) goto <D.24020>; else goto <D.24003>;
  <D.24020>:
  D.23956 = ctx->code;
  D.23951 = ip_offset + 4294967290;
  D.23957 = (long unsigned int) D.23951;
  D.23958 = D.23957 * 16;
  D.23959 = D.23956 + D.23958;
  D.23956 = ctx->code;
  D.23951 = ip_offset + 4294967290;
  D.23957 = (long unsigned int) D.23951;
  D.23958 = D.23957 * 16;
  D.23959 = D.23956 + D.23958;
  D.23960 = D.23959->flags;
  D.24021 = D.23960 | 16;
  D.23959->flags = D.24021;
  goto <D.24004>;
  <D.24003>:
  D.23924 = ctx->verifiable;
  if (D.23924 != 0) goto <D.24022>; else goto <D.24024>;
  <D.24024>:
  D.23926 = ctx->level;
  D.23927 = D.23926 & 128;
  if (D.23927 != 0) goto <D.24022>; else goto <D.24023>;
  <D.24022>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23928 = ctx->ip_offset;
    D.24025 = monoeg_g_strdup_printf ("Invalid code sequence for delegate creation at 0x%04x", D.23928);
    vinfo->info.message = D.24025;
    vinfo->exception_type = 4;
    D.23930 = ctx->list;
    D.24026 = monoeg_g_slist_prepend (D.23930, vinfo);
    ctx->list = D.24026;
  }
  ctx->verifiable = 0;
  D.23926 = ctx->level;
  D.23932 = D.23926 & 16;
  if (D.23932 != 0) goto <D.24027>; else goto <D.24028>;
  <D.24027>:
  ctx->valid = 0;
  <D.24028>:
  <D.24023>:
  <D.24004>:
  <D.23998>:
  D.23956 = ctx->code;
  D.24029 = (long unsigned int) ip_offset;
  D.24030 = D.24029 * 16;
  D.24031 = D.23956 + D.24030;
  D.23956 = ctx->code;
  D.24029 = (long unsigned int) ip_offset;
  D.24030 = D.24029 * 16;
  D.24031 = D.23956 + D.24030;
  D.24032 = D.24031->flags;
  D.24033 = D.24032 | 16;
  D.24031->flags = D.24033;
  if (is_first_arg_bound != 0) goto <D.24034>; else goto <D.24035>;
  <D.24034>:
  D.24038 = mono_method_signature (method);
  D.24039 = D.24038->param_count;
  if (D.24039 == 0) goto <D.24036>; else goto <D.24040>;
  <D.24040>:
  D.24041 = mono_method_signature (method);
  D.24042 = D.24041->params[0];
  D.24043 = verify_stack_type_compatibility_full (ctx, D.24042, value, 0, 1);
  if (D.24043 == 0) goto <D.24036>; else goto <D.24037>;
  <D.24036>:
  D.23924 = ctx->verifiable;
  if (D.23924 != 0) goto <D.24044>; else goto <D.24046>;
  <D.24046>:
  D.23926 = ctx->level;
  D.23927 = D.23926 & 128;
  if (D.23927 != 0) goto <D.24044>; else goto <D.24045>;
  <D.24044>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23928 = ctx->ip_offset;
    D.24047 = monoeg_g_strdup_printf ("This object not compatible with function pointer for delegate creation at 0x%04x", D.23928);
    vinfo->info.message = D.24047;
    vinfo->exception_type = 4;
    D.23930 = ctx->list;
    D.24048 = monoeg_g_slist_prepend (D.23930, vinfo);
    ctx->list = D.24048;
  }
  ctx->verifiable = 0;
  D.23926 = ctx->level;
  D.23932 = D.23926 & 16;
  if (D.23932 != 0) goto <D.24049>; else goto <D.24050>;
  <D.24049>:
  ctx->valid = 0;
  <D.24050>:
  <D.24045>:
  <D.24037>:
  goto <D.24051>;
  <D.24035>:
  D.23969 = method->flags;
  D.23970 = (int) D.23969;
  D.23971 = D.23970 & 16;
  if (D.23971 != 0) goto <D.24052>; else goto <D.24053>;
  <D.24052>:
  D.24054 = stack_slot_is_null_literal (value);
  if (D.24054 == 0) goto <D.24055>; else goto <D.24056>;
  <D.24055>:
  if (is_first_arg_bound == 0) goto <D.24057>; else goto <D.24058>;
  <D.24057>:
  D.23924 = ctx->verifiable;
  if (D.23924 != 0) goto <D.24059>; else goto <D.24061>;
  <D.24061>:
  D.23926 = ctx->level;
  D.23927 = D.23926 & 128;
  if (D.23927 != 0) goto <D.24059>; else goto <D.24060>;
  <D.24059>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23928 = ctx->ip_offset;
    D.24062 = monoeg_g_strdup_printf ("Non-null this args used with static function for delegate creation at 0x%04x", D.23928);
    vinfo->info.message = D.24062;
    vinfo->exception_type = 4;
    D.23930 = ctx->list;
    D.24063 = monoeg_g_slist_prepend (D.23930, vinfo);
    ctx->list = D.24063;
  }
  ctx->verifiable = 0;
  D.23926 = ctx->level;
  D.23932 = D.23926 & 16;
  if (D.23932 != 0) goto <D.24064>; else goto <D.24065>;
  <D.24064>:
  ctx->valid = 0;
  <D.24065>:
  <D.24060>:
  <D.24058>:
  <D.24056>:
  goto <D.24066>;
  <D.24053>:
  D.24067 = method->klass;
  D.24068 = &D.24067->byval_arg;
  D.24069 = verify_stack_type_compatibility_full (ctx, D.24068, value, 0, 1);
  if (D.24069 == 0) goto <D.24070>; else goto <D.24071>;
  <D.24070>:
  D.24072 = stack_slot_is_null_literal (value);
  if (D.24072 == 0) goto <D.24073>; else goto <D.24074>;
  <D.24073>:
  D.23924 = ctx->verifiable;
  if (D.23924 != 0) goto <D.24075>; else goto <D.24077>;
  <D.24077>:
  D.23926 = ctx->level;
  D.23927 = D.23926 & 128;
  if (D.23927 != 0) goto <D.24075>; else goto <D.24076>;
  <D.24075>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23928 = ctx->ip_offset;
    D.24078 = monoeg_g_strdup_printf ("This object not compatible with function pointer for delegate creation at 0x%04x", D.23928);
    vinfo->info.message = D.24078;
    vinfo->exception_type = 4;
    D.23930 = ctx->list;
    D.24079 = monoeg_g_slist_prepend (D.23930, vinfo);
    ctx->list = D.24079;
  }
  ctx->verifiable = 0;
  D.23926 = ctx->level;
  D.23932 = D.23926 & 16;
  if (D.23932 != 0) goto <D.24080>; else goto <D.24081>;
  <D.24080>:
  ctx->valid = 0;
  <D.24081>:
  <D.24076>:
  <D.24074>:
  <D.24071>:
  <D.24066>:
  <D.24051>:
  D.24082 = stack_slot_get_type (value);
  if (D.24082 != 6) goto <D.24083>; else goto <D.24084>;
  <D.24083>:
  D.23924 = ctx->verifiable;
  if (D.23924 != 0) goto <D.24085>; else goto <D.24087>;
  <D.24087>:
  D.23926 = ctx->level;
  D.23927 = D.23926 & 128;
  if (D.23927 != 0) goto <D.24085>; else goto <D.24086>;
  <D.24085>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23928 = ctx->ip_offset;
    D.24088 = monoeg_g_strdup_printf ("Invalid first parameter for delegate creation at 0x%04x", D.23928);
    vinfo->info.message = D.24088;
    vinfo->exception_type = 4;
    D.23930 = ctx->list;
    D.24089 = monoeg_g_slist_prepend (D.23930, vinfo);
    ctx->list = D.24089;
  }
  ctx->verifiable = 0;
  D.23926 = ctx->level;
  D.23932 = D.23926 & 16;
  if (D.23932 != 0) goto <D.24090>; else goto <D.24091>;
  <D.24090>:
  ctx->valid = 0;
  <D.24091>:
  <D.24086>:
  <D.24084>:
}


verify_ldftn_delegate (struct VerifyContext * ctx, struct MonoClass * delegate, struct ILStackDesc * value, struct ILStackDesc * funptr)
{
  short unsigned int D.24093;
  unsigned int D.24094;
  unsigned int D.24095;
  struct MonoClass * D.24098;
  unsigned int D.24099;
  unsigned int D.24100;
  int D.24103;
  int D.24106;
  int D.24107;
  int D.24110;
  int D.24115;
  int D.24117;
  unsigned int D.24118;
  gchar * D.24119;
  struct GSList * D.24120;
  struct GSList * D.24121;
  struct MonoMethod * D.24124;
  short unsigned int D.24125;
  int D.24126;
  int D.24127;
  gchar * D.24133;
  struct GSList * D.24134;
  int D.24137;
  gchar * D.24143;
  struct GSList * D.24144;
  struct ILCodeDesc * D.24147;
  long unsigned int D.24148;
  long unsigned int D.24149;
  struct ILCodeDesc * D.24150;
  short unsigned int D.24151;
  short unsigned int D.24152;
  struct MonoMethod * method;

  method = funptr->method;
  D.24093 = method->flags;
  D.24094 = (unsigned int) D.24093;
  D.24095 = D.24094 & 96;
  if (D.24095 == 64) goto <D.24096>; else goto <D.24097>;
  <D.24096>:
  D.24098 = method->klass;
  D.24099 = D.24098->flags;
  D.24100 = D.24099 & 256;
  if (D.24100 == 0) goto <D.24101>; else goto <D.24102>;
  <D.24101>:
  D.24103 = stack_slot_is_boxed_value (value);
  if (D.24103 == 0) goto <D.24104>; else goto <D.24105>;
  <D.24104>:
  D.24106 = ctx->level;
  D.24107 = D.24106 & 16;
  if (D.24107 != 0) goto <D.24108>; else goto <D.24109>;
  <D.24108>:
  D.24110 = ctx->has_this_store;
  if (D.24110 != 0) goto <D.24111>; else goto <D.24112>;
  <D.24111>:
  D.24115 = ctx->verifiable;
  if (D.24115 != 0) goto <D.24113>; else goto <D.24116>;
  <D.24116>:
  D.24106 = ctx->level;
  D.24117 = D.24106 & 128;
  if (D.24117 != 0) goto <D.24113>; else goto <D.24114>;
  <D.24113>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24118 = ctx->ip_offset;
    D.24119 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function in method with stdarg 0 at  0x%04x", D.24118);
    vinfo->info.message = D.24119;
    vinfo->exception_type = 4;
    D.24120 = ctx->list;
    D.24121 = monoeg_g_slist_prepend (D.24120, vinfo);
    ctx->list = D.24121;
  }
  ctx->verifiable = 0;
  D.24106 = ctx->level;
  D.24107 = D.24106 & 16;
  if (D.24107 != 0) goto <D.24122>; else goto <D.24123>;
  <D.24122>:
  ctx->valid = 0;
  <D.24123>:
  <D.24114>:
  <D.24112>:
  <D.24109>:
  D.24124 = ctx->method;
  D.24125 = D.24124->flags;
  D.24126 = (int) D.24125;
  D.24127 = D.24126 & 16;
  if (D.24127 != 0) goto <D.24128>; else goto <D.24129>;
  <D.24128>:
  D.24115 = ctx->verifiable;
  if (D.24115 != 0) goto <D.24130>; else goto <D.24132>;
  <D.24132>:
  D.24106 = ctx->level;
  D.24117 = D.24106 & 128;
  if (D.24117 != 0) goto <D.24130>; else goto <D.24131>;
  <D.24130>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24118 = ctx->ip_offset;
    D.24133 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function at 0x%04x", D.24118);
    vinfo->info.message = D.24133;
    vinfo->exception_type = 4;
    D.24120 = ctx->list;
    D.24134 = monoeg_g_slist_prepend (D.24120, vinfo);
    ctx->list = D.24134;
  }
  ctx->verifiable = 0;
  D.24106 = ctx->level;
  D.24107 = D.24106 & 16;
  if (D.24107 != 0) goto <D.24135>; else goto <D.24136>;
  <D.24135>:
  ctx->valid = 0;
  <D.24136>:
  <D.24131>:
  <D.24129>:
  D.24137 = stack_slot_is_this_pointer (value);
  if (D.24137 == 0) goto <D.24138>; else goto <D.24139>;
  <D.24138>:
  D.24115 = ctx->verifiable;
  if (D.24115 != 0) goto <D.24140>; else goto <D.24142>;
  <D.24142>:
  D.24106 = ctx->level;
  D.24117 = D.24106 & 128;
  if (D.24117 != 0) goto <D.24140>; else goto <D.24141>;
  <D.24140>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24118 = ctx->ip_offset;
    D.24143 = monoeg_g_strdup_printf ("Invalid object argument, it is not the this pointer, to ldftn with virtual method at  0x%04x", D.24118);
    vinfo->info.message = D.24143;
    vinfo->exception_type = 4;
    D.24120 = ctx->list;
    D.24144 = monoeg_g_slist_prepend (D.24120, vinfo);
    ctx->list = D.24144;
  }
  ctx->verifiable = 0;
  D.24106 = ctx->level;
  D.24107 = D.24106 & 16;
  if (D.24107 != 0) goto <D.24145>; else goto <D.24146>;
  <D.24145>:
  ctx->valid = 0;
  <D.24146>:
  <D.24141>:
  <D.24139>:
  D.24147 = ctx->code;
  D.24118 = ctx->ip_offset;
  D.24148 = (long unsigned int) D.24118;
  D.24149 = D.24148 * 16;
  D.24150 = D.24147 + D.24149;
  D.24147 = ctx->code;
  D.24118 = ctx->ip_offset;
  D.24148 = (long unsigned int) D.24118;
  D.24149 = D.24148 * 16;
  D.24150 = D.24147 + D.24149;
  D.24151 = D.24150->flags;
  D.24152 = D.24151 | 32;
  D.24150->flags = D.24152;
  <D.24105>:
  <D.24102>:
  <D.24097>:
}


do_cast (struct VerifyContext * ctx, int token, const char * opcode)
{
  int D.24153;
  unsigned char D.24158;
  unsigned char D.24159;
  unsigned int D.24162;
  gchar * D.24163;
  struct GSList * D.24164;
  struct GSList * D.24165;
  int D.24166;
  int D.24171;
  int D.24173;
  int D.24174;
  gchar * D.24175;
  struct GSList * D.24176;
  int D.24177;
  struct MonoType * D.24181;
  int D.24182;
  gchar * D.24190;
  struct GSList * D.24191;
  unsigned char D.24194;
  int D.24195;
  gchar * D.24199;
  struct GSList * D.24200;
  int iftmp.80;
  int D.24209;
  struct MonoClass * D.24211;
  unsigned char D.24212;
  unsigned char D.24213;
  int iftmp.81;
  struct ILStackDesc * value;
  struct MonoType * type;
  gboolean is_boxed;
  gboolean do_box;

  D.24153 = check_underflow (ctx, 1);
  if (D.24153 == 0) goto <D.24154>; else goto <D.24155>;
  <D.24154>:
  return;
  <D.24155>:
  type = get_boxable_mono_type (ctx, token, opcode);
  if (type == 0B) goto <D.24156>; else goto <D.24157>;
  <D.24156>:
  return;
  <D.24157>:
  D.24158 = BIT_FIELD_REF <*type, 8, 88>;
  D.24159 = D.24158 & 64;
  if (D.24159 != 0) goto <D.24160>; else goto <D.24161>;
  <D.24160>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.24162 = ctx->ip_offset;
    D.24163 = monoeg_g_strdup_printf ("Invalid %s type at 0x%04x", opcode, D.24162);
    vinfo->info.message = D.24163;
    vinfo->exception_type = 3;
    D.24164 = ctx->list;
    D.24165 = monoeg_g_slist_prepend (D.24164, vinfo);
    ctx->list = D.24165;
  }
  ctx->valid = 0;
  return;
  <D.24161>:
  value = stack_pop (ctx);
  is_boxed = stack_slot_is_boxed_value (value);
  D.24166 = stack_slot_is_managed_pointer (value);
  if (D.24166 != 0) goto <D.24167>; else goto <D.24168>;
  <D.24167>:
  D.24171 = ctx->verifiable;
  if (D.24171 != 0) goto <D.24169>; else goto <D.24172>;
  <D.24172>:
  D.24173 = ctx->level;
  D.24174 = D.24173 & 128;
  if (D.24174 != 0) goto <D.24169>; else goto <D.24170>;
  <D.24169>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24162 = ctx->ip_offset;
    D.24175 = monoeg_g_strdup_printf ("Invalid value for %s at 0x%04x", opcode, D.24162);
    vinfo->info.message = D.24175;
    vinfo->exception_type = 4;
    D.24164 = ctx->list;
    D.24176 = monoeg_g_slist_prepend (D.24164, vinfo);
    ctx->list = D.24176;
  }
  ctx->verifiable = 0;
  D.24173 = ctx->level;
  D.24177 = D.24173 & 16;
  if (D.24177 != 0) goto <D.24178>; else goto <D.24179>;
  <D.24178>:
  ctx->valid = 0;
  <D.24179>:
  <D.24170>:
  goto <D.24180>;
  <D.24168>:
  D.24181 = value->type;
  D.24182 = mono_type_is_reference (D.24181);
  if (D.24182 == 0) goto <D.24183>; else goto <D.24184>;
  <D.24183>:
  if (is_boxed == 0) goto <D.24185>; else goto <D.24186>;
  <D.24185>:
  {
    char * name;

    name = stack_slot_full_name (value);
    D.24171 = ctx->verifiable;
    if (D.24171 != 0) goto <D.24187>; else goto <D.24189>;
    <D.24189>:
    D.24173 = ctx->level;
    D.24174 = D.24173 & 128;
    if (D.24174 != 0) goto <D.24187>; else goto <D.24188>;
    <D.24187>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24162 = ctx->ip_offset;
      D.24190 = monoeg_g_strdup_printf ("Expected a reference type on stack for %s but found %s at 0x%04x", opcode, name, D.24162);
      vinfo->info.message = D.24190;
      vinfo->exception_type = 4;
      D.24164 = ctx->list;
      D.24191 = monoeg_g_slist_prepend (D.24164, vinfo);
      ctx->list = D.24191;
    }
    ctx->verifiable = 0;
    D.24173 = ctx->level;
    D.24177 = D.24173 & 16;
    if (D.24177 != 0) goto <D.24192>; else goto <D.24193>;
    <D.24192>:
    ctx->valid = 0;
    <D.24193>:
    <D.24188>:
    monoeg_g_free (name);
  }
  <D.24186>:
  <D.24184>:
  <D.24180>:
  D.24181 = value->type;
  D.24194 = D.24181->type;
  D.24195 = (int) D.24194;
  switch (D.24195) <default: <D.24203>, case 15: <D.19088>, case 22: <D.19089>, case 27: <D.19087>>
  <D.19087>:
  <D.19088>:
  <D.19089>:
  D.24171 = ctx->verifiable;
  if (D.24171 != 0) goto <D.24196>; else goto <D.24198>;
  <D.24198>:
  D.24173 = ctx->level;
  D.24174 = D.24173 & 128;
  if (D.24174 != 0) goto <D.24196>; else goto <D.24197>;
  <D.24196>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24162 = ctx->ip_offset;
    D.24199 = monoeg_g_strdup_printf ("Invalid value for %s at 0x%04x", opcode, D.24162);
    vinfo->info.message = D.24199;
    vinfo->exception_type = 4;
    D.24164 = ctx->list;
    D.24200 = monoeg_g_slist_prepend (D.24164, vinfo);
    ctx->list = D.24200;
  }
  ctx->verifiable = 0;
  D.24173 = ctx->level;
  D.24177 = D.24173 & 16;
  if (D.24177 != 0) goto <D.24201>; else goto <D.24202>;
  <D.24201>:
  ctx->valid = 0;
  <D.24202>:
  <D.24197>:
  <D.24203>:
  if (is_boxed != 0) goto <D.24205>; else goto <D.24208>;
  <D.24208>:
  D.24209 = mono_type_is_generic_argument (type);
  if (D.24209 != 0) goto <D.24205>; else goto <D.24210>;
  <D.24210>:
  D.24211 = mono_class_from_mono_type (type);
  D.24212 = BIT_FIELD_REF <*D.24211, 8, 256>;
  D.24213 = D.24212 & 8;
  if (D.24213 != 0) goto <D.24205>; else goto <D.24206>;
  <D.24205>:
  iftmp.80 = 1;
  goto <D.24207>;
  <D.24206>:
  iftmp.80 = 0;
  <D.24207>:
  do_box = iftmp.80;
  if (do_box != 0) goto <D.24215>; else goto <D.24216>;
  <D.24215>:
  iftmp.81 = 4102;
  goto <D.24217>;
  <D.24216>:
  iftmp.81 = 6;
  <D.24217>:
  stack_push_val (ctx, iftmp.81, type);
}


do_unbox_value (struct VerifyContext * ctx, int klass_token)
{
  int D.24221;
  struct MonoClass * D.24224;
  unsigned char D.24225;
  unsigned char D.24226;
  int D.24231;
  int D.24233;
  int D.24234;
  unsigned int D.24235;
  gchar * D.24236;
  struct GSList * D.24237;
  struct GSList * D.24238;
  int D.24239;
  int D.24244;
  int D.24246;
  struct MonoType * D.24248;
  struct MonoClass * D.24249;
  unsigned char D.24250;
  unsigned char D.24251;
  const char * D.24255;
  gchar * D.24256;
  struct GSList * D.24257;
  struct MonoType * D.24260;
  int D.24261;
  int D.24262;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, klass_token, "unbox");
  if (type == 0B) goto <D.24219>; else goto <D.24220>;
  <D.24219>:
  return;
  <D.24220>:
  D.24221 = check_underflow (ctx, 1);
  if (D.24221 == 0) goto <D.24222>; else goto <D.24223>;
  <D.24222>:
  return;
  <D.24223>:
  D.24224 = mono_class_from_mono_type (type);
  D.24225 = BIT_FIELD_REF <*D.24224, 8, 256>;
  D.24226 = D.24225 & 8;
  if (D.24226 == 0) goto <D.24227>; else goto <D.24228>;
  <D.24227>:
  D.24231 = ctx->verifiable;
  if (D.24231 != 0) goto <D.24229>; else goto <D.24232>;
  <D.24232>:
  D.24233 = ctx->level;
  D.24234 = D.24233 & 128;
  if (D.24234 != 0) goto <D.24229>; else goto <D.24230>;
  <D.24229>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24235 = ctx->ip_offset;
    D.24236 = monoeg_g_strdup_printf ("Invalid reference type for unbox at 0x%04x", D.24235);
    vinfo->info.message = D.24236;
    vinfo->exception_type = 4;
    D.24237 = ctx->list;
    D.24238 = monoeg_g_slist_prepend (D.24237, vinfo);
    ctx->list = D.24238;
  }
  ctx->verifiable = 0;
  D.24233 = ctx->level;
  D.24239 = D.24233 & 16;
  if (D.24239 != 0) goto <D.24240>; else goto <D.24241>;
  <D.24240>:
  ctx->valid = 0;
  <D.24241>:
  <D.24230>:
  <D.24228>:
  value = stack_pop (ctx);
  D.24244 = stack_slot_get_type (value);
  if (D.24244 != 6) goto <D.24242>; else goto <D.24245>;
  <D.24245>:
  D.24246 = stack_slot_is_boxed_value (value);
  if (D.24246 == 0) goto <D.24247>; else goto <D.24243>;
  <D.24247>:
  D.24248 = value->type;
  D.24249 = mono_class_from_mono_type (D.24248);
  D.24250 = BIT_FIELD_REF <*D.24249, 8, 256>;
  D.24251 = D.24250 & 8;
  if (D.24251 != 0) goto <D.24242>; else goto <D.24243>;
  <D.24242>:
  D.24231 = ctx->verifiable;
  if (D.24231 != 0) goto <D.24252>; else goto <D.24254>;
  <D.24254>:
  D.24233 = ctx->level;
  D.24234 = D.24233 & 128;
  if (D.24234 != 0) goto <D.24252>; else goto <D.24253>;
  <D.24252>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24235 = ctx->ip_offset;
    D.24255 = stack_slot_get_name (value);
    D.24256 = monoeg_g_strdup_printf ("Invalid type %s at stack for unbox operation at 0x%04x", D.24255, D.24235);
    vinfo->info.message = D.24256;
    vinfo->exception_type = 4;
    D.24237 = ctx->list;
    D.24257 = monoeg_g_slist_prepend (D.24237, vinfo);
    ctx->list = D.24257;
  }
  ctx->verifiable = 0;
  D.24233 = ctx->level;
  D.24239 = D.24233 & 16;
  if (D.24239 != 0) goto <D.24258>; else goto <D.24259>;
  <D.24258>:
  ctx->valid = 0;
  <D.24259>:
  <D.24253>:
  <D.24243>:
  D.24260 = mono_type_get_type_byref (type);
  value = stack_push (ctx);
  set_stack_value (ctx, value, D.24260, 0);
  D.24261 = value->stype;
  D.24262 = D.24261 | 512;
  value->stype = D.24262;
}


do_throw (struct VerifyContext * ctx)
{
  int D.24264;
  int D.24269;
  int D.24272;
  struct MonoType * D.24274;
  struct MonoClass * D.24275;
  unsigned char D.24276;
  unsigned char D.24277;
  int D.24280;
  int D.24282;
  int D.24283;
  unsigned int D.24284;
  gchar * D.24285;
  struct GSList * D.24286;
  struct GSList * D.24287;
  int D.24288;
  int D.24291;
  int D.24294;
  gchar * D.24300;
  struct GSList * D.24301;
  struct ILStackDesc * exception;

  D.24264 = check_underflow (ctx, 1);
  if (D.24264 == 0) goto <D.24265>; else goto <D.24266>;
  <D.24265>:
  return;
  <D.24266>:
  exception = stack_pop (ctx);
  D.24269 = stack_slot_is_null_literal (exception);
  if (D.24269 == 0) goto <D.24270>; else goto <D.24271>;
  <D.24270>:
  D.24272 = stack_slot_get_type (exception);
  if (D.24272 != 6) goto <D.24267>; else goto <D.24273>;
  <D.24273>:
  D.24274 = exception->type;
  D.24275 = mono_class_from_mono_type (D.24274);
  D.24276 = BIT_FIELD_REF <*D.24275, 8, 256>;
  D.24277 = D.24276 & 8;
  if (D.24277 != 0) goto <D.24267>; else goto <D.24268>;
  <D.24267>:
  D.24280 = ctx->verifiable;
  if (D.24280 != 0) goto <D.24278>; else goto <D.24281>;
  <D.24281>:
  D.24282 = ctx->level;
  D.24283 = D.24282 & 128;
  if (D.24283 != 0) goto <D.24278>; else goto <D.24279>;
  <D.24278>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24284 = ctx->ip_offset;
    D.24285 = monoeg_g_strdup_printf ("Invalid type on stack for throw, expected reference type at 0x%04x", D.24284);
    vinfo->info.message = D.24285;
    vinfo->exception_type = 4;
    D.24286 = ctx->list;
    D.24287 = monoeg_g_slist_prepend (D.24286, vinfo);
    ctx->list = D.24287;
  }
  ctx->verifiable = 0;
  D.24282 = ctx->level;
  D.24288 = D.24282 & 16;
  if (D.24288 != 0) goto <D.24289>; else goto <D.24290>;
  <D.24289>:
  ctx->valid = 0;
  <D.24290>:
  <D.24279>:
  <D.24268>:
  <D.24271>:
  D.24274 = exception->type;
  D.24291 = mono_type_is_generic_argument (D.24274);
  if (D.24291 != 0) goto <D.24292>; else goto <D.24293>;
  <D.24292>:
  D.24294 = stack_slot_is_boxed_value (exception);
  if (D.24294 == 0) goto <D.24295>; else goto <D.24296>;
  <D.24295>:
  {
    char * name;

    D.24274 = exception->type;
    name = mono_type_full_name (D.24274);
    D.24280 = ctx->verifiable;
    if (D.24280 != 0) goto <D.24297>; else goto <D.24299>;
    <D.24299>:
    D.24282 = ctx->level;
    D.24283 = D.24282 & 128;
    if (D.24283 != 0) goto <D.24297>; else goto <D.24298>;
    <D.24297>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24284 = ctx->ip_offset;
      D.24300 = monoeg_g_strdup_printf ("Invalid type on stack for throw, expected reference type but found unboxed %s  at 0x%04x ", name, D.24284);
      vinfo->info.message = D.24300;
      vinfo->exception_type = 4;
      D.24286 = ctx->list;
      D.24301 = monoeg_g_slist_prepend (D.24286, vinfo);
      ctx->list = D.24301;
    }
    ctx->verifiable = 0;
    D.24282 = ctx->level;
    D.24288 = D.24282 & 16;
    if (D.24288 != 0) goto <D.24302>; else goto <D.24303>;
    <D.24302>:
    ctx->valid = 0;
    <D.24303>:
    <D.24298>:
    monoeg_g_free (name);
  }
  <D.24296>:
  <D.24293>:
  ctx->eval.size = 0;
}


do_push_field (struct VerifyContext * ctx, int token, gboolean take_addr)
{
  unsigned int D.24307;
  unsigned int D.24308;
  int D.24309;
  const char * iftmp.82;
  int D.24316;
  struct MonoClassField * field.83;
  struct MonoClass * D.24322;
  unsigned char D.24323;
  unsigned char D.24324;
  int D.24327;
  int D.24332;
  int D.24334;
  int D.24335;
  unsigned int D.24336;
  gchar * D.24337;
  struct GSList * D.24338;
  struct GSList * D.24339;
  int D.24340;
  struct MonoType * D.24347;
  short unsigned int D.24348;
  int D.24349;
  int D.24350;
  struct MonoMethod * D.24353;
  struct MonoClass * D.24354;
  int D.24356;
  gchar * D.24360;
  struct GSList * D.24361;
  struct ILStackDesc * D.24364;
  struct ILStackDesc * obj;
  struct MonoClassField * field;

  try
    {
      if (take_addr == 0) goto <D.24305>; else goto <D.24306>;
      <D.24305>:
      D.24307 = ctx->prefix_set;
      D.24308 = D.24307 & 4294967292;
      ctx->prefix_set = D.24308;
      <D.24306>:
      D.24309 = check_underflow (ctx, 1);
      if (D.24309 == 0) goto <D.24310>; else goto <D.24311>;
      <D.24310>:
      return;
      <D.24311>:
      obj = stack_pop_safe (ctx);
      if (take_addr != 0) goto <D.24313>; else goto <D.24314>;
      <D.24313>:
      iftmp.82 = "ldflda";
      goto <D.24315>;
      <D.24314>:
      iftmp.82 = "ldfld";
      <D.24315>:
      D.24316 = check_is_valid_type_for_field_ops (ctx, token, obj, &field, iftmp.82);
      if (D.24316 == 0) goto <D.24317>; else goto <D.24318>;
      <D.24317>:
      return;
      <D.24318>:
      if (take_addr != 0) goto <D.24319>; else goto <D.24320>;
      <D.24319>:
      field.83 = field;
      D.24322 = field.83->parent;
      D.24323 = BIT_FIELD_REF <*D.24322, 8, 256>;
      D.24324 = D.24323 & 8;
      if (D.24324 != 0) goto <D.24325>; else goto <D.24326>;
      <D.24325>:
      D.24327 = stack_slot_is_managed_pointer (obj);
      if (D.24327 == 0) goto <D.24328>; else goto <D.24329>;
      <D.24328>:
      D.24332 = ctx->verifiable;
      if (D.24332 != 0) goto <D.24330>; else goto <D.24333>;
      <D.24333>:
      D.24334 = ctx->level;
      D.24335 = D.24334 & 128;
      if (D.24335 != 0) goto <D.24330>; else goto <D.24331>;
      <D.24330>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24336 = ctx->ip_offset;
        D.24337 = monoeg_g_strdup_printf ("Cannot take the address of a temporary value-type at 0x%04x", D.24336);
        vinfo->info.message = D.24337;
        vinfo->exception_type = 4;
        D.24338 = ctx->list;
        D.24339 = monoeg_g_slist_prepend (D.24338, vinfo);
        ctx->list = D.24339;
      }
      ctx->verifiable = 0;
      D.24334 = ctx->level;
      D.24340 = D.24334 & 16;
      if (D.24340 != 0) goto <D.24341>; else goto <D.24342>;
      <D.24341>:
      ctx->valid = 0;
      <D.24342>:
      <D.24331>:
      <D.24329>:
      <D.24326>:
      <D.24320>:
      if (take_addr != 0) goto <D.24345>; else goto <D.24346>;
      <D.24345>:
      field.83 = field;
      D.24347 = field.83->type;
      D.24348 = D.24347->attrs;
      D.24349 = (int) D.24348;
      D.24350 = D.24349 & 32;
      if (D.24350 != 0) goto <D.24351>; else goto <D.24352>;
      <D.24351>:
      field.83 = field;
      D.24322 = field.83->parent;
      D.24353 = ctx->method;
      D.24354 = D.24353->klass;
      if (D.24322 != D.24354) goto <D.24343>; else goto <D.24355>;
      <D.24355>:
      D.24353 = ctx->method;
      D.24356 = mono_method_is_constructor (D.24353);
      if (D.24356 == 0) goto <D.24343>; else goto <D.24344>;
      <D.24343>:
      D.24332 = ctx->verifiable;
      if (D.24332 != 0) goto <D.24357>; else goto <D.24359>;
      <D.24359>:
      D.24334 = ctx->level;
      D.24335 = D.24334 & 128;
      if (D.24335 != 0) goto <D.24357>; else goto <D.24358>;
      <D.24357>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24336 = ctx->ip_offset;
        D.24360 = monoeg_g_strdup_printf ("Cannot take the address of a init-only field at 0x%04x", D.24336);
        vinfo->info.message = D.24360;
        vinfo->exception_type = 4;
        D.24338 = ctx->list;
        D.24361 = monoeg_g_slist_prepend (D.24338, vinfo);
        ctx->list = D.24361;
      }
      ctx->verifiable = 0;
      D.24334 = ctx->level;
      D.24340 = D.24334 & 16;
      if (D.24340 != 0) goto <D.24362>; else goto <D.24363>;
      <D.24362>:
      ctx->valid = 0;
      <D.24363>:
      <D.24358>:
      <D.24344>:
      <D.24352>:
      <D.24346>:
      field.83 = field;
      D.24347 = field.83->type;
      D.24364 = stack_push (ctx);
      set_stack_value (ctx, D.24364, D.24347, 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.24370;
  int iftmp.84;
  int D.24375;
  int D.24377;
  struct MonoClass * D.24379;
  struct MonoType * D.24380;
  int D.24381;
  struct MonoType * D.24382;
  unsigned char D.24383;
  unsigned int D.24386;
  gchar * D.24387;
  struct GSList * D.24388;
  struct GSList * D.24389;
  struct MonoType * D.24390;
  _Bool D.24391;
  long int D.24392;
  long int D.24393;
  int D.24398;
  int D.24403;
  int D.24405;
  int D.24406;
  gchar * D.24407;
  struct GSList * D.24408;
  int D.24409;
  int D.24412;
  struct MonoMethod * D.24415;
  int D.24416;
  gchar * D.24422;
  struct GSList * D.24423;
  unsigned char D.24427;
  unsigned char D.24428;
  int D.24431;
  gchar * D.24437;
  struct GSList * D.24438;
  int D.24443;
  gchar * D.24449;
  struct GSList * D.24450;
  int D.24453;
  int D.24456;
  gchar * D.24462;
  struct GSList * D.24463;
  struct MonoClass * D.24468;
  int D.24469;
  gchar * D.24475;
  struct GSList * D.24476;
  struct MonoClassField * field;
  struct MonoClass * klass;
  gboolean is_pointer;

  try
    {
      field = verifier_load_field (ctx, token, &klass, opcode);
      if (field == 0B) goto <D.24368>; else goto <D.24369>;
      <D.24368>:
      D.24370 = 0;
      return D.24370;
      <D.24369>:
      *ret_field = field;
      D.24375 = stack_slot_get_type (obj);
      if (D.24375 == 5) goto <D.24372>; else goto <D.24376>;
      <D.24376>:
      D.24377 = stack_slot_get_type (obj);
      if (D.24377 == 3) goto <D.24378>; else goto <D.24373>;
      <D.24378>:
      D.24379 = field->parent;
      D.24380 = &D.24379->byval_arg;
      D.24381 = get_stack_type (D.24380);
      if (D.24381 == 0) goto <D.24372>; else goto <D.24373>;
      <D.24372>:
      iftmp.84 = 1;
      goto <D.24374>;
      <D.24373>:
      iftmp.84 = 0;
      <D.24374>:
      is_pointer = iftmp.84;
      D.24382 = field->type;
      D.24383 = D.24382->type;
      if (D.24383 == 22) goto <D.24384>; else goto <D.24385>;
      <D.24384>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24386 = ctx->ip_offset;
        D.24387 = monoeg_g_strdup_printf ("Typedbyref field is an unverfiable type at 0x%04x", D.24386);
        vinfo->info.message = D.24387;
        vinfo->exception_type = 3;
        D.24388 = ctx->list;
        D.24389 = monoeg_g_slist_prepend (D.24388, vinfo);
        ctx->list = D.24389;
      }
      ctx->valid = 0;
      D.24370 = 0;
      return D.24370;
      <D.24385>:
      D.24390 = obj->type;
      D.24391 = D.24390 == 0B;
      D.24392 = (long int) D.24391;
      D.24393 = __builtin_expect (D.24392, 0);
      if (D.24393 != 0) goto <D.24394>; else goto <D.24395>;
      <D.24394>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 3369, "obj->type");
      <D.24395>:
      if (is_pointer != 0) goto <D.24396>; else goto <D.24397>;
      <D.24396>:
      D.24398 = stack_slot_get_underlying_type (obj);
      if (D.24398 == 3) goto <D.24399>; else goto <D.24400>;
      <D.24399>:
      D.24403 = ctx->verifiable;
      if (D.24403 != 0) goto <D.24401>; else goto <D.24404>;
      <D.24404>:
      D.24405 = ctx->level;
      D.24406 = D.24405 & 128;
      if (D.24406 != 0) goto <D.24401>; else goto <D.24402>;
      <D.24401>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24386 = ctx->ip_offset;
        D.24407 = monoeg_g_strdup_printf ("Native int is not a verifiable type to reference a field at 0x%04x", D.24386);
        vinfo->info.message = D.24407;
        vinfo->exception_type = 4;
        D.24388 = ctx->list;
        D.24408 = monoeg_g_slist_prepend (D.24388, vinfo);
        ctx->list = D.24408;
      }
      ctx->verifiable = 0;
      D.24405 = ctx->level;
      D.24409 = D.24405 & 16;
      if (D.24409 != 0) goto <D.24410>; else goto <D.24411>;
      <D.24410>:
      ctx->valid = 0;
      <D.24411>:
      <D.24402>:
      <D.24400>:
      D.24405 = ctx->level;
      D.24412 = D.24405 & 64;
      if (D.24412 == 0) goto <D.24413>; else goto <D.24414>;
      <D.24413>:
      D.24415 = ctx->method;
      D.24416 = mono_method_can_access_field_full (D.24415, field, 0B);
      if (D.24416 == 0) goto <D.24417>; else goto <D.24418>;
      <D.24417>:
      D.24403 = ctx->verifiable;
      if (D.24403 != 0) goto <D.24419>; else goto <D.24421>;
      <D.24421>:
      D.24405 = ctx->level;
      D.24406 = D.24405 & 128;
      if (D.24406 != 0) goto <D.24419>; else goto <D.24420>;
      <D.24419>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24386 = ctx->ip_offset;
        D.24422 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24386);
        vinfo->info.message = D.24422;
        vinfo->exception_type = 10;
        D.24388 = ctx->list;
        D.24423 = monoeg_g_slist_prepend (D.24388, vinfo);
        ctx->list = D.24423;
      }
      ctx->verifiable = 0;
      D.24405 = ctx->level;
      D.24409 = D.24405 & 16;
      if (D.24409 != 0) goto <D.24424>; else goto <D.24425>;
      <D.24424>:
      ctx->valid = 0;
      <D.24425>:
      <D.24420>:
      <D.24418>:
      <D.24414>:
      goto <D.24426>;
      <D.24397>:
      D.24379 = field->parent;
      D.24427 = BIT_FIELD_REF <*D.24379, 8, 256>;
      D.24428 = D.24427 & 8;
      if (D.24428 == 0) goto <D.24429>; else goto <D.24430>;
      <D.24429>:
      D.24431 = stack_slot_is_managed_pointer (obj);
      if (D.24431 != 0) goto <D.24432>; else goto <D.24433>;
      <D.24432>:
      D.24403 = ctx->verifiable;
      if (D.24403 != 0) goto <D.24434>; else goto <D.24436>;
      <D.24436>:
      D.24405 = ctx->level;
      D.24406 = D.24405 & 128;
      if (D.24406 != 0) goto <D.24434>; else goto <D.24435>;
      <D.24434>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24386 = ctx->ip_offset;
        D.24437 = 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.24386);
        vinfo->info.message = D.24437;
        vinfo->exception_type = 4;
        D.24388 = ctx->list;
        D.24438 = monoeg_g_slist_prepend (D.24388, vinfo);
        ctx->list = D.24438;
      }
      ctx->verifiable = 0;
      D.24405 = ctx->level;
      D.24409 = D.24405 & 16;
      if (D.24409 != 0) goto <D.24439>; else goto <D.24440>;
      <D.24439>:
      ctx->valid = 0;
      <D.24440>:
      <D.24435>:
      <D.24433>:
      <D.24430>:
      D.24379 = field->parent;
      D.24427 = BIT_FIELD_REF <*D.24379, 8, 256>;
      D.24428 = D.24427 & 8;
      if (D.24428 != 0) goto <D.24441>; else goto <D.24442>;
      <D.24441>:
      D.24443 = stack_slot_is_boxed_value (obj);
      if (D.24443 != 0) goto <D.24444>; else goto <D.24445>;
      <D.24444>:
      D.24403 = ctx->verifiable;
      if (D.24403 != 0) goto <D.24446>; else goto <D.24448>;
      <D.24448>:
      D.24405 = ctx->level;
      D.24406 = D.24405 & 128;
      if (D.24406 != 0) goto <D.24446>; else goto <D.24447>;
      <D.24446>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24386 = ctx->ip_offset;
        D.24449 = monoeg_g_strdup_printf ("Type at stack is a boxed valuetype and is not compatible to reference the field at 0x%04x", D.24386);
        vinfo->info.message = D.24449;
        vinfo->exception_type = 4;
        D.24388 = ctx->list;
        D.24450 = monoeg_g_slist_prepend (D.24388, vinfo);
        ctx->list = D.24450;
      }
      ctx->verifiable = 0;
      D.24405 = ctx->level;
      D.24409 = D.24405 & 16;
      if (D.24409 != 0) goto <D.24451>; else goto <D.24452>;
      <D.24451>:
      ctx->valid = 0;
      <D.24452>:
      <D.24447>:
      <D.24445>:
      <D.24442>:
      D.24453 = stack_slot_is_null_literal (obj);
      if (D.24453 == 0) goto <D.24454>; else goto <D.24455>;
      <D.24454>:
      D.24379 = field->parent;
      D.24380 = &D.24379->byval_arg;
      D.24456 = verify_stack_type_compatibility_full (ctx, D.24380, obj, 1, 0);
      if (D.24456 == 0) goto <D.24457>; else goto <D.24458>;
      <D.24457>:
      {
        char * found;
        char * expected;

        found = stack_slot_full_name (obj);
        D.24379 = field->parent;
        D.24380 = &D.24379->byval_arg;
        expected = mono_type_full_name (D.24380);
        D.24403 = ctx->verifiable;
        if (D.24403 != 0) goto <D.24459>; else goto <D.24461>;
        <D.24461>:
        D.24405 = ctx->level;
        D.24406 = D.24405 & 128;
        if (D.24406 != 0) goto <D.24459>; else goto <D.24460>;
        <D.24459>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.24386 = ctx->ip_offset;
          D.24462 = monoeg_g_strdup_printf ("Expected type \'%s\' but found \'%s\' referencing the \'this\' argument at 0x%04x", expected, found, D.24386);
          vinfo->info.message = D.24462;
          vinfo->exception_type = 4;
          D.24388 = ctx->list;
          D.24463 = monoeg_g_slist_prepend (D.24388, vinfo);
          ctx->list = D.24463;
        }
        ctx->verifiable = 0;
        D.24405 = ctx->level;
        D.24409 = D.24405 & 16;
        if (D.24409 != 0) goto <D.24464>; else goto <D.24465>;
        <D.24464>:
        ctx->valid = 0;
        <D.24465>:
        <D.24460>:
        monoeg_g_free (found);
        monoeg_g_free (expected);
      }
      <D.24458>:
      <D.24455>:
      D.24405 = ctx->level;
      D.24412 = D.24405 & 64;
      if (D.24412 == 0) goto <D.24466>; else goto <D.24467>;
      <D.24466>:
      D.24390 = obj->type;
      D.24468 = mono_class_from_mono_type (D.24390);
      D.24415 = ctx->method;
      D.24469 = mono_method_can_access_field_full (D.24415, field, D.24468);
      if (D.24469 == 0) goto <D.24470>; else goto <D.24471>;
      <D.24470>:
      D.24403 = ctx->verifiable;
      if (D.24403 != 0) goto <D.24472>; else goto <D.24474>;
      <D.24474>:
      D.24405 = ctx->level;
      D.24406 = D.24405 & 128;
      if (D.24406 != 0) goto <D.24472>; else goto <D.24473>;
      <D.24472>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24386 = ctx->ip_offset;
        D.24475 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24386);
        vinfo->info.message = D.24475;
        vinfo->exception_type = 10;
        D.24388 = ctx->list;
        D.24476 = monoeg_g_slist_prepend (D.24388, vinfo);
        ctx->list = D.24476;
      }
      ctx->verifiable = 0;
      D.24405 = ctx->level;
      D.24409 = D.24405 & 16;
      if (D.24409 != 0) goto <D.24477>; else goto <D.24478>;
      <D.24477>:
      ctx->valid = 0;
      <D.24478>:
      <D.24473>:
      <D.24471>:
      <D.24467>:
      <D.24426>:
      check_unmanaged_pointer (ctx, obj);
      D.24370 = 1;
      return D.24370;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


verifier_load_field (struct VerifyContext * ctx, int token, struct MonoClass * * out_klass, const char * opcode)
{
  struct MonoMethod * D.24481;
  unsigned char D.24482;
  unsigned char D.24483;
  unsigned int token.85;
  struct MonoClass * iftmp.86;
  int D.24494;
  _Bool D.24495;
  _Bool D.24496;
  _Bool D.24497;
  unsigned int token.87;
  struct MonoImage * D.24500;
  int D.24501;
  unsigned int D.24502;
  gchar * D.24503;
  struct GSList * D.24504;
  struct GSList * D.24505;
  struct MonoClassField * D.24506;
  struct MonoGenericContext * D.24507;
  unsigned int token.88;
  struct MonoClass * D.24512;
  struct MonoClass * klass.89;
  struct MonoLoaderError * D.24516;
  gchar * D.24517;
  struct GSList * D.24518;
  struct MonoType * D.24519;
  int D.24520;
  unsigned int D.24523;
  unsigned int D.24524;
  const char * D.24527;
  gchar * D.24528;
  struct GSList * D.24529;
  struct MonoClassField * field;
  struct MonoClass * klass;

  try
    {
      klass = 0B;
      D.24481 = ctx->method;
      D.24482 = BIT_FIELD_REF <*D.24481, 8, 256>;
      D.24483 = D.24482 & 124;
      if (D.24483 != 0) goto <D.24484>; else goto <D.24485>;
      <D.24484>:
      token.85 = (unsigned int) token;
      D.24481 = ctx->method;
      field = mono_method_get_wrapper_data (D.24481, token.85);
      if (field != 0B) goto <D.24488>; else goto <D.24489>;
      <D.24488>:
      iftmp.86 = field->parent;
      goto <D.24490>;
      <D.24489>:
      iftmp.86 = 0B;
      <D.24490>:
      klass = iftmp.86;
      goto <D.24491>;
      <D.24485>:
      D.24494 = token >> 24;
      D.24495 = D.24494 != 4;
      D.24496 = D.24494 != 10;
      D.24497 = D.24495 & D.24496;
      if (D.24497 != 0) goto <D.24492>; else goto <D.24498>;
      <D.24498>:
      token.87 = (unsigned int) token;
      D.24500 = ctx->image;
      D.24501 = token_bounds_check (D.24500, token.87);
      if (D.24501 == 0) goto <D.24492>; else goto <D.24493>;
      <D.24492>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24502 = ctx->ip_offset;
        D.24503 = monoeg_g_strdup_printf ("Invalid field token 0x%08x for %s at 0x%04x", token, opcode, D.24502);
        vinfo->info.message = D.24503;
        vinfo->exception_type = 12;
        D.24504 = ctx->list;
        D.24505 = monoeg_g_slist_prepend (D.24504, vinfo);
        ctx->list = D.24505;
      }
      ctx->valid = 0;
      D.24506 = 0B;
      return D.24506;
      <D.24493>:
      D.24507 = ctx->generic_context;
      token.88 = (unsigned int) token;
      D.24500 = ctx->image;
      field = mono_field_from_token (D.24500, token.88, &klass, D.24507);
      <D.24491>:
      if (field == 0B) goto <D.24509>; else goto <D.24511>;
      <D.24511>:
      D.24512 = field->parent;
      if (D.24512 == 0B) goto <D.24509>; else goto <D.24513>;
      <D.24513>:
      klass.89 = klass;
      if (klass.89 == 0B) goto <D.24509>; else goto <D.24515>;
      <D.24515>:
      D.24516 = mono_loader_get_last_error ();
      if (D.24516 != 0B) goto <D.24509>; else goto <D.24510>;
      <D.24509>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24502 = ctx->ip_offset;
        D.24517 = monoeg_g_strdup_printf ("Cannot load field from token 0x%08x for %s at 0x%04x", token, opcode, D.24502);
        vinfo->info.message = D.24517;
        vinfo->exception_type = 12;
        D.24504 = ctx->list;
        D.24518 = monoeg_g_slist_prepend (D.24504, vinfo);
        ctx->list = D.24518;
      }
      ctx->valid = 0;
      mono_loader_clear_error ();
      D.24506 = 0B;
      return D.24506;
      <D.24510>:
      klass.89 = klass;
      D.24519 = &klass.89->byval_arg;
      D.24520 = mono_type_is_valid_in_context (ctx, D.24519);
      if (D.24520 == 0) goto <D.24521>; else goto <D.24522>;
      <D.24521>:
      D.24506 = 0B;
      return D.24506;
      <D.24522>:
      D.24523 = mono_field_get_flags (field);
      D.24524 = D.24523 & 64;
      if (D.24524 != 0) goto <D.24525>; else goto <D.24526>;
      <D.24525>:
      {
        char * type_name;

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

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.24502 = ctx->ip_offset;
          D.24527 = field->name;
          D.24528 = monoeg_g_strdup_printf ("Cannot reference literal field %s::%s at 0x%04x", type_name, D.24527, D.24502);
          vinfo->info.message = D.24528;
          vinfo->exception_type = 3;
          D.24504 = ctx->list;
          D.24529 = monoeg_g_slist_prepend (D.24504, vinfo);
          ctx->list = D.24529;
        }
        ctx->valid = 0;
        monoeg_g_free (type_name);
        D.24506 = 0B;
        return D.24506;
      }
      <D.24526>:
      klass.89 = klass;
      *out_klass = klass.89;
      D.24506 = field;
      return D.24506;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_push_static_field (struct VerifyContext * ctx, int token, gboolean take_addr)
{
  int D.24532;
  unsigned int D.24537;
  unsigned int D.24538;
  const char * iftmp.90;
  struct MonoType * D.24545;
  short unsigned int D.24546;
  int D.24547;
  int D.24548;
  unsigned int D.24551;
  gchar * D.24552;
  struct GSList * D.24553;
  struct GSList * D.24554;
  int D.24559;
  struct MonoClass * D.24562;
  struct MonoMethod * D.24563;
  struct MonoClass * D.24564;
  short unsigned int D.24566;
  int D.24567;
  int D.24568;
  int D.18874;
  int iftmp.91;
  int D.18870;
  const char[7] * D.24573;
  unsigned char D.24574;
  int D.24575;
  unsigned char D.24576;
  int D.24577;
  _Bool D.24578;
  _Bool D.24579;
  _Bool D.24580;
  const unsigned char * D.24583;
  unsigned char D.24584;
  int D.24585;
  const unsigned char * D.24586;
  unsigned char D.24587;
  int D.24588;
  _Bool D.24589;
  _Bool D.24590;
  const unsigned char * D.24593;
  unsigned char D.24594;
  int D.24595;
  const unsigned char * D.24596;
  unsigned char D.24597;
  int D.24598;
  _Bool D.24599;
  _Bool D.24600;
  const unsigned char * D.24603;
  unsigned char D.24604;
  int D.24605;
  const unsigned char * D.24606;
  unsigned char D.24607;
  int D.24608;
  const char * D.24610;
  int D.24613;
  int D.24615;
  int D.24616;
  gchar * D.24617;
  struct GSList * D.24618;
  int D.24619;
  int D.24622;
  int D.24625;
  gchar * D.24631;
  struct GSList * D.24632;
  struct ILStackDesc * D.24635;
  struct MonoClassField * field;
  struct MonoClass * klass;

  try
    {
      D.24532 = check_overflow (ctx);
      if (D.24532 == 0) goto <D.24533>; else goto <D.24534>;
      <D.24533>:
      return;
      <D.24534>:
      if (take_addr == 0) goto <D.24535>; else goto <D.24536>;
      <D.24535>:
      D.24537 = ctx->prefix_set;
      D.24538 = D.24537 & 4294967293;
      ctx->prefix_set = D.24538;
      <D.24536>:
      if (take_addr != 0) goto <D.24540>; else goto <D.24541>;
      <D.24540>:
      iftmp.90 = "ldsflda";
      goto <D.24542>;
      <D.24541>:
      iftmp.90 = "ldsfld";
      <D.24542>:
      field = verifier_load_field (ctx, token, &klass, iftmp.90);
      if (field == 0B) goto <D.24543>; else goto <D.24544>;
      <D.24543>:
      return;
      <D.24544>:
      D.24545 = field->type;
      D.24546 = D.24545->attrs;
      D.24547 = (int) D.24546;
      D.24548 = D.24547 & 16;
      if (D.24548 == 0) goto <D.24549>; else goto <D.24550>;
      <D.24549>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24551 = ctx->ip_offset;
        D.24552 = monoeg_g_strdup_printf ("Cannot load non static field at 0x%04x", D.24551);
        vinfo->info.message = D.24552;
        vinfo->exception_type = 3;
        D.24553 = ctx->list;
        D.24554 = monoeg_g_slist_prepend (D.24553, vinfo);
        ctx->list = D.24554;
      }
      ctx->valid = 0;
      return;
      <D.24550>:
      if (take_addr != 0) goto <D.24557>; else goto <D.24558>;
      <D.24557>:
      D.24545 = field->type;
      D.24546 = D.24545->attrs;
      D.24547 = (int) D.24546;
      D.24559 = D.24547 & 32;
      if (D.24559 != 0) goto <D.24560>; else goto <D.24561>;
      <D.24560>:
      D.24562 = field->parent;
      D.24563 = ctx->method;
      D.24564 = D.24563->klass;
      if (D.24562 != D.24564) goto <D.24555>; else goto <D.24565>;
      <D.24565>:
      D.24563 = ctx->method;
      D.24566 = D.24563->flags;
      D.24567 = (int) D.24566;
      D.24568 = D.24567 & 2064;
      if (D.24568 == 0) goto <D.24555>; else goto <D.24569>;
      <D.24569>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.24563 = ctx->method;
          __s2 = D.24563->name;
          D.24573 = ".cctor";
          D.24574 = MEM[(const unsigned char *)D.24573];
          D.24575 = (int) D.24574;
          D.24576 = *__s2;
          D.24577 = (int) D.24576;
          __result = D.24575 - D.24577;
          {
            D.24578 = __s1_len != 0;
            D.24579 = __result == 0;
            D.24580 = D.24578 & D.24579;
            if (D.24580 != 0) goto <D.24581>; else goto <D.24582>;
            <D.24581>:
            D.24583 = &MEM[(void *)".cctor" + 1B];
            D.24584 = *D.24583;
            D.24585 = (int) D.24584;
            D.24586 = __s2 + 1;
            D.24587 = *D.24586;
            D.24588 = (int) D.24587;
            __result = D.24585 - D.24588;
            D.24589 = __s1_len > 1;
            D.24579 = __result == 0;
            D.24590 = D.24589 & D.24579;
            if (D.24590 != 0) goto <D.24591>; else goto <D.24592>;
            <D.24591>:
            D.24593 = &MEM[(void *)".cctor" + 2B];
            D.24594 = *D.24593;
            D.24595 = (int) D.24594;
            D.24596 = __s2 + 2;
            D.24597 = *D.24596;
            D.24598 = (int) D.24597;
            __result = D.24595 - D.24598;
            D.24599 = __s1_len > 2;
            D.24579 = __result == 0;
            D.24600 = D.24599 & D.24579;
            if (D.24600 != 0) goto <D.24601>; else goto <D.24602>;
            <D.24601>:
            D.24603 = &MEM[(void *)".cctor" + 3B];
            D.24604 = *D.24603;
            D.24605 = (int) D.24604;
            D.24606 = __s2 + 3;
            D.24607 = *D.24606;
            D.24608 = (int) D.24607;
            __result = D.24605 - D.24608;
            <D.24602>:
            <D.24592>:
            <D.24582>:
          }
          D.18870 = __result;
        }
        iftmp.91 = D.18870;
        goto <D.24609>;
        <D.24572>:
        D.24563 = ctx->method;
        D.24610 = D.24563->name;
        iftmp.91 = __builtin_strcmp (".cctor", D.24610);
        <D.24609>:
        D.18874 = iftmp.91;
      }
      if (D.18874 != 0) goto <D.24555>; else goto <D.24556>;
      <D.24555>:
      D.24613 = ctx->verifiable;
      if (D.24613 != 0) goto <D.24611>; else goto <D.24614>;
      <D.24614>:
      D.24615 = ctx->level;
      D.24616 = D.24615 & 128;
      if (D.24616 != 0) goto <D.24611>; else goto <D.24612>;
      <D.24611>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24551 = ctx->ip_offset;
        D.24617 = monoeg_g_strdup_printf ("Cannot take the address of a init-only field at 0x%04x", D.24551);
        vinfo->info.message = D.24617;
        vinfo->exception_type = 4;
        D.24553 = ctx->list;
        D.24618 = monoeg_g_slist_prepend (D.24553, vinfo);
        ctx->list = D.24618;
      }
      ctx->verifiable = 0;
      D.24615 = ctx->level;
      D.24619 = D.24615 & 16;
      if (D.24619 != 0) goto <D.24620>; else goto <D.24621>;
      <D.24620>:
      ctx->valid = 0;
      <D.24621>:
      <D.24612>:
      <D.24556>:
      <D.24561>:
      <D.24558>:
      D.24615 = ctx->level;
      D.24622 = D.24615 & 64;
      if (D.24622 == 0) goto <D.24623>; else goto <D.24624>;
      <D.24623>:
      D.24563 = ctx->method;
      D.24625 = mono_method_can_access_field_full (D.24563, field, 0B);
      if (D.24625 == 0) goto <D.24626>; else goto <D.24627>;
      <D.24626>:
      D.24613 = ctx->verifiable;
      if (D.24613 != 0) goto <D.24628>; else goto <D.24630>;
      <D.24630>:
      D.24615 = ctx->level;
      D.24616 = D.24615 & 128;
      if (D.24616 != 0) goto <D.24628>; else goto <D.24629>;
      <D.24628>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24551 = ctx->ip_offset;
        D.24631 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24551);
        vinfo->info.message = D.24631;
        vinfo->exception_type = 10;
        D.24553 = ctx->list;
        D.24632 = monoeg_g_slist_prepend (D.24553, vinfo);
        ctx->list = D.24632;
      }
      ctx->verifiable = 0;
      D.24615 = ctx->level;
      D.24619 = D.24615 & 16;
      if (D.24619 != 0) goto <D.24633>; else goto <D.24634>;
      <D.24633>:
      ctx->valid = 0;
      <D.24634>:
      <D.24629>:
      <D.24627>:
      <D.24624>:
      D.24545 = field->type;
      D.24635 = stack_push (ctx);
      set_stack_value (ctx, D.24635, D.24545, take_addr);
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_store_field (struct VerifyContext * ctx, int token)
{
  unsigned int D.24639;
  unsigned int D.24640;
  int D.24641;
  int D.24644;
  struct MonoClassField * field.92;
  struct MonoType * D.24648;
  int D.24649;
  int D.24654;
  int D.24656;
  int D.24657;
  unsigned int D.24658;
  const char * D.24659;
  gchar * D.24660;
  struct GSList * D.24661;
  struct GSList * D.24662;
  int D.24663;
  struct ILStackDesc * value;
  struct ILStackDesc * obj;
  struct MonoClassField * field;

  try
    {
      D.24639 = ctx->prefix_set;
      D.24640 = D.24639 & 4294967292;
      ctx->prefix_set = D.24640;
      D.24641 = check_underflow (ctx, 2);
      if (D.24641 == 0) goto <D.24642>; else goto <D.24643>;
      <D.24642>:
      return;
      <D.24643>:
      value = stack_pop (ctx);
      obj = stack_pop_safe (ctx);
      D.24644 = check_is_valid_type_for_field_ops (ctx, token, obj, &field, "stfld");
      if (D.24644 == 0) goto <D.24645>; else goto <D.24646>;
      <D.24645>:
      return;
      <D.24646>:
      field.92 = field;
      D.24648 = field.92->type;
      D.24649 = verify_stack_type_compatibility (ctx, D.24648, value);
      if (D.24649 == 0) goto <D.24650>; else goto <D.24651>;
      <D.24650>:
      D.24654 = ctx->verifiable;
      if (D.24654 != 0) goto <D.24652>; else goto <D.24655>;
      <D.24655>:
      D.24656 = ctx->level;
      D.24657 = D.24656 & 128;
      if (D.24657 != 0) goto <D.24652>; else goto <D.24653>;
      <D.24652>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24658 = ctx->ip_offset;
        D.24659 = stack_slot_get_name (value);
        D.24660 = monoeg_g_strdup_printf ("Incompatible type %s in field store at 0x%04x", D.24659, D.24658);
        vinfo->info.message = D.24660;
        vinfo->exception_type = 4;
        D.24661 = ctx->list;
        D.24662 = monoeg_g_slist_prepend (D.24661, vinfo);
        ctx->list = D.24662;
      }
      ctx->verifiable = 0;
      D.24656 = ctx->level;
      D.24663 = D.24656 & 16;
      if (D.24663 != 0) goto <D.24664>; else goto <D.24665>;
      <D.24664>:
      ctx->valid = 0;
      <D.24665>:
      <D.24653>:
      <D.24651>:
    }
  finally
    {
      field = {CLOBBER};
    }
}


do_store_static_field (struct VerifyContext * ctx, int token)
{
  unsigned int D.24669;
  unsigned int D.24670;
  int D.24671;
  struct MonoType * D.24676;
  short unsigned int D.24677;
  int D.24678;
  int D.24679;
  unsigned int D.24682;
  gchar * D.24683;
  struct GSList * D.24684;
  struct GSList * D.24685;
  unsigned char D.24686;
  gchar * D.24689;
  struct GSList * D.24690;
  int D.24691;
  int D.24692;
  struct MonoMethod * D.24695;
  int D.24696;
  int D.24701;
  int D.24703;
  gchar * D.24704;
  struct GSList * D.24705;
  int D.24706;
  int D.24709;
  gchar * D.24715;
  struct GSList * D.24716;
  struct MonoClassField * field;
  struct MonoClass * klass;
  struct ILStackDesc * value;

  try
    {
      D.24669 = ctx->prefix_set;
      D.24670 = D.24669 & 4294967293;
      ctx->prefix_set = D.24670;
      D.24671 = check_underflow (ctx, 1);
      if (D.24671 == 0) goto <D.24672>; else goto <D.24673>;
      <D.24672>:
      return;
      <D.24673>:
      value = stack_pop (ctx);
      field = verifier_load_field (ctx, token, &klass, "stsfld");
      if (field == 0B) goto <D.24674>; else goto <D.24675>;
      <D.24674>:
      return;
      <D.24675>:
      D.24676 = field->type;
      D.24677 = D.24676->attrs;
      D.24678 = (int) D.24677;
      D.24679 = D.24678 & 16;
      if (D.24679 == 0) goto <D.24680>; else goto <D.24681>;
      <D.24680>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24682 = ctx->ip_offset;
        D.24683 = monoeg_g_strdup_printf ("Cannot store non static field at 0x%04x", D.24682);
        vinfo->info.message = D.24683;
        vinfo->exception_type = 3;
        D.24684 = ctx->list;
        D.24685 = monoeg_g_slist_prepend (D.24684, vinfo);
        ctx->list = D.24685;
      }
      ctx->valid = 0;
      return;
      <D.24681>:
      D.24676 = field->type;
      D.24686 = D.24676->type;
      if (D.24686 == 22) goto <D.24687>; else goto <D.24688>;
      <D.24687>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24682 = ctx->ip_offset;
        D.24689 = monoeg_g_strdup_printf ("Typedbyref field is an unverfiable type in store static field at 0x%04x", D.24682);
        vinfo->info.message = D.24689;
        vinfo->exception_type = 3;
        D.24684 = ctx->list;
        D.24690 = monoeg_g_slist_prepend (D.24684, vinfo);
        ctx->list = D.24690;
      }
      ctx->valid = 0;
      return;
      <D.24688>:
      D.24691 = ctx->level;
      D.24692 = D.24691 & 64;
      if (D.24692 == 0) goto <D.24693>; else goto <D.24694>;
      <D.24693>:
      D.24695 = ctx->method;
      D.24696 = mono_method_can_access_field_full (D.24695, field, 0B);
      if (D.24696 == 0) goto <D.24697>; else goto <D.24698>;
      <D.24697>:
      D.24701 = ctx->verifiable;
      if (D.24701 != 0) goto <D.24699>; else goto <D.24702>;
      <D.24702>:
      D.24691 = ctx->level;
      D.24703 = D.24691 & 128;
      if (D.24703 != 0) goto <D.24699>; else goto <D.24700>;
      <D.24699>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24682 = ctx->ip_offset;
        D.24704 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24682);
        vinfo->info.message = D.24704;
        vinfo->exception_type = 10;
        D.24684 = ctx->list;
        D.24705 = monoeg_g_slist_prepend (D.24684, vinfo);
        ctx->list = D.24705;
      }
      ctx->verifiable = 0;
      D.24691 = ctx->level;
      D.24706 = D.24691 & 16;
      if (D.24706 != 0) goto <D.24707>; else goto <D.24708>;
      <D.24707>:
      ctx->valid = 0;
      <D.24708>:
      <D.24700>:
      <D.24698>:
      <D.24694>:
      D.24676 = field->type;
      D.24709 = verify_stack_type_compatibility (ctx, D.24676, value);
      if (D.24709 == 0) goto <D.24710>; else goto <D.24711>;
      <D.24710>:
      {
        char * stack_name;
        char * field_name;

        stack_name = stack_slot_full_name (value);
        D.24676 = field->type;
        field_name = mono_type_full_name (D.24676);
        D.24701 = ctx->verifiable;
        if (D.24701 != 0) goto <D.24712>; else goto <D.24714>;
        <D.24714>:
        D.24691 = ctx->level;
        D.24703 = D.24691 & 128;
        if (D.24703 != 0) goto <D.24712>; else goto <D.24713>;
        <D.24712>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.24682 = ctx->ip_offset;
          D.24715 = monoeg_g_strdup_printf ("Incompatible type in static field store expected \'%s\' but found \'%s\' at 0x%04x", field_name, stack_name, D.24682);
          vinfo->info.message = D.24715;
          vinfo->exception_type = 4;
          D.24684 = ctx->list;
          D.24716 = monoeg_g_slist_prepend (D.24684, vinfo);
          ctx->list = D.24716;
        }
        ctx->verifiable = 0;
        D.24691 = ctx->level;
        D.24706 = D.24691 & 16;
        if (D.24706 != 0) goto <D.24717>; else goto <D.24718>;
        <D.24717>:
        ctx->valid = 0;
        <D.24718>:
        <D.24713>:
        monoeg_g_free (field_name);
        monoeg_g_free (stack_name);
      }
      <D.24711>:
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_stobj (struct VerifyContext * ctx, int token)
{
  unsigned int D.24722;
  unsigned int D.24723;
  int D.24726;
  int D.24729;
  int D.24734;
  int D.24736;
  int D.24737;
  unsigned int D.24738;
  gchar * D.24739;
  struct GSList * D.24740;
  struct GSList * D.24741;
  int D.24742;
  int D.24745;
  gchar * D.24751;
  struct GSList * D.24752;
  int D.24755;
  struct MonoType * D.24758;
  int D.24759;
  int D.24762;
  gchar * D.24768;
  struct GSList * D.24769;
  int D.24772;
  gchar * D.24778;
  struct GSList * D.24779;
  struct MonoType * D.24782;
  struct MonoType * D.24783;
  int D.24784;
  gchar * D.24790;
  struct GSList * D.24791;
  struct ILStackDesc * dest;
  struct ILStackDesc * src;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "stobj");
  D.24722 = ctx->prefix_set;
  D.24723 = D.24722 & 4294967292;
  ctx->prefix_set = D.24723;
  if (type == 0B) goto <D.24724>; else goto <D.24725>;
  <D.24724>:
  return;
  <D.24725>:
  D.24726 = check_underflow (ctx, 2);
  if (D.24726 == 0) goto <D.24727>; else goto <D.24728>;
  <D.24727>:
  return;
  <D.24728>:
  src = stack_pop (ctx);
  dest = stack_pop (ctx);
  D.24729 = stack_slot_is_managed_mutability_pointer (dest);
  if (D.24729 != 0) goto <D.24730>; else goto <D.24731>;
  <D.24730>:
  D.24734 = ctx->verifiable;
  if (D.24734 != 0) goto <D.24732>; else goto <D.24735>;
  <D.24735>:
  D.24736 = ctx->level;
  D.24737 = D.24736 & 128;
  if (D.24737 != 0) goto <D.24732>; else goto <D.24733>;
  <D.24732>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24738 = ctx->ip_offset;
    D.24739 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with stobj at 0x%04x", D.24738);
    vinfo->info.message = D.24739;
    vinfo->exception_type = 4;
    D.24740 = ctx->list;
    D.24741 = monoeg_g_slist_prepend (D.24740, vinfo);
    ctx->list = D.24741;
  }
  ctx->verifiable = 0;
  D.24736 = ctx->level;
  D.24742 = D.24736 & 16;
  if (D.24742 != 0) goto <D.24743>; else goto <D.24744>;
  <D.24743>:
  ctx->valid = 0;
  <D.24744>:
  <D.24733>:
  <D.24731>:
  D.24745 = stack_slot_is_managed_pointer (dest);
  if (D.24745 == 0) goto <D.24746>; else goto <D.24747>;
  <D.24746>:
  D.24734 = ctx->verifiable;
  if (D.24734 != 0) goto <D.24748>; else goto <D.24750>;
  <D.24750>:
  D.24736 = ctx->level;
  D.24737 = D.24736 & 128;
  if (D.24737 != 0) goto <D.24748>; else goto <D.24749>;
  <D.24748>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24738 = ctx->ip_offset;
    D.24751 = monoeg_g_strdup_printf ("Invalid destination of stobj operation at 0x%04x", D.24738);
    vinfo->info.message = D.24751;
    vinfo->exception_type = 4;
    D.24740 = ctx->list;
    D.24752 = monoeg_g_slist_prepend (D.24740, vinfo);
    ctx->list = D.24752;
  }
  ctx->verifiable = 0;
  D.24736 = ctx->level;
  D.24742 = D.24736 & 16;
  if (D.24742 != 0) goto <D.24753>; else goto <D.24754>;
  <D.24753>:
  ctx->valid = 0;
  <D.24754>:
  <D.24749>:
  <D.24747>:
  D.24755 = stack_slot_is_boxed_value (src);
  if (D.24755 != 0) goto <D.24756>; else goto <D.24757>;
  <D.24756>:
  D.24758 = src->type;
  D.24759 = mono_type_is_reference (D.24758);
  if (D.24759 == 0) goto <D.24760>; else goto <D.24761>;
  <D.24760>:
  D.24762 = mono_type_is_reference (type);
  if (D.24762 == 0) goto <D.24763>; else goto <D.24764>;
  <D.24763>:
  D.24734 = ctx->verifiable;
  if (D.24734 != 0) goto <D.24765>; else goto <D.24767>;
  <D.24767>:
  D.24736 = ctx->level;
  D.24737 = D.24736 & 128;
  if (D.24737 != 0) goto <D.24765>; else goto <D.24766>;
  <D.24765>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24738 = ctx->ip_offset;
    D.24768 = monoeg_g_strdup_printf ("Cannot use stobj with a boxed source value that is not a reference type at 0x%04x", D.24738);
    vinfo->info.message = D.24768;
    vinfo->exception_type = 4;
    D.24740 = ctx->list;
    D.24769 = monoeg_g_slist_prepend (D.24740, vinfo);
    ctx->list = D.24769;
  }
  ctx->verifiable = 0;
  D.24736 = ctx->level;
  D.24742 = D.24736 & 16;
  if (D.24742 != 0) goto <D.24770>; else goto <D.24771>;
  <D.24770>:
  ctx->valid = 0;
  <D.24771>:
  <D.24766>:
  <D.24764>:
  <D.24761>:
  <D.24757>:
  D.24772 = verify_stack_type_compatibility (ctx, type, src);
  if (D.24772 == 0) goto <D.24773>; else goto <D.24774>;
  <D.24773>:
  {
    char * type_name;
    char * src_name;

    type_name = mono_type_full_name (type);
    src_name = stack_slot_full_name (src);
    D.24734 = ctx->verifiable;
    if (D.24734 != 0) goto <D.24775>; else goto <D.24777>;
    <D.24777>:
    D.24736 = ctx->level;
    D.24737 = D.24736 & 128;
    if (D.24737 != 0) goto <D.24775>; else goto <D.24776>;
    <D.24775>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24738 = ctx->ip_offset;
      D.24778 = monoeg_g_strdup_printf ("Token \'%s\' and source \'%s\' of stobj don\'t match \' at 0x%04x", type_name, src_name, D.24738);
      vinfo->info.message = D.24778;
      vinfo->exception_type = 4;
      D.24740 = ctx->list;
      D.24779 = monoeg_g_slist_prepend (D.24740, vinfo);
      ctx->list = D.24779;
    }
    ctx->verifiable = 0;
    D.24736 = ctx->level;
    D.24742 = D.24736 & 16;
    if (D.24742 != 0) goto <D.24780>; else goto <D.24781>;
    <D.24780>:
    ctx->valid = 0;
    <D.24781>:
    <D.24776>:
    monoeg_g_free (type_name);
    monoeg_g_free (src_name);
  }
  <D.24774>:
  D.24782 = dest->type;
  D.24783 = mono_type_get_type_byval (D.24782);
  D.24784 = verify_type_compatibility (ctx, D.24783, type);
  if (D.24784 == 0) goto <D.24785>; else goto <D.24786>;
  <D.24785>:
  D.24734 = ctx->verifiable;
  if (D.24734 != 0) goto <D.24787>; else goto <D.24789>;
  <D.24789>:
  D.24736 = ctx->level;
  D.24737 = D.24736 & 128;
  if (D.24737 != 0) goto <D.24787>; else goto <D.24788>;
  <D.24787>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24738 = ctx->ip_offset;
    D.24790 = monoeg_g_strdup_printf ("Destination and token types of stobj don\'t match at 0x%04x", D.24738);
    vinfo->info.message = D.24790;
    vinfo->exception_type = 4;
    D.24740 = ctx->list;
    D.24791 = monoeg_g_slist_prepend (D.24740, vinfo);
    ctx->list = D.24791;
  }
  ctx->verifiable = 0;
  D.24736 = ctx->level;
  D.24742 = D.24736 & 16;
  if (D.24742 != 0) goto <D.24792>; else goto <D.24793>;
  <D.24792>:
  ctx->valid = 0;
  <D.24793>:
  <D.24788>:
  <D.24786>:
}


do_box_value (struct VerifyContext * ctx, int klass_token)
{
  int D.24797;
  int D.24800;
  struct MonoType * D.24803;
  int D.24804;
  int D.24807;
  struct ILStackDesc * D.24810;
  int D.24811;
  int D.24812;
  int D.24813;
  int D.24818;
  int D.24820;
  int D.24821;
  unsigned int D.24822;
  gchar * D.24823;
  struct GSList * D.24824;
  struct GSList * D.24825;
  int D.24826;
  int D.24829;
  struct MonoClass * D.24832;
  struct ILStackDesc * value;
  struct MonoType * type;
  struct MonoClass * klass;

  type = get_boxable_mono_type (ctx, klass_token, "box");
  if (type == 0B) goto <D.24795>; else goto <D.24796>;
  <D.24795>:
  return;
  <D.24796>:
  D.24797 = check_underflow (ctx, 1);
  if (D.24797 == 0) goto <D.24798>; else goto <D.24799>;
  <D.24798>:
  return;
  <D.24799>:
  value = stack_pop (ctx);
  D.24800 = stack_slot_get_underlying_type (value);
  if (D.24800 == 6) goto <D.24801>; else goto <D.24802>;
  <D.24801>:
  D.24803 = value->type;
  D.24804 = mono_type_is_reference (D.24803);
  if (D.24804 != 0) goto <D.24805>; else goto <D.24806>;
  <D.24805>:
  D.24807 = mono_type_is_reference (type);
  if (D.24807 != 0) goto <D.24808>; else goto <D.24809>;
  <D.24808>:
  D.24810 = stack_push_stack_val (ctx, value);
  D.24811 = D.24810->stype;
  D.24812 = D.24811 | 4096;
  D.24810->stype = D.24812;
  return;
  <D.24809>:
  <D.24806>:
  <D.24802>:
  D.24813 = verify_stack_type_compatibility (ctx, type, value);
  if (D.24813 == 0) goto <D.24814>; else goto <D.24815>;
  <D.24814>:
  D.24818 = ctx->verifiable;
  if (D.24818 != 0) goto <D.24816>; else goto <D.24819>;
  <D.24819>:
  D.24820 = ctx->level;
  D.24821 = D.24820 & 128;
  if (D.24821 != 0) goto <D.24816>; else goto <D.24817>;
  <D.24816>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24822 = ctx->ip_offset;
    D.24823 = monoeg_g_strdup_printf ("Invalid type at stack for boxing operation at 0x%04x", D.24822);
    vinfo->info.message = D.24823;
    vinfo->exception_type = 4;
    D.24824 = ctx->list;
    D.24825 = monoeg_g_slist_prepend (D.24824, vinfo);
    ctx->list = D.24825;
  }
  ctx->verifiable = 0;
  D.24820 = ctx->level;
  D.24826 = D.24820 & 16;
  if (D.24826 != 0) goto <D.24827>; else goto <D.24828>;
  <D.24827>:
  ctx->valid = 0;
  <D.24828>:
  <D.24817>:
  <D.24815>:
  klass = mono_class_from_mono_type (type);
  D.24829 = mono_class_is_nullable (klass);
  if (D.24829 != 0) goto <D.24830>; else goto <D.24831>;
  <D.24830>:
  D.24832 = mono_class_get_nullable_param (klass);
  type = &D.24832->byval_arg;
  <D.24831>:
  stack_push_val (ctx, 4102, type);
}


do_newarr (struct VerifyContext * ctx, int token)
{
  int D.24836;
  int D.24839;
  int D.24842;
  int D.24847;
  int D.24849;
  int D.24850;
  unsigned int D.24851;
  const char * D.24852;
  gchar * D.24853;
  struct GSList * D.24854;
  struct GSList * D.24855;
  int D.24856;
  struct MonoClass * D.24859;
  struct MonoClass * D.24860;
  struct MonoType * D.24861;
  struct ILStackDesc * D.24862;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "newarr");
  if (type == 0B) goto <D.24834>; else goto <D.24835>;
  <D.24834>:
  return;
  <D.24835>:
  D.24836 = check_underflow (ctx, 1);
  if (D.24836 == 0) goto <D.24837>; else goto <D.24838>;
  <D.24837>:
  return;
  <D.24838>:
  value = stack_pop (ctx);
  D.24839 = stack_slot_get_type (value);
  if (D.24839 != 1) goto <D.24840>; else goto <D.24841>;
  <D.24840>:
  D.24842 = stack_slot_get_type (value);
  if (D.24842 != 3) goto <D.24843>; else goto <D.24844>;
  <D.24843>:
  D.24847 = ctx->verifiable;
  if (D.24847 != 0) goto <D.24845>; else goto <D.24848>;
  <D.24848>:
  D.24849 = ctx->level;
  D.24850 = D.24849 & 128;
  if (D.24850 != 0) goto <D.24845>; else goto <D.24846>;
  <D.24845>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24851 = ctx->ip_offset;
    D.24852 = stack_slot_get_name (value);
    D.24853 = monoeg_g_strdup_printf ("Array size type on stack (%s) is not a verifiable type at 0x%04x", D.24852, D.24851);
    vinfo->info.message = D.24853;
    vinfo->exception_type = 4;
    D.24854 = ctx->list;
    D.24855 = monoeg_g_slist_prepend (D.24854, vinfo);
    ctx->list = D.24855;
  }
  ctx->verifiable = 0;
  D.24849 = ctx->level;
  D.24856 = D.24849 & 16;
  if (D.24856 != 0) goto <D.24857>; else goto <D.24858>;
  <D.24857>:
  ctx->valid = 0;
  <D.24858>:
  <D.24846>:
  <D.24844>:
  <D.24841>:
  D.24859 = mono_class_from_mono_type (type);
  D.24860 = mono_array_class_get (D.24859, 1);
  D.24861 = mono_class_get_type (D.24860);
  D.24862 = stack_push (ctx);
  set_stack_value (ctx, D.24862, D.24861, 0);
}


do_ldlen (struct VerifyContext * ctx)
{
  int D.24864;
  int D.24869;
  struct MonoType * D.24871;
  unsigned char D.24872;
  int D.24875;
  int D.24877;
  int D.24878;
  unsigned int D.24879;
  gchar * D.24880;
  struct GSList * D.24881;
  struct GSList * D.24882;
  int D.24883;
  struct MonoClass * D.24886;
  struct MonoType * D.24887;
  struct ILStackDesc * value;

  D.24864 = check_underflow (ctx, 1);
  if (D.24864 == 0) goto <D.24865>; else goto <D.24866>;
  <D.24865>:
  return;
  <D.24866>:
  value = stack_pop (ctx);
  D.24869 = stack_slot_get_type (value);
  if (D.24869 != 6) goto <D.24867>; else goto <D.24870>;
  <D.24870>:
  D.24871 = value->type;
  D.24872 = D.24871->type;
  if (D.24872 != 29) goto <D.24867>; else goto <D.24868>;
  <D.24867>:
  D.24875 = ctx->verifiable;
  if (D.24875 != 0) goto <D.24873>; else goto <D.24876>;
  <D.24876>:
  D.24877 = ctx->level;
  D.24878 = D.24877 & 128;
  if (D.24878 != 0) goto <D.24873>; else goto <D.24874>;
  <D.24873>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24879 = ctx->ip_offset;
    D.24880 = monoeg_g_strdup_printf ("Invalid array type for ldlen at 0x%04x", D.24879);
    vinfo->info.message = D.24880;
    vinfo->exception_type = 4;
    D.24881 = ctx->list;
    D.24882 = monoeg_g_slist_prepend (D.24881, vinfo);
    ctx->list = D.24882;
  }
  ctx->verifiable = 0;
  D.24877 = ctx->level;
  D.24883 = D.24877 & 16;
  if (D.24883 != 0) goto <D.24884>; else goto <D.24885>;
  <D.24884>:
  ctx->valid = 0;
  <D.24885>:
  <D.24874>:
  <D.24868>:
  D.24886 = mono_defaults.int_class;
  D.24887 = &D.24886->byval_arg;
  stack_push_val (ctx, 3, D.24887);
}


do_ldelema (struct VerifyContext * ctx, int klass_token)
{
  int D.24891;
  int D.24894;
  int D.24897;
  int D.24902;
  int D.24904;
  int D.24905;
  unsigned int D.24906;
  const char * D.24907;
  gchar * D.24908;
  struct GSList * D.24909;
  struct GSList * D.24910;
  int D.24911;
  int D.24914;
  int D.24920;
  struct MonoType * D.24922;
  unsigned char D.24923;
  const char * D.24927;
  gchar * D.24928;
  struct GSList * D.24929;
  int D.24935;
  int D.24937;
  struct MonoClass * D.24938;
  struct MonoType * D.24939;
  gchar * D.24945;
  struct GSList * D.24946;
  unsigned int D.24949;
  unsigned int D.24950;
  unsigned int D.24953;
  int D.24954;
  int D.24955;
  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.24889>; else goto <D.24890>;
  <D.24889>:
  return;
  <D.24890>:
  D.24891 = check_underflow (ctx, 2);
  if (D.24891 == 0) goto <D.24892>; else goto <D.24893>;
  <D.24892>:
  return;
  <D.24893>:
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.24894 = stack_slot_get_type (index);
  if (D.24894 != 1) goto <D.24895>; else goto <D.24896>;
  <D.24895>:
  D.24897 = stack_slot_get_type (index);
  if (D.24897 != 3) goto <D.24898>; else goto <D.24899>;
  <D.24898>:
  D.24902 = ctx->verifiable;
  if (D.24902 != 0) goto <D.24900>; else goto <D.24903>;
  <D.24903>:
  D.24904 = ctx->level;
  D.24905 = D.24904 & 128;
  if (D.24905 != 0) goto <D.24900>; else goto <D.24901>;
  <D.24900>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24906 = ctx->ip_offset;
    D.24907 = stack_slot_get_name (index);
    D.24908 = monoeg_g_strdup_printf ("Index type(%s) for ldelema is not an int or a native int at 0x%04x", D.24907, D.24906);
    vinfo->info.message = D.24908;
    vinfo->exception_type = 4;
    D.24909 = ctx->list;
    D.24910 = monoeg_g_slist_prepend (D.24909, vinfo);
    ctx->list = D.24910;
  }
  ctx->verifiable = 0;
  D.24904 = ctx->level;
  D.24911 = D.24904 & 16;
  if (D.24911 != 0) goto <D.24912>; else goto <D.24913>;
  <D.24912>:
  ctx->valid = 0;
  <D.24913>:
  <D.24901>:
  <D.24899>:
  <D.24896>:
  D.24914 = stack_slot_is_null_literal (array);
  if (D.24914 == 0) goto <D.24915>; else goto <D.24916>;
  <D.24915>:
  D.24920 = stack_slot_get_type (array);
  if (D.24920 != 6) goto <D.24917>; else goto <D.24921>;
  <D.24921>:
  D.24922 = array->type;
  D.24923 = D.24922->type;
  if (D.24923 != 29) goto <D.24917>; else goto <D.24918>;
  <D.24917>:
  D.24902 = ctx->verifiable;
  if (D.24902 != 0) goto <D.24924>; else goto <D.24926>;
  <D.24926>:
  D.24904 = ctx->level;
  D.24905 = D.24904 & 128;
  if (D.24905 != 0) goto <D.24924>; else goto <D.24925>;
  <D.24924>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24906 = ctx->ip_offset;
    D.24927 = stack_slot_get_name (array);
    D.24928 = monoeg_g_strdup_printf ("Invalid array type(%s) for ldelema at 0x%04x", D.24927, D.24906);
    vinfo->info.message = D.24928;
    vinfo->exception_type = 4;
    D.24909 = ctx->list;
    D.24929 = monoeg_g_slist_prepend (D.24909, vinfo);
    ctx->list = D.24929;
  }
  ctx->verifiable = 0;
  D.24904 = ctx->level;
  D.24911 = D.24904 & 16;
  if (D.24911 != 0) goto <D.24930>; else goto <D.24931>;
  <D.24930>:
  ctx->valid = 0;
  <D.24931>:
  <D.24925>:
  goto <D.24919>;
  <D.24918>:
  D.24935 = get_stack_type (type);
  if (D.24935 == 1) goto <D.24932>; else goto <D.24936>;
  <D.24936>:
  D.24937 = get_stack_type (type);
  if (D.24937 == 3) goto <D.24932>; else goto <D.24933>;
  <D.24932>:
  D.24922 = array->type;
  D.24938 = D.24922->data.klass;
  D.24939 = &D.24938->byval_arg;
  valid = verify_type_compatibility_full (ctx, type, D.24939, 1);
  goto <D.24934>;
  <D.24933>:
  D.24922 = array->type;
  D.24938 = D.24922->data.klass;
  D.24939 = &D.24938->byval_arg;
  valid = mono_metadata_type_equal (type, D.24939);
  <D.24934>:
  if (valid == 0) goto <D.24940>; else goto <D.24941>;
  <D.24940>:
  D.24902 = ctx->verifiable;
  if (D.24902 != 0) goto <D.24942>; else goto <D.24944>;
  <D.24944>:
  D.24904 = ctx->level;
  D.24905 = D.24904 & 128;
  if (D.24905 != 0) goto <D.24942>; else goto <D.24943>;
  <D.24942>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24906 = ctx->ip_offset;
    D.24945 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelema at 0x%04x", D.24906);
    vinfo->info.message = D.24945;
    vinfo->exception_type = 4;
    D.24909 = ctx->list;
    D.24946 = monoeg_g_slist_prepend (D.24909, vinfo);
    ctx->list = D.24946;
  }
  ctx->verifiable = 0;
  D.24904 = ctx->level;
  D.24911 = D.24904 & 16;
  if (D.24911 != 0) goto <D.24947>; else goto <D.24948>;
  <D.24947>:
  ctx->valid = 0;
  <D.24948>:
  <D.24943>:
  <D.24941>:
  <D.24919>:
  <D.24916>:
  res = stack_push (ctx);
  set_stack_value (ctx, res, type, 1);
  D.24949 = ctx->prefix_set;
  D.24950 = D.24949 & 16;
  if (D.24950 != 0) goto <D.24951>; else goto <D.24952>;
  <D.24951>:
  D.24949 = ctx->prefix_set;
  D.24953 = D.24949 & 4294967279;
  ctx->prefix_set = D.24953;
  D.24954 = res->stype;
  D.24955 = D.24954 | 512;
  res->stype = D.24955;
  <D.24952>:
}


do_ldelem (struct VerifyContext * ctx, int opcode, int token)
{
  int D.24957;
  unsigned int D.24964;
  gchar * D.24965;
  struct GSList * D.24966;
  struct GSList * D.24967;
  int D.24969;
  int D.24972;
  int D.24977;
  int D.24979;
  int D.24980;
  const char * D.24981;
  gchar * D.24982;
  struct GSList * D.24983;
  int D.24984;
  int D.24987;
  int D.24993;
  struct MonoType * D.24995;
  unsigned char D.24996;
  const char * D.25000;
  gchar * D.25001;
  struct GSList * D.25002;
  struct MonoClass * D.25007;
  unsigned char D.25008;
  unsigned char D.25009;
  gchar * D.25015;
  struct GSList * D.25016;
  int D.25020;
  unsigned char D.25026;
  unsigned char D.25027;
  unsigned char D.25029;
  unsigned char D.25030;
  unsigned char D.25031;
  unsigned char D.25033;
  gchar * D.25037;
  struct GSList * D.25038;
  int D.25041;
  gchar * D.25047;
  struct GSList * D.25048;
  struct ILStackDesc * D.25051;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct MonoType * type;

  D.24957 = check_underflow (ctx, 2);
  if (D.24957 == 0) goto <D.24958>; else goto <D.24959>;
  <D.24958>:
  return;
  <D.24959>:
  if (opcode == 163) goto <D.24960>; else goto <D.24961>;
  <D.24960>:
  type = verifier_load_type (ctx, token, "ldelem.any");
  if (type == 0B) goto <D.24962>; else goto <D.24963>;
  <D.24962>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.24964 = ctx->ip_offset;
    D.24965 = monoeg_g_strdup_printf ("Type (0x%08x) not found at 0x%04x", token, D.24964);
    vinfo->info.message = D.24965;
    vinfo->exception_type = 3;
    D.24966 = ctx->list;
    D.24967 = monoeg_g_slist_prepend (D.24966, vinfo);
    ctx->list = D.24967;
  }
  ctx->valid = 0;
  return;
  <D.24963>:
  goto <D.24968>;
  <D.24961>:
  type = mono_type_from_opcode (opcode);
  <D.24968>:
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.24969 = stack_slot_get_type (index);
  if (D.24969 != 1) goto <D.24970>; else goto <D.24971>;
  <D.24970>:
  D.24972 = stack_slot_get_type (index);
  if (D.24972 != 3) goto <D.24973>; else goto <D.24974>;
  <D.24973>:
  D.24977 = ctx->verifiable;
  if (D.24977 != 0) goto <D.24975>; else goto <D.24978>;
  <D.24978>:
  D.24979 = ctx->level;
  D.24980 = D.24979 & 128;
  if (D.24980 != 0) goto <D.24975>; else goto <D.24976>;
  <D.24975>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24964 = ctx->ip_offset;
    D.24981 = stack_slot_get_name (index);
    D.24982 = monoeg_g_strdup_printf ("Index type(%s) for ldelem.X is not an int or a native int at 0x%04x", D.24981, D.24964);
    vinfo->info.message = D.24982;
    vinfo->exception_type = 4;
    D.24966 = ctx->list;
    D.24983 = monoeg_g_slist_prepend (D.24966, vinfo);
    ctx->list = D.24983;
  }
  ctx->verifiable = 0;
  D.24979 = ctx->level;
  D.24984 = D.24979 & 16;
  if (D.24984 != 0) goto <D.24985>; else goto <D.24986>;
  <D.24985>:
  ctx->valid = 0;
  <D.24986>:
  <D.24976>:
  <D.24974>:
  <D.24971>:
  D.24987 = stack_slot_is_null_literal (array);
  if (D.24987 == 0) goto <D.24988>; else goto <D.24989>;
  <D.24988>:
  D.24993 = stack_slot_get_type (array);
  if (D.24993 != 6) goto <D.24990>; else goto <D.24994>;
  <D.24994>:
  D.24995 = array->type;
  D.24996 = D.24995->type;
  if (D.24996 != 29) goto <D.24990>; else goto <D.24991>;
  <D.24990>:
  D.24977 = ctx->verifiable;
  if (D.24977 != 0) goto <D.24997>; else goto <D.24999>;
  <D.24999>:
  D.24979 = ctx->level;
  D.24980 = D.24979 & 128;
  if (D.24980 != 0) goto <D.24997>; else goto <D.24998>;
  <D.24997>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24964 = ctx->ip_offset;
    D.25000 = stack_slot_get_name (array);
    D.25001 = monoeg_g_strdup_printf ("Invalid array type(%s) for ldelem.X at 0x%04x", D.25000, D.24964);
    vinfo->info.message = D.25001;
    vinfo->exception_type = 4;
    D.24966 = ctx->list;
    D.25002 = monoeg_g_slist_prepend (D.24966, vinfo);
    ctx->list = D.25002;
  }
  ctx->verifiable = 0;
  D.24979 = ctx->level;
  D.24984 = D.24979 & 16;
  if (D.24984 != 0) goto <D.25003>; else goto <D.25004>;
  <D.25003>:
  ctx->valid = 0;
  <D.25004>:
  <D.24998>:
  goto <D.24992>;
  <D.24991>:
  if (opcode == 154) goto <D.25005>; else goto <D.25006>;
  <D.25005>:
  D.24995 = array->type;
  D.25007 = D.24995->data.klass;
  D.25008 = BIT_FIELD_REF <*D.25007, 8, 256>;
  D.25009 = D.25008 & 8;
  if (D.25009 != 0) goto <D.25010>; else goto <D.25011>;
  <D.25010>:
  D.24977 = ctx->verifiable;
  if (D.24977 != 0) goto <D.25012>; else goto <D.25014>;
  <D.25014>:
  D.24979 = ctx->level;
  D.24980 = D.24979 & 128;
  if (D.24980 != 0) goto <D.25012>; else goto <D.25013>;
  <D.25012>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24964 = ctx->ip_offset;
    D.25015 = monoeg_g_strdup_printf ("Invalid array type is not a reference type for ldelem.ref 0x%04x", D.24964);
    vinfo->info.message = D.25015;
    vinfo->exception_type = 4;
    D.24966 = ctx->list;
    D.25016 = monoeg_g_slist_prepend (D.24966, vinfo);
    ctx->list = D.25016;
  }
  ctx->verifiable = 0;
  D.24979 = ctx->level;
  D.24984 = D.24979 & 16;
  if (D.24984 != 0) goto <D.25017>; else goto <D.25018>;
  <D.25017>:
  ctx->valid = 0;
  <D.25018>:
  <D.25013>:
  <D.25011>:
  D.24995 = array->type;
  D.25007 = D.24995->data.klass;
  type = &D.25007->byval_arg;
  goto <D.25019>;
  <D.25006>:
  {
    struct MonoType * candidate;

    D.24995 = array->type;
    D.25007 = D.24995->data.klass;
    candidate = &D.25007->byval_arg;
    D.24979 = ctx->level;
    D.25020 = D.24979 & 32;
    if (D.25020 == 0) goto <D.25021>; else goto <D.25022>;
    <D.25021>:
    {
      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.25026 = underlying_type->type;
      D.25027 = D.25026 + 248;
      if (D.25027 <= 1) goto <D.25028>; else goto <D.25023>;
      <D.25028>:
      D.25029 = underlying_candidate->type;
      D.25030 = D.25029 + 232;
      if (D.25030 <= 1) goto <D.25024>; else goto <D.25023>;
      <D.25023>:
      D.25029 = underlying_candidate->type;
      D.25031 = D.25029 + 248;
      if (D.25031 <= 1) goto <D.25032>; else goto <D.25025>;
      <D.25032>:
      D.25026 = underlying_type->type;
      D.25033 = D.25026 + 232;
      if (D.25033 <= 1) goto <D.25024>; else goto <D.25025>;
      <D.25024>:
      D.24977 = ctx->verifiable;
      if (D.24977 != 0) goto <D.25034>; else goto <D.25036>;
      <D.25036>:
      D.24979 = ctx->level;
      D.24980 = D.24979 & 128;
      if (D.24980 != 0) goto <D.25034>; else goto <D.25035>;
      <D.25034>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24964 = ctx->ip_offset;
        D.25037 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelem.X at 0x%04x", D.24964);
        vinfo->info.message = D.25037;
        vinfo->exception_type = 4;
        D.24966 = ctx->list;
        D.25038 = monoeg_g_slist_prepend (D.24966, vinfo);
        ctx->list = D.25038;
      }
      ctx->verifiable = 0;
      D.24979 = ctx->level;
      D.24984 = D.24979 & 16;
      if (D.24984 != 0) goto <D.25039>; else goto <D.25040>;
      <D.25039>:
      ctx->valid = 0;
      <D.25040>:
      <D.25035>:
      <D.25025>:
    }
    <D.25022>:
    D.25041 = verify_type_compatibility_full (ctx, type, candidate, 1);
    if (D.25041 == 0) goto <D.25042>; else goto <D.25043>;
    <D.25042>:
    D.24977 = ctx->verifiable;
    if (D.24977 != 0) goto <D.25044>; else goto <D.25046>;
    <D.25046>:
    D.24979 = ctx->level;
    D.24980 = D.24979 & 128;
    if (D.24980 != 0) goto <D.25044>; else goto <D.25045>;
    <D.25044>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24964 = ctx->ip_offset;
      D.25047 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelem.X at 0x%04x", D.24964);
      vinfo->info.message = D.25047;
      vinfo->exception_type = 4;
      D.24966 = ctx->list;
      D.25048 = monoeg_g_slist_prepend (D.24966, vinfo);
      ctx->list = D.25048;
    }
    ctx->verifiable = 0;
    D.24979 = ctx->level;
    D.24984 = D.24979 & 16;
    if (D.24984 != 0) goto <D.25049>; else goto <D.25050>;
    <D.25049>:
    ctx->valid = 0;
    <D.25050>:
    <D.25045>:
    <D.25043>:
  }
  <D.25019>:
  <D.24992>:
  <D.24989>:
  D.25051 = stack_push (ctx);
  set_stack_value (ctx, D.25051, type, 0);
}


verifier_load_type (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoMethod * D.25053;
  unsigned char D.25054;
  unsigned char D.25055;
  unsigned int token.93;
  struct MonoType * iftmp.94;
  int D.25066;
  unsigned int D.25067;
  unsigned int D.25068;
  _Bool D.25069;
  _Bool D.25070;
  _Bool D.25071;
  unsigned int token.95;
  struct MonoImage * D.25074;
  int D.25075;
  unsigned int D.25076;
  gchar * D.25077;
  struct GSList * D.25078;
  struct GSList * D.25079;
  struct MonoType * D.25080;
  struct MonoGenericContext * D.25081;
  struct MonoLoaderError * D.25085;
  gchar * D.25086;
  struct GSList * D.25087;
  int D.25088;
  struct MonoType * type;

  D.25053 = ctx->method;
  D.25054 = BIT_FIELD_REF <*D.25053, 8, 256>;
  D.25055 = D.25054 & 124;
  if (D.25055 != 0) goto <D.25056>; else goto <D.25057>;
  <D.25056>:
  {
    struct MonoClass * class;

    token.93 = (unsigned int) token;
    D.25053 = ctx->method;
    class = mono_method_get_wrapper_data (D.25053, token.93);
    if (class != 0B) goto <D.25060>; else goto <D.25061>;
    <D.25060>:
    iftmp.94 = &class->byval_arg;
    goto <D.25062>;
    <D.25061>:
    iftmp.94 = 0B;
    <D.25062>:
    type = iftmp.94;
  }
  goto <D.25063>;
  <D.25057>:
  D.25066 = token >> 24;
  D.25067 = (unsigned int) D.25066;
  D.25068 = D.25067 + 4294967295;
  D.25069 = D.25068 > 1;
  D.25070 = D.25066 != 27;
  D.25071 = D.25069 & D.25070;
  if (D.25071 != 0) goto <D.25064>; else goto <D.25072>;
  <D.25072>:
  token.95 = (unsigned int) token;
  D.25074 = ctx->image;
  D.25075 = token_bounds_check (D.25074, token.95);
  if (D.25075 == 0) goto <D.25064>; else goto <D.25065>;
  <D.25064>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25076 = ctx->ip_offset;
    D.25077 = monoeg_g_strdup_printf ("Invalid type token 0x%08x at 0x%04x", token, D.25076);
    vinfo->info.message = D.25077;
    vinfo->exception_type = 12;
    D.25078 = ctx->list;
    D.25079 = monoeg_g_slist_prepend (D.25078, vinfo);
    ctx->list = D.25079;
  }
  ctx->valid = 0;
  D.25080 = 0B;
  return D.25080;
  <D.25065>:
  D.25081 = ctx->generic_context;
  token.95 = (unsigned int) token;
  D.25074 = ctx->image;
  type = mono_type_get_full (D.25074, token.95, D.25081);
  <D.25063>:
  if (type == 0B) goto <D.25082>; else goto <D.25084>;
  <D.25084>:
  D.25085 = mono_loader_get_last_error ();
  if (D.25085 != 0B) goto <D.25082>; else goto <D.25083>;
  <D.25082>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25076 = ctx->ip_offset;
    D.25086 = monoeg_g_strdup_printf ("Cannot load type from token 0x%08x for %s at 0x%04x", token, opcode, D.25076);
    vinfo->info.message = D.25086;
    vinfo->exception_type = 12;
    D.25078 = ctx->list;
    D.25087 = monoeg_g_slist_prepend (D.25078, vinfo);
    ctx->list = D.25087;
  }
  ctx->valid = 0;
  mono_loader_clear_error ();
  D.25080 = 0B;
  return D.25080;
  <D.25083>:
  D.25088 = mono_type_is_valid_in_context (ctx, type);
  if (D.25088 == 0) goto <D.25089>; else goto <D.25090>;
  <D.25089>:
  D.25080 = 0B;
  return D.25080;
  <D.25090>:
  D.25080 = type;
  return D.25080;
}


do_stelem (struct VerifyContext * ctx, int opcode, int token)
{
  int D.25092;
  unsigned int D.25099;
  gchar * D.25100;
  struct GSList * D.25101;
  struct GSList * D.25102;
  int D.25104;
  int D.25107;
  int D.25112;
  int D.25114;
  int D.25115;
  const char * D.25116;
  gchar * D.25117;
  struct GSList * D.25118;
  int D.25119;
  int D.25122;
  int D.25128;
  struct MonoType * D.25130;
  unsigned char D.25131;
  const char * D.25135;
  gchar * D.25136;
  struct GSList * D.25137;
  struct MonoClass * D.25142;
  unsigned char D.25143;
  unsigned char D.25144;
  gchar * D.25150;
  struct GSList * D.25151;
  struct MonoType * D.25155;
  int D.25156;
  gchar * D.25162;
  struct GSList * D.25163;
  int D.25168;
  struct MonoType * D.25171;
  struct MonoClass * D.25172;
  unsigned char D.25173;
  unsigned char D.25174;
  gchar * D.25180;
  struct GSList * D.25181;
  int D.25187;
  gchar * D.25193;
  struct GSList * D.25194;
  int D.25197;
  int D.25200;
  int D.25203;
  gchar * D.25209;
  struct GSList * D.25210;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct ILStackDesc * value;
  struct MonoType * type;

  D.25092 = check_underflow (ctx, 3);
  if (D.25092 == 0) goto <D.25093>; else goto <D.25094>;
  <D.25093>:
  return;
  <D.25094>:
  if (opcode == 164) goto <D.25095>; else goto <D.25096>;
  <D.25095>:
  type = verifier_load_type (ctx, token, "stelem.any");
  if (type == 0B) goto <D.25097>; else goto <D.25098>;
  <D.25097>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25099 = ctx->ip_offset;
    D.25100 = monoeg_g_strdup_printf ("Type (0x%08x) not found at 0x%04x", token, D.25099);
    vinfo->info.message = D.25100;
    vinfo->exception_type = 3;
    D.25101 = ctx->list;
    D.25102 = monoeg_g_slist_prepend (D.25101, vinfo);
    ctx->list = D.25102;
  }
  ctx->valid = 0;
  return;
  <D.25098>:
  goto <D.25103>;
  <D.25096>:
  type = mono_type_from_opcode (opcode);
  <D.25103>:
  value = stack_pop (ctx);
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.25104 = stack_slot_get_type (index);
  if (D.25104 != 1) goto <D.25105>; else goto <D.25106>;
  <D.25105>:
  D.25107 = stack_slot_get_type (index);
  if (D.25107 != 3) goto <D.25108>; else goto <D.25109>;
  <D.25108>:
  D.25112 = ctx->verifiable;
  if (D.25112 != 0) goto <D.25110>; else goto <D.25113>;
  <D.25113>:
  D.25114 = ctx->level;
  D.25115 = D.25114 & 128;
  if (D.25115 != 0) goto <D.25110>; else goto <D.25111>;
  <D.25110>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25099 = ctx->ip_offset;
    D.25116 = stack_slot_get_name (index);
    D.25117 = monoeg_g_strdup_printf ("Index type(%s) for stdelem.X is not an int or a native int at 0x%04x", D.25116, D.25099);
    vinfo->info.message = D.25117;
    vinfo->exception_type = 4;
    D.25101 = ctx->list;
    D.25118 = monoeg_g_slist_prepend (D.25101, vinfo);
    ctx->list = D.25118;
  }
  ctx->verifiable = 0;
  D.25114 = ctx->level;
  D.25119 = D.25114 & 16;
  if (D.25119 != 0) goto <D.25120>; else goto <D.25121>;
  <D.25120>:
  ctx->valid = 0;
  <D.25121>:
  <D.25111>:
  <D.25109>:
  <D.25106>:
  D.25122 = stack_slot_is_null_literal (array);
  if (D.25122 == 0) goto <D.25123>; else goto <D.25124>;
  <D.25123>:
  D.25128 = stack_slot_get_type (array);
  if (D.25128 != 6) goto <D.25125>; else goto <D.25129>;
  <D.25129>:
  D.25130 = array->type;
  D.25131 = D.25130->type;
  if (D.25131 != 29) goto <D.25125>; else goto <D.25126>;
  <D.25125>:
  D.25112 = ctx->verifiable;
  if (D.25112 != 0) goto <D.25132>; else goto <D.25134>;
  <D.25134>:
  D.25114 = ctx->level;
  D.25115 = D.25114 & 128;
  if (D.25115 != 0) goto <D.25132>; else goto <D.25133>;
  <D.25132>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25099 = ctx->ip_offset;
    D.25135 = stack_slot_get_name (array);
    D.25136 = monoeg_g_strdup_printf ("Invalid array type(%s) for stelem.X at 0x%04x", D.25135, D.25099);
    vinfo->info.message = D.25136;
    vinfo->exception_type = 4;
    D.25101 = ctx->list;
    D.25137 = monoeg_g_slist_prepend (D.25101, vinfo);
    ctx->list = D.25137;
  }
  ctx->verifiable = 0;
  D.25114 = ctx->level;
  D.25119 = D.25114 & 16;
  if (D.25119 != 0) goto <D.25138>; else goto <D.25139>;
  <D.25138>:
  ctx->valid = 0;
  <D.25139>:
  <D.25133>:
  goto <D.25127>;
  <D.25126>:
  if (opcode == 162) goto <D.25140>; else goto <D.25141>;
  <D.25140>:
  D.25130 = array->type;
  D.25142 = D.25130->data.klass;
  D.25143 = BIT_FIELD_REF <*D.25142, 8, 256>;
  D.25144 = D.25143 & 8;
  if (D.25144 != 0) goto <D.25145>; else goto <D.25146>;
  <D.25145>:
  D.25112 = ctx->verifiable;
  if (D.25112 != 0) goto <D.25147>; else goto <D.25149>;
  <D.25149>:
  D.25114 = ctx->level;
  D.25115 = D.25114 & 128;
  if (D.25115 != 0) goto <D.25147>; else goto <D.25148>;
  <D.25147>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25099 = ctx->ip_offset;
    D.25150 = monoeg_g_strdup_printf ("Invalid array type is not a reference type for stelem.ref 0x%04x", D.25099);
    vinfo->info.message = D.25150;
    vinfo->exception_type = 4;
    D.25101 = ctx->list;
    D.25151 = monoeg_g_slist_prepend (D.25101, vinfo);
    ctx->list = D.25151;
  }
  ctx->verifiable = 0;
  D.25114 = ctx->level;
  D.25119 = D.25114 & 16;
  if (D.25119 != 0) goto <D.25152>; else goto <D.25153>;
  <D.25152>:
  ctx->valid = 0;
  <D.25153>:
  <D.25148>:
  <D.25146>:
  goto <D.25154>;
  <D.25141>:
  D.25130 = array->type;
  D.25142 = D.25130->data.klass;
  D.25155 = &D.25142->byval_arg;
  D.25156 = verify_type_compatibility_full (ctx, D.25155, type, 1);
  if (D.25156 == 0) goto <D.25157>; else goto <D.25158>;
  <D.25157>:
  D.25112 = ctx->verifiable;
  if (D.25112 != 0) goto <D.25159>; else goto <D.25161>;
  <D.25161>:
  D.25114 = ctx->level;
  D.25115 = D.25114 & 128;
  if (D.25115 != 0) goto <D.25159>; else goto <D.25160>;
  <D.25159>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25099 = ctx->ip_offset;
    D.25162 = monoeg_g_strdup_printf ("Invalid array type on stack for stdelem.X at 0x%04x", D.25099);
    vinfo->info.message = D.25162;
    vinfo->exception_type = 4;
    D.25101 = ctx->list;
    D.25163 = monoeg_g_slist_prepend (D.25101, vinfo);
    ctx->list = D.25163;
  }
  ctx->verifiable = 0;
  D.25114 = ctx->level;
  D.25119 = D.25114 & 16;
  if (D.25119 != 0) goto <D.25164>; else goto <D.25165>;
  <D.25164>:
  ctx->valid = 0;
  <D.25165>:
  <D.25160>:
  <D.25158>:
  <D.25154>:
  <D.25127>:
  <D.25124>:
  if (opcode == 162) goto <D.25166>; else goto <D.25167>;
  <D.25166>:
  D.25168 = stack_slot_is_boxed_value (value);
  if (D.25168 == 0) goto <D.25169>; else goto <D.25170>;
  <D.25169>:
  D.25171 = value->type;
  D.25172 = mono_class_from_mono_type (D.25171);
  D.25173 = BIT_FIELD_REF <*D.25172, 8, 256>;
  D.25174 = D.25173 & 8;
  if (D.25174 != 0) goto <D.25175>; else goto <D.25176>;
  <D.25175>:
  D.25112 = ctx->verifiable;
  if (D.25112 != 0) goto <D.25177>; else goto <D.25179>;
  <D.25179>:
  D.25114 = ctx->level;
  D.25115 = D.25114 & 128;
  if (D.25115 != 0) goto <D.25177>; else goto <D.25178>;
  <D.25177>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25099 = ctx->ip_offset;
    D.25180 = monoeg_g_strdup_printf ("Invalid value is not a reference type for stelem.ref 0x%04x", D.25099);
    vinfo->info.message = D.25180;
    vinfo->exception_type = 4;
    D.25101 = ctx->list;
    D.25181 = monoeg_g_slist_prepend (D.25101, vinfo);
    ctx->list = D.25181;
  }
  ctx->verifiable = 0;
  D.25114 = ctx->level;
  D.25119 = D.25114 & 16;
  if (D.25119 != 0) goto <D.25182>; else goto <D.25183>;
  <D.25182>:
  ctx->valid = 0;
  <D.25183>:
  <D.25178>:
  <D.25176>:
  <D.25170>:
  goto <D.25184>;
  <D.25167>:
  if (opcode != 162) goto <D.25185>; else goto <D.25186>;
  <D.25185>:
  D.25187 = verify_stack_type_compatibility (ctx, type, value);
  if (D.25187 == 0) goto <D.25188>; else goto <D.25189>;
  <D.25188>:
  D.25112 = ctx->verifiable;
  if (D.25112 != 0) goto <D.25190>; else goto <D.25192>;
  <D.25192>:
  D.25114 = ctx->level;
  D.25115 = D.25114 & 128;
  if (D.25115 != 0) goto <D.25190>; else goto <D.25191>;
  <D.25190>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25099 = ctx->ip_offset;
    D.25193 = monoeg_g_strdup_printf ("Invalid value on stack for stdelem.X at 0x%04x", D.25099);
    vinfo->info.message = D.25193;
    vinfo->exception_type = 4;
    D.25101 = ctx->list;
    D.25194 = monoeg_g_slist_prepend (D.25101, vinfo);
    ctx->list = D.25194;
  }
  ctx->verifiable = 0;
  D.25114 = ctx->level;
  D.25119 = D.25114 & 16;
  if (D.25119 != 0) goto <D.25195>; else goto <D.25196>;
  <D.25195>:
  ctx->valid = 0;
  <D.25196>:
  <D.25191>:
  <D.25189>:
  D.25197 = stack_slot_is_boxed_value (value);
  if (D.25197 != 0) goto <D.25198>; else goto <D.25199>;
  <D.25198>:
  D.25171 = value->type;
  D.25200 = mono_type_is_reference (D.25171);
  if (D.25200 == 0) goto <D.25201>; else goto <D.25202>;
  <D.25201>:
  D.25203 = mono_type_is_reference (type);
  if (D.25203 == 0) goto <D.25204>; else goto <D.25205>;
  <D.25204>:
  D.25112 = ctx->verifiable;
  if (D.25112 != 0) goto <D.25206>; else goto <D.25208>;
  <D.25208>:
  D.25114 = ctx->level;
  D.25115 = D.25114 & 128;
  if (D.25115 != 0) goto <D.25206>; else goto <D.25207>;
  <D.25206>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25099 = ctx->ip_offset;
    D.25209 = monoeg_g_strdup_printf ("Cannot use stobj with a boxed source value that is not a reference type at 0x%04x", D.25099);
    vinfo->info.message = D.25209;
    vinfo->exception_type = 4;
    D.25101 = ctx->list;
    D.25210 = monoeg_g_slist_prepend (D.25101, vinfo);
    ctx->list = D.25210;
  }
  ctx->verifiable = 0;
  D.25114 = ctx->level;
  D.25119 = D.25114 & 16;
  if (D.25119 != 0) goto <D.25211>; else goto <D.25212>;
  <D.25211>:
  ctx->valid = 0;
  <D.25212>:
  <D.25207>:
  <D.25205>:
  <D.25202>:
  <D.25199>:
  <D.25186>:
  <D.25184>:
}


do_unbox_any (struct VerifyContext * ctx, int klass_token)
{
  int D.25216;
  int D.25221;
  int D.25223;
  struct MonoType * D.25225;
  struct MonoClass * D.25226;
  unsigned char D.25227;
  unsigned char D.25228;
  int D.25231;
  int D.25233;
  int D.25234;
  unsigned int D.25235;
  const char * D.25236;
  gchar * D.25237;
  struct GSList * D.25238;
  struct GSList * D.25239;
  int D.25240;
  struct ILStackDesc * D.25243;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, klass_token, "unbox.any");
  if (type == 0B) goto <D.25214>; else goto <D.25215>;
  <D.25214>:
  return;
  <D.25215>:
  D.25216 = check_underflow (ctx, 1);
  if (D.25216 == 0) goto <D.25217>; else goto <D.25218>;
  <D.25217>:
  return;
  <D.25218>:
  value = stack_pop (ctx);
  D.25221 = stack_slot_get_type (value);
  if (D.25221 != 6) goto <D.25219>; else goto <D.25222>;
  <D.25222>:
  D.25223 = stack_slot_is_boxed_value (value);
  if (D.25223 == 0) goto <D.25224>; else goto <D.25220>;
  <D.25224>:
  D.25225 = value->type;
  D.25226 = mono_class_from_mono_type (D.25225);
  D.25227 = BIT_FIELD_REF <*D.25226, 8, 256>;
  D.25228 = D.25227 & 8;
  if (D.25228 != 0) goto <D.25219>; else goto <D.25220>;
  <D.25219>:
  D.25231 = ctx->verifiable;
  if (D.25231 != 0) goto <D.25229>; else goto <D.25232>;
  <D.25232>:
  D.25233 = ctx->level;
  D.25234 = D.25233 & 128;
  if (D.25234 != 0) goto <D.25229>; else goto <D.25230>;
  <D.25229>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25235 = ctx->ip_offset;
    D.25236 = stack_slot_get_name (value);
    D.25237 = monoeg_g_strdup_printf ("Invalid type %s at stack for unbox.any operation at 0x%04x", D.25236, D.25235);
    vinfo->info.message = D.25237;
    vinfo->exception_type = 4;
    D.25238 = ctx->list;
    D.25239 = monoeg_g_slist_prepend (D.25238, vinfo);
    ctx->list = D.25239;
  }
  ctx->verifiable = 0;
  D.25233 = ctx->level;
  D.25240 = D.25233 & 16;
  if (D.25240 != 0) goto <D.25241>; else goto <D.25242>;
  <D.25241>:
  ctx->valid = 0;
  <D.25242>:
  <D.25230>:
  <D.25220>:
  D.25243 = stack_push (ctx);
  set_stack_value (ctx, D.25243, type, 0);
}


do_conversion (struct VerifyContext * ctx, int kind)
{
  int D.25245;
  int D.25248;
  int D.25251;
  int D.25253;
  int D.25254;
  unsigned int D.25255;
  const char * D.25256;
  gchar * D.25257;
  struct GSList * D.25258;
  struct GSList * D.25259;
  int D.25260;
  struct MonoClass * D.25263;
  struct MonoType * D.25264;
  struct MonoClass * D.25265;
  struct MonoType * D.25266;
  struct MonoClass * D.25267;
  struct MonoType * D.25268;
  struct MonoClass * D.25269;
  struct MonoType * D.25270;
  struct ILStackDesc * value;

  D.25245 = check_underflow (ctx, 1);
  if (D.25245 == 0) goto <D.25246>; else goto <D.25247>;
  <D.25246>:
  return;
  <D.25247>:
  value = stack_pop (ctx);
  D.25248 = stack_slot_get_type (value);
  switch (D.25248) <default: <D.18972>, case 1: <D.18967>, case 2: <D.18968>, case 3: <D.18969>, case 4: <D.18970>>
  <D.18967>:
  <D.18968>:
  <D.18969>:
  <D.18970>:
  goto <D.18971>;
  <D.18972>:
  D.25251 = ctx->verifiable;
  if (D.25251 != 0) goto <D.25249>; else goto <D.25252>;
  <D.25252>:
  D.25253 = ctx->level;
  D.25254 = D.25253 & 128;
  if (D.25254 != 0) goto <D.25249>; else goto <D.25250>;
  <D.25249>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25255 = ctx->ip_offset;
    D.25256 = stack_slot_get_name (value);
    D.25257 = monoeg_g_strdup_printf ("Invalid type (%s) at stack for conversion operation. Numeric type expected at 0x%04x", D.25256, D.25255);
    vinfo->info.message = D.25257;
    vinfo->exception_type = 4;
    D.25258 = ctx->list;
    D.25259 = monoeg_g_slist_prepend (D.25258, vinfo);
    ctx->list = D.25259;
  }
  ctx->verifiable = 0;
  D.25253 = ctx->level;
  D.25260 = D.25253 & 16;
  if (D.25260 != 0) goto <D.25261>; else goto <D.25262>;
  <D.25261>:
  ctx->valid = 0;
  <D.25262>:
  <D.25250>:
  <D.18971>:
  switch (kind) <default: <D.18979>, case 1: <D.18974>, case 2: <D.18976>, case 3: <D.18978>, case 4: <D.18977>>
  <D.18974>:
  D.25263 = mono_defaults.int32_class;
  D.25264 = &D.25263->byval_arg;
  stack_push_val (ctx, 1, D.25264);
  goto <D.18975>;
  <D.18976>:
  D.25265 = mono_defaults.int64_class;
  D.25266 = &D.25265->byval_arg;
  stack_push_val (ctx, 2, D.25266);
  goto <D.18975>;
  <D.18977>:
  D.25267 = mono_defaults.double_class;
  D.25268 = &D.25267->byval_arg;
  stack_push_val (ctx, 4, D.25268);
  goto <D.18975>;
  <D.18978>:
  D.25269 = mono_defaults.int_class;
  D.25270 = &D.25269->byval_arg;
  stack_push_val (ctx, 3, D.25270);
  goto <D.18975>;
  <D.18979>:
  monoeg_g_log (0B, 4, "unknown type %02x in conversion", kind);
  <D.18980>:
  goto <D.18980>;
  <D.18975>:
}


do_refanyval (struct VerifyContext * ctx, int token)
{
  int D.25273;
  int D.25280;
  struct MonoType * D.25282;
  unsigned char D.25283;
  unsigned int D.25284;
  const char * D.25285;
  gchar * D.25286;
  struct GSList * D.25287;
  struct GSList * D.25288;
  struct ILStackDesc * D.25289;
  struct ILStackDesc * top;
  struct MonoType * type;

  D.25273 = check_underflow (ctx, 1);
  if (D.25273 == 0) goto <D.25274>; else goto <D.25275>;
  <D.25274>:
  return;
  <D.25275>:
  type = get_boxable_mono_type (ctx, token, "refanyval");
  if (type == 0B) goto <D.25276>; else goto <D.25277>;
  <D.25276>:
  return;
  <D.25277>:
  top = stack_pop (ctx);
  D.25280 = top->stype;
  if (D.25280 != 5) goto <D.25278>; else goto <D.25281>;
  <D.25281>:
  D.25282 = top->type;
  D.25283 = D.25282->type;
  if (D.25283 != 22) goto <D.25278>; else goto <D.25279>;
  <D.25278>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25284 = ctx->ip_offset;
    D.25285 = stack_slot_get_name (top);
    D.25286 = monoeg_g_strdup_printf ("Expected a typedref as argument for refanyval, but found %s at 0x%04x", D.25285, D.25284);
    vinfo->info.message = D.25286;
    vinfo->exception_type = 3;
    D.25287 = ctx->list;
    D.25288 = monoeg_g_slist_prepend (D.25287, vinfo);
    ctx->list = D.25288;
  }
  ctx->valid = 0;
  <D.25279>:
  D.25289 = stack_push (ctx);
  set_stack_value (ctx, D.25289, type, 1);
}


do_ckfinite (struct VerifyContext * ctx)
{
  int D.25291;
  int D.25294;
  unsigned int D.25297;
  const char * D.25298;
  gchar * D.25299;
  struct GSList * D.25300;
  struct GSList * D.25301;
  struct ILStackDesc * top;

  D.25291 = check_underflow (ctx, 1);
  if (D.25291 == 0) goto <D.25292>; else goto <D.25293>;
  <D.25292>:
  return;
  <D.25293>:
  top = stack_pop (ctx);
  D.25294 = stack_slot_get_underlying_type (top);
  if (D.25294 != 4) goto <D.25295>; else goto <D.25296>;
  <D.25295>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25297 = ctx->ip_offset;
    D.25298 = stack_slot_get_name (top);
    D.25299 = monoeg_g_strdup_printf ("Expected float32 or float64 on stack for ckfinit but found %s at 0x%04x", D.25298, D.25297);
    vinfo->info.message = D.25299;
    vinfo->exception_type = 3;
    D.25300 = ctx->list;
    D.25301 = monoeg_g_slist_prepend (D.25300, vinfo);
    ctx->list = D.25301;
  }
  ctx->valid = 0;
  <D.25296>:
  stack_push_stack_val (ctx, top);
}


do_mkrefany (struct VerifyContext * ctx, int token)
{
  int D.25303;
  int D.25308;
  int D.25313;
  int D.25315;
  int D.25316;
  unsigned int D.25317;
  gchar * D.25318;
  struct GSList * D.25319;
  struct GSList * D.25320;
  int D.25321;
  int D.25324;
  const char * D.25330;
  gchar * D.25331;
  struct GSList * D.25332;
  struct MonoType * D.25336;
  int D.25337;
  int D.25340;
  gchar * D.25346;
  struct GSList * D.25347;
  int D.25350;
  int D.25353;
  gchar * D.25359;
  struct GSList * D.25360;
  struct MonoClass * D.25363;
  struct MonoType * D.25364;
  struct ILStackDesc * D.25365;
  struct ILStackDesc * top;
  struct MonoType * type;

  D.25303 = check_underflow (ctx, 1);
  if (D.25303 == 0) goto <D.25304>; else goto <D.25305>;
  <D.25304>:
  return;
  <D.25305>:
  type = get_boxable_mono_type (ctx, token, "refanyval");
  if (type == 0B) goto <D.25306>; else goto <D.25307>;
  <D.25306>:
  return;
  <D.25307>:
  top = stack_pop (ctx);
  D.25308 = stack_slot_is_managed_mutability_pointer (top);
  if (D.25308 != 0) goto <D.25309>; else goto <D.25310>;
  <D.25309>:
  D.25313 = ctx->verifiable;
  if (D.25313 != 0) goto <D.25311>; else goto <D.25314>;
  <D.25314>:
  D.25315 = ctx->level;
  D.25316 = D.25315 & 128;
  if (D.25316 != 0) goto <D.25311>; else goto <D.25312>;
  <D.25311>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25317 = ctx->ip_offset;
    D.25318 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with mkrefany at 0x%04x", D.25317);
    vinfo->info.message = D.25318;
    vinfo->exception_type = 4;
    D.25319 = ctx->list;
    D.25320 = monoeg_g_slist_prepend (D.25319, vinfo);
    ctx->list = D.25320;
  }
  ctx->verifiable = 0;
  D.25315 = ctx->level;
  D.25321 = D.25315 & 16;
  if (D.25321 != 0) goto <D.25322>; else goto <D.25323>;
  <D.25322>:
  ctx->valid = 0;
  <D.25323>:
  <D.25312>:
  <D.25310>:
  D.25324 = stack_slot_is_managed_pointer (top);
  if (D.25324 == 0) goto <D.25325>; else goto <D.25326>;
  <D.25325>:
  D.25313 = ctx->verifiable;
  if (D.25313 != 0) goto <D.25327>; else goto <D.25329>;
  <D.25329>:
  D.25315 = ctx->level;
  D.25316 = D.25315 & 128;
  if (D.25316 != 0) goto <D.25327>; else goto <D.25328>;
  <D.25327>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25317 = ctx->ip_offset;
    D.25330 = stack_slot_get_name (top);
    D.25331 = monoeg_g_strdup_printf ("Expected a managed pointer for mkrefany, but found %s at 0x%04x", D.25330, D.25317);
    vinfo->info.message = D.25331;
    vinfo->exception_type = 4;
    D.25319 = ctx->list;
    D.25332 = monoeg_g_slist_prepend (D.25319, vinfo);
    ctx->list = D.25332;
  }
  ctx->verifiable = 0;
  D.25315 = ctx->level;
  D.25321 = D.25315 & 16;
  if (D.25321 != 0) goto <D.25333>; else goto <D.25334>;
  <D.25333>:
  ctx->valid = 0;
  <D.25334>:
  <D.25328>:
  goto <D.25335>;
  <D.25326>:
  {
    struct MonoType * stack_type;

    D.25336 = top->type;
    stack_type = mono_type_get_type_byval (D.25336);
    D.25337 = mono_type_is_reference (type);
    if (D.25337 != 0) goto <D.25338>; else goto <D.25339>;
    <D.25338>:
    D.25340 = mono_metadata_type_equal (type, stack_type);
    if (D.25340 == 0) goto <D.25341>; else goto <D.25342>;
    <D.25341>:
    D.25313 = ctx->verifiable;
    if (D.25313 != 0) goto <D.25343>; else goto <D.25345>;
    <D.25345>:
    D.25315 = ctx->level;
    D.25316 = D.25315 & 128;
    if (D.25316 != 0) goto <D.25343>; else goto <D.25344>;
    <D.25343>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25317 = ctx->ip_offset;
      D.25346 = monoeg_g_strdup_printf ("Type not compatible for mkrefany at 0x%04x", D.25317);
      vinfo->info.message = D.25346;
      vinfo->exception_type = 4;
      D.25319 = ctx->list;
      D.25347 = monoeg_g_slist_prepend (D.25319, vinfo);
      ctx->list = D.25347;
    }
    ctx->verifiable = 0;
    D.25315 = ctx->level;
    D.25321 = D.25315 & 16;
    if (D.25321 != 0) goto <D.25348>; else goto <D.25349>;
    <D.25348>:
    ctx->valid = 0;
    <D.25349>:
    <D.25344>:
    <D.25342>:
    <D.25339>:
    D.25350 = mono_type_is_reference (type);
    if (D.25350 == 0) goto <D.25351>; else goto <D.25352>;
    <D.25351>:
    D.25353 = verify_type_compatibility_full (ctx, type, stack_type, 1);
    if (D.25353 == 0) goto <D.25354>; else goto <D.25355>;
    <D.25354>:
    D.25313 = ctx->verifiable;
    if (D.25313 != 0) goto <D.25356>; else goto <D.25358>;
    <D.25358>:
    D.25315 = ctx->level;
    D.25316 = D.25315 & 128;
    if (D.25316 != 0) goto <D.25356>; else goto <D.25357>;
    <D.25356>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25317 = ctx->ip_offset;
      D.25359 = monoeg_g_strdup_printf ("Type not compatible for mkrefany at 0x%04x", D.25317);
      vinfo->info.message = D.25359;
      vinfo->exception_type = 4;
      D.25319 = ctx->list;
      D.25360 = monoeg_g_slist_prepend (D.25319, vinfo);
      ctx->list = D.25360;
    }
    ctx->verifiable = 0;
    D.25315 = ctx->level;
    D.25321 = D.25315 & 16;
    if (D.25321 != 0) goto <D.25361>; else goto <D.25362>;
    <D.25361>:
    ctx->valid = 0;
    <D.25362>:
    <D.25357>:
    <D.25355>:
    <D.25352>:
  }
  <D.25335>:
  D.25363 = mono_defaults.typed_reference_class;
  D.25364 = &D.25363->byval_arg;
  D.25365 = stack_push (ctx);
  set_stack_value (ctx, D.25365, D.25364, 0);
}


do_load_token (struct VerifyContext * ctx, int token)
{
  int D.25367;
  struct MonoMethod * D.25370;
  unsigned char D.25371;
  unsigned char D.25372;
  unsigned int token.96;
  int D.25376;
  unsigned int D.25377;
  void * handle_class.97;
  struct MonoClass * D.25379;
  struct MonoClass * handle_class.98;
  unsigned int token.99;
  unsigned int D.25385;
  struct MonoImage * D.25386;
  int D.25387;
  unsigned int D.25390;
  int D.25391;
  gchar * D.25392;
  struct GSList * D.25393;
  struct GSList * D.25394;
  int D.25395;
  gchar * D.25396;
  struct GSList * D.25397;
  struct MonoGenericContext * D.25398;
  unsigned int token.100;
  gchar * D.25402;
  struct GSList * D.25403;
  struct MonoClass * D.25407;
  struct MonoClass * D.25411;
  struct MonoClass * D.25414;
  struct MonoType * D.25415;
  gchar * D.25417;
  struct GSList * D.25418;
  struct MonoType * D.25419;
  void * handle;
  struct MonoClass * handle_class;

  try
    {
      D.25367 = check_overflow (ctx);
      if (D.25367 == 0) goto <D.25368>; else goto <D.25369>;
      <D.25368>:
      return;
      <D.25369>:
      D.25370 = ctx->method;
      D.25371 = BIT_FIELD_REF <*D.25370, 8, 256>;
      D.25372 = D.25371 & 124;
      if (D.25372 != 0) goto <D.25373>; else goto <D.25374>;
      <D.25373>:
      token.96 = (unsigned int) token;
      D.25370 = ctx->method;
      handle = mono_method_get_wrapper_data (D.25370, token.96);
      D.25376 = token + 1;
      D.25377 = (unsigned int) D.25376;
      D.25370 = ctx->method;
      handle_class.97 = mono_method_get_wrapper_data (D.25370, D.25377);
      handle_class = handle_class.97;
      D.25379 = mono_defaults.typehandle_class;
      handle_class.98 = handle_class;
      if (D.25379 == handle_class.98) goto <D.25381>; else goto <D.25382>;
      <D.25381>:
      handle = &MEM[(struct MonoClass *)handle].byval_arg;
      <D.25382>:
      goto <D.25383>;
      <D.25374>:
      token.99 = (unsigned int) token;
      D.25385 = token.99 & 4278190080;
      switch (D.25385) <default: <D.18996>, case 16777216: <D.18988>, case 33554432: <D.18987>, case 67108864: <D.18990>, case 100663296: <D.18991>, case 167772160: <D.18993>, case 452984832: <D.18989>, case 721420288: <D.18992>>
      <D.18987>:
      <D.18988>:
      <D.18989>:
      <D.18990>:
      <D.18991>:
      <D.18992>:
      <D.18993>:
      token.96 = (unsigned int) token;
      D.25386 = ctx->image;
      D.25387 = token_bounds_check (D.25386, token.96);
      if (D.25387 == 0) goto <D.25388>; else goto <D.25389>;
      <D.25388>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25390 = ctx->ip_offset;
        D.25391 = token & 16777215;
        D.25392 = monoeg_g_strdup_printf ("Table index out of range 0x%x for token %x for ldtoken at 0x%04x", D.25391, token, D.25390);
        vinfo->info.message = D.25392;
        vinfo->exception_type = 3;
        D.25393 = ctx->list;
        D.25394 = monoeg_g_slist_prepend (D.25393, vinfo);
        ctx->list = D.25394;
      }
      ctx->valid = 0;
      return;
      <D.25389>:
      goto <D.18995>;
      <D.18996>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25390 = ctx->ip_offset;
        D.25395 = token >> 24;
        D.25396 = monoeg_g_strdup_printf ("Invalid table 0x%x for token 0x%x for ldtoken at 0x%04x", D.25395, token, D.25390);
        vinfo->info.message = D.25396;
        vinfo->exception_type = 3;
        D.25393 = ctx->list;
        D.25397 = monoeg_g_slist_prepend (D.25393, vinfo);
        ctx->list = D.25397;
      }
      ctx->valid = 0;
      return;
      <D.18995>:
      D.25398 = ctx->generic_context;
      token.100 = (unsigned int) token;
      D.25386 = ctx->image;
      handle = mono_ldtoken (D.25386, token.100, &handle_class, D.25398);
      <D.25383>:
      if (handle == 0B) goto <D.25400>; else goto <D.25401>;
      <D.25400>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25390 = ctx->ip_offset;
        D.25402 = monoeg_g_strdup_printf ("Invalid token 0x%x for ldtoken at 0x%04x", token, D.25390);
        vinfo->info.message = D.25402;
        vinfo->exception_type = 3;
        D.25393 = ctx->list;
        D.25403 = monoeg_g_slist_prepend (D.25393, vinfo);
        ctx->list = D.25403;
      }
      ctx->valid = 0;
      return;
      <D.25401>:
      D.25379 = mono_defaults.typehandle_class;
      handle_class.98 = handle_class;
      if (D.25379 == handle_class.98) goto <D.25404>; else goto <D.25405>;
      <D.25404>:
      mono_type_is_valid_in_context (ctx, handle);
      goto <D.25406>;
      <D.25405>:
      D.25407 = mono_defaults.methodhandle_class;
      handle_class.98 = handle_class;
      if (D.25407 == handle_class.98) goto <D.25408>; else goto <D.25409>;
      <D.25408>:
      mono_method_is_valid_in_context (ctx, handle);
      goto <D.25410>;
      <D.25409>:
      D.25411 = mono_defaults.fieldhandle_class;
      handle_class.98 = handle_class;
      if (D.25411 == handle_class.98) goto <D.25412>; else goto <D.25413>;
      <D.25412>:
      D.25414 = MEM[(struct MonoClassField *)handle].parent;
      D.25415 = &D.25414->byval_arg;
      mono_type_is_valid_in_context (ctx, D.25415);
      goto <D.25416>;
      <D.25413>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25390 = ctx->ip_offset;
        D.25417 = monoeg_g_strdup_printf ("Invalid ldtoken type %x at 0x%04x", token, D.25390);
        vinfo->info.message = D.25417;
        vinfo->exception_type = 12;
        D.25393 = ctx->list;
        D.25418 = monoeg_g_slist_prepend (D.25393, vinfo);
        ctx->list = D.25418;
      }
      ctx->valid = 0;
      <D.25416>:
      <D.25410>:
      <D.25406>:
      handle_class.98 = handle_class;
      D.25419 = mono_class_get_type (handle_class.98);
      stack_push_val (ctx, 6, D.25419);
    }
  finally
    {
      handle_class = {CLOBBER};
    }
}


is_correct_endfinally (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.25423;
  long unsigned int D.25424;
  long unsigned int D.25425;
  unsigned int D.25426;
  unsigned int D.25429;
  unsigned int D.25430;
  unsigned int D.25433;
  _Bool D.25434;
  _Bool D.25435;
  _Bool D.25436;
  int D.25439;
  <unnamed-unsigned:15> D.25440;
  int D.25441;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18240>;
  <D.18239>:
  D.25423 = header->clauses;
  D.25424 = (long unsigned int) i;
  D.25425 = D.25424 * 32;
  clause = D.25423 + D.25425;
  D.25426 = clause->handler_offset;
  if (D.25426 <= offset) goto <D.25427>; else goto <D.25428>;
  <D.25427>:
  D.25426 = clause->handler_offset;
  D.25429 = clause->handler_len;
  D.25430 = D.25426 + D.25429;
  if (D.25430 > offset) goto <D.25431>; else goto <D.25432>;
  <D.25431>:
  D.25433 = clause->flags;
  D.25434 = D.25433 == 4;
  D.25435 = D.25433 == 2;
  D.25436 = D.25434 | D.25435;
  if (D.25436 != 0) goto <D.25437>; else goto <D.25438>;
  <D.25437>:
  D.25439 = 1;
  return D.25439;
  <D.25438>:
  <D.25432>:
  <D.25428>:
  i = i + 1;
  <D.18240>:
  D.25440 = header->num_clauses;
  D.25441 = (int) D.25440;
  if (D.25441 > i) goto <D.18239>; else goto <D.18241>;
  <D.18241>:
  D.25439 = 0;
  return D.25439;
}


do_leave (struct VerifyContext * ctx, int delta)
{
  unsigned int D.25443;
  int D.25444;
  int D.25447;
  gchar * D.25449;
  struct GSList * D.25450;
  struct GSList * D.25451;
  unsigned int target.101;
  struct MonoMethodHeader * D.25453;
  int D.25454;
  int D.25459;
  int D.25461;
  int D.25462;
  gchar * D.25463;
  struct GSList * D.25464;
  int D.25465;
  int target;

  D.25443 = ctx->ip_offset;
  D.25444 = (int) D.25443;
  target = D.25444 + delta;
  D.25447 = ctx->code_size;
  if (D.25447 <= target) goto <D.25445>; else goto <D.25448>;
  <D.25448>:
  if (target < 0) goto <D.25445>; else goto <D.25446>;
  <D.25445>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25443 = ctx->ip_offset;
    D.25449 = monoeg_g_strdup_printf ("Branch target out of code at 0x%04x", D.25443);
    vinfo->info.message = D.25449;
    vinfo->exception_type = 3;
    D.25450 = ctx->list;
    D.25451 = monoeg_g_slist_prepend (D.25450, vinfo);
    ctx->list = D.25451;
  }
  ctx->valid = 0;
  <D.25446>:
  target.101 = (unsigned int) target;
  D.25443 = ctx->ip_offset;
  D.25453 = ctx->header;
  D.25454 = is_correct_leave (D.25453, D.25443, target.101);
  if (D.25454 == 0) goto <D.25455>; else goto <D.25456>;
  <D.25455>:
  D.25459 = ctx->verifiable;
  if (D.25459 != 0) goto <D.25457>; else goto <D.25460>;
  <D.25460>:
  D.25461 = ctx->level;
  D.25462 = D.25461 & 128;
  if (D.25462 != 0) goto <D.25457>; else goto <D.25458>;
  <D.25457>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25443 = ctx->ip_offset;
    D.25463 = monoeg_g_strdup_printf ("Leave not allowed in finally block at 0x%04x", D.25443);
    vinfo->info.message = D.25463;
    vinfo->exception_type = 4;
    D.25450 = ctx->list;
    D.25464 = monoeg_g_slist_prepend (D.25450, vinfo);
    ctx->list = D.25464;
  }
  ctx->verifiable = 0;
  D.25461 = ctx->level;
  D.25465 = D.25461 & 16;
  if (D.25465 != 0) goto <D.25466>; else goto <D.25467>;
  <D.25466>:
  ctx->valid = 0;
  <D.25467>:
  <D.25458>:
  <D.25456>:
  ctx->eval.size = 0;
  ctx->target = target;
}


is_correct_leave (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.25468;
  long unsigned int D.25469;
  long unsigned int D.25470;
  unsigned int D.25473;
  unsigned int D.25476;
  unsigned int D.25479;
  unsigned int D.25480;
  int D.25484;
  unsigned int D.25487;
  <unnamed-unsigned:15> D.25492;
  int D.25493;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18222>;
  <D.18221>:
  D.25468 = header->clauses;
  D.25469 = (long unsigned int) i;
  D.25470 = D.25469 * 32;
  clause = D.25468 + D.25470;
  D.25473 = clause->flags;
  if (D.25473 == 2) goto <D.25474>; else goto <D.25475>;
  <D.25474>:
  D.25476 = clause->handler_offset;
  if (D.25476 <= offset) goto <D.25477>; else goto <D.25478>;
  <D.25477>:
  D.25476 = clause->handler_offset;
  D.25479 = clause->handler_len;
  D.25480 = D.25476 + D.25479;
  if (D.25480 > offset) goto <D.25481>; else goto <D.25482>;
  <D.25481>:
  D.25476 = clause->handler_offset;
  if (D.25476 > target) goto <D.25471>; else goto <D.25483>;
  <D.25483>:
  D.25476 = clause->handler_offset;
  D.25479 = clause->handler_len;
  D.25480 = D.25476 + D.25479;
  if (D.25480 <= target) goto <D.25471>; else goto <D.25472>;
  <D.25471>:
  D.25484 = 0;
  return D.25484;
  <D.25472>:
  <D.25482>:
  <D.25478>:
  <D.25475>:
  D.25473 = clause->flags;
  if (D.25473 == 1) goto <D.25485>; else goto <D.25486>;
  <D.25485>:
  D.25487 = clause->data.filter_offset;
  if (D.25487 <= offset) goto <D.25488>; else goto <D.25489>;
  <D.25488>:
  D.25476 = clause->handler_offset;
  if (D.25476 > offset) goto <D.25490>; else goto <D.25491>;
  <D.25490>:
  D.25484 = 0;
  return D.25484;
  <D.25491>:
  <D.25489>:
  <D.25486>:
  i = i + 1;
  <D.18222>:
  D.25492 = header->num_clauses;
  D.25493 = (int) D.25492;
  if (D.25493 > i) goto <D.18221>; else goto <D.18223>;
  <D.18223>:
  D.25484 = 1;
  return D.25484;
}


store_local (struct VerifyContext * ctx, guint32 arg)
{
  int D.25495;
  unsigned int D.25496;
  unsigned int D.25499;
  unsigned int D.25500;
  gchar * D.25501;
  struct GSList * D.25502;
  struct GSList * D.25503;
  int D.25504;
  struct MonoType * * D.25507;
  long unsigned int D.25508;
  long unsigned int D.25509;
  struct MonoType * * D.25510;
  struct MonoType * D.25511;
  unsigned char D.25512;
  unsigned char D.25513;
  int D.25516;
  int D.25521;
  int D.25523;
  int D.25524;
  gchar * D.25525;
  struct GSList * D.25526;
  int D.25527;
  int D.25530;
  gchar * D.25536;
  struct GSList * D.25537;
  struct ILStackDesc * value;

  D.25495 = ctx->num_locals;
  D.25496 = (unsigned int) D.25495;
  if (D.25496 <= arg) goto <D.25497>; else goto <D.25498>;
  <D.25497>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25499 = ctx->ip_offset;
    D.25500 = arg + 1;
    D.25501 = monoeg_g_strdup_printf ("Method doesn\'t have local var %d at 0x%04x", D.25500, D.25499);
    vinfo->info.message = D.25501;
    vinfo->exception_type = 3;
    D.25502 = ctx->list;
    D.25503 = monoeg_g_slist_prepend (D.25502, vinfo);
    ctx->list = D.25503;
  }
  ctx->valid = 0;
  return;
  <D.25498>:
  D.25504 = check_underflow (ctx, 1);
  if (D.25504 == 0) goto <D.25505>; else goto <D.25506>;
  <D.25505>:
  return;
  <D.25506>:
  value = stack_pop (ctx);
  D.25507 = ctx->locals;
  D.25508 = (long unsigned int) arg;
  D.25509 = D.25508 * 8;
  D.25510 = D.25507 + D.25509;
  D.25511 = *D.25510;
  D.25512 = BIT_FIELD_REF <*D.25511, 8, 88>;
  D.25513 = D.25512 & 64;
  if (D.25513 != 0) goto <D.25514>; else goto <D.25515>;
  <D.25514>:
  D.25516 = stack_slot_is_managed_mutability_pointer (value);
  if (D.25516 != 0) goto <D.25517>; else goto <D.25518>;
  <D.25517>:
  D.25521 = ctx->verifiable;
  if (D.25521 != 0) goto <D.25519>; else goto <D.25522>;
  <D.25522>:
  D.25523 = ctx->level;
  D.25524 = D.25523 & 128;
  if (D.25524 != 0) goto <D.25519>; else goto <D.25520>;
  <D.25519>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25499 = ctx->ip_offset;
    D.25525 = monoeg_g_strdup_printf ("Cannot use a readonly managed reference when storing on a local variable at 0x%04x", D.25499);
    vinfo->info.message = D.25525;
    vinfo->exception_type = 4;
    D.25502 = ctx->list;
    D.25526 = monoeg_g_slist_prepend (D.25502, vinfo);
    ctx->list = D.25526;
  }
  ctx->verifiable = 0;
  D.25523 = ctx->level;
  D.25527 = D.25523 & 16;
  if (D.25527 != 0) goto <D.25528>; else goto <D.25529>;
  <D.25528>:
  ctx->valid = 0;
  <D.25529>:
  <D.25520>:
  <D.25518>:
  <D.25515>:
  D.25507 = ctx->locals;
  D.25508 = (long unsigned int) arg;
  D.25509 = D.25508 * 8;
  D.25510 = D.25507 + D.25509;
  D.25511 = *D.25510;
  D.25530 = verify_stack_type_compatibility (ctx, D.25511, value);
  if (D.25530 == 0) goto <D.25531>; else goto <D.25532>;
  <D.25531>:
  {
    char * expected;
    char * found;

    D.25507 = ctx->locals;
    D.25508 = (long unsigned int) arg;
    D.25509 = D.25508 * 8;
    D.25510 = D.25507 + D.25509;
    D.25511 = *D.25510;
    expected = mono_type_full_name (D.25511);
    found = stack_slot_full_name (value);
    D.25521 = ctx->verifiable;
    if (D.25521 != 0) goto <D.25533>; else goto <D.25535>;
    <D.25535>:
    D.25523 = ctx->level;
    D.25524 = D.25523 & 128;
    if (D.25524 != 0) goto <D.25533>; else goto <D.25534>;
    <D.25533>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25499 = ctx->ip_offset;
      D.25536 = 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.25499);
      vinfo->info.message = D.25536;
      vinfo->exception_type = 4;
      D.25502 = ctx->list;
      D.25537 = monoeg_g_slist_prepend (D.25502, vinfo);
      ctx->list = D.25537;
    }
    ctx->verifiable = 0;
    D.25523 = ctx->level;
    D.25527 = D.25523 & 16;
    if (D.25527 != 0) goto <D.25538>; else goto <D.25539>;
    <D.25538>:
    ctx->valid = 0;
    <D.25539>:
    <D.25534>:
    monoeg_g_free (expected);
    monoeg_g_free (found);
  }
  <D.25532>:
}


do_cmp_op (struct VerifyContext * ctx, const unsigned char[6] * table, guint32 opcode)
{
  int D.25541;
  int D.25546;
  int D.25549;
  struct MonoClass * D.25552;
  struct MonoType * D.25553;
  int D.25554;
  int D.25557;
  int D.25563;
  int D.25565;
  long unsigned int D.25566;
  long unsigned int D.25567;
  const unsigned char[6] * D.25568;
  int D.25573;
  int D.25575;
  int D.25576;
  unsigned int D.25577;
  const char * D.25578;
  const char * D.25579;
  gchar * D.25580;
  struct GSList * D.25581;
  struct GSList * D.25582;
  int D.25583;
  signed char res.102;
  const char * D.25593;
  const char * D.25594;
  gchar * D.25595;
  struct GSList * D.25596;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  int idxa;
  int idxb;
  unsigned char res;

  D.25541 = check_underflow (ctx, 2);
  if (D.25541 == 0) goto <D.25542>; else goto <D.25543>;
  <D.25542>:
  return;
  <D.25543>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  if (opcode == 3) goto <D.25544>; else goto <D.25545>;
  <D.25544>:
  D.25546 = stack_slot_get_type (a);
  if (D.25546 == 6) goto <D.25547>; else goto <D.25548>;
  <D.25547>:
  D.25549 = stack_slot_get_type (b);
  if (D.25549 == 6) goto <D.25550>; else goto <D.25551>;
  <D.25550>:
  D.25552 = mono_defaults.int32_class;
  D.25553 = &D.25552->byval_arg;
  stack_push_val (ctx, 1, D.25553);
  return;
  <D.25551>:
  <D.25548>:
  <D.25545>:
  idxa = stack_slot_get_underlying_type (a);
  D.25554 = stack_slot_is_managed_pointer (a);
  if (D.25554 != 0) goto <D.25555>; else goto <D.25556>;
  <D.25555>:
  idxa = 5;
  <D.25556>:
  idxb = stack_slot_get_underlying_type (b);
  D.25557 = stack_slot_is_managed_pointer (b);
  if (D.25557 != 0) goto <D.25558>; else goto <D.25559>;
  <D.25558>:
  idxb = 5;
  <D.25559>:
  D.25563 = stack_slot_is_complex_type_not_reference_type (a);
  if (D.25563 != 0) goto <D.25560>; else goto <D.25564>;
  <D.25564>:
  D.25565 = stack_slot_is_complex_type_not_reference_type (b);
  if (D.25565 != 0) goto <D.25560>; else goto <D.25561>;
  <D.25560>:
  res = 0;
  goto <D.25562>;
  <D.25561>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  D.25566 = (long unsigned int) idxa;
  D.25567 = D.25566 * 6;
  D.25568 = table + D.25567;
  res = *D.25568[idxb];
  <D.25562>:
  if (res == 0) goto <D.25569>; else goto <D.25570>;
  <D.25569>:
  D.25573 = ctx->verifiable;
  if (D.25573 != 0) goto <D.25571>; else goto <D.25574>;
  <D.25574>:
  D.25575 = ctx->level;
  D.25576 = D.25575 & 128;
  if (D.25576 != 0) goto <D.25571>; else goto <D.25572>;
  <D.25571>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25577 = ctx->ip_offset;
    D.25578 = stack_slot_get_name (b);
    D.25579 = stack_slot_get_name (a);
    D.25580 = monoeg_g_strdup_printf ("Compare instruction applyed to ill formed stack (%s x %s) at 0x%04x", D.25579, D.25578, D.25577);
    vinfo->info.message = D.25580;
    vinfo->exception_type = 4;
    D.25581 = ctx->list;
    D.25582 = monoeg_g_slist_prepend (D.25581, vinfo);
    ctx->list = D.25582;
  }
  ctx->verifiable = 0;
  D.25575 = ctx->level;
  D.25583 = D.25575 & 16;
  if (D.25583 != 0) goto <D.25584>; else goto <D.25585>;
  <D.25584>:
  ctx->valid = 0;
  <D.25585>:
  <D.25572>:
  goto <D.25586>;
  <D.25570>:
  res.102 = (signed char) res;
  if (res.102 < 0) goto <D.25588>; else goto <D.25589>;
  <D.25588>:
  D.25573 = ctx->verifiable;
  if (D.25573 != 0) goto <D.25590>; else goto <D.25592>;
  <D.25592>:
  D.25575 = ctx->level;
  D.25576 = D.25575 & 128;
  if (D.25576 != 0) goto <D.25590>; else goto <D.25591>;
  <D.25590>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25577 = ctx->ip_offset;
    D.25593 = stack_slot_get_name (b);
    D.25594 = stack_slot_get_name (a);
    D.25595 = monoeg_g_strdup_printf ("Compare instruction is not verifiable (%s x %s) at 0x%04x", D.25594, D.25593, D.25577);
    vinfo->info.message = D.25595;
    vinfo->exception_type = 4;
    D.25581 = ctx->list;
    D.25596 = monoeg_g_slist_prepend (D.25581, vinfo);
    ctx->list = D.25596;
  }
  ctx->verifiable = 0;
  D.25575 = ctx->level;
  D.25583 = D.25575 & 16;
  if (D.25583 != 0) goto <D.25597>; else goto <D.25598>;
  <D.25597>:
  ctx->valid = 0;
  <D.25598>:
  <D.25591>:
  res = res & 127;
  <D.25589>:
  <D.25586>:
  D.25552 = mono_defaults.int32_class;
  D.25553 = &D.25552->byval_arg;
  stack_push_val (ctx, 1, D.25553);
}


store_arg (struct VerifyContext * ctx, guint32 arg)
{
  int D.25600;
  unsigned int D.25601;
  int D.25606;
  int D.25608;
  int D.25609;
  unsigned int D.25610;
  unsigned int D.25611;
  gchar * D.25612;
  struct GSList * D.25613;
  struct GSList * D.25614;
  int D.25615;
  int D.25618;
  int D.25621;
  struct MonoType * * D.25624;
  long unsigned int D.25625;
  long unsigned int D.25626;
  struct MonoType * * D.25627;
  struct MonoType * D.25628;
  int D.25629;
  const char * D.25635;
  gchar * D.25636;
  struct GSList * D.25637;
  struct MonoMethod * D.25642;
  short unsigned int D.25643;
  int D.25644;
  int D.25645;
  struct ILStackDesc * value;

  D.25600 = ctx->max_args;
  D.25601 = (unsigned int) D.25600;
  if (D.25601 <= arg) goto <D.25602>; else goto <D.25603>;
  <D.25602>:
  D.25606 = ctx->verifiable;
  if (D.25606 != 0) goto <D.25604>; else goto <D.25607>;
  <D.25607>:
  D.25608 = ctx->level;
  D.25609 = D.25608 & 128;
  if (D.25609 != 0) goto <D.25604>; else goto <D.25605>;
  <D.25604>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25610 = ctx->ip_offset;
    D.25611 = arg + 1;
    D.25612 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d at 0x%04x", D.25611, D.25610);
    vinfo->info.message = D.25612;
    vinfo->exception_type = 4;
    D.25613 = ctx->list;
    D.25614 = monoeg_g_slist_prepend (D.25613, vinfo);
    ctx->list = D.25614;
  }
  ctx->verifiable = 0;
  D.25608 = ctx->level;
  D.25615 = D.25608 & 16;
  if (D.25615 != 0) goto <D.25616>; else goto <D.25617>;
  <D.25616>:
  ctx->valid = 0;
  <D.25617>:
  <D.25605>:
  D.25618 = check_underflow (ctx, 1);
  if (D.25618 != 0) goto <D.25619>; else goto <D.25620>;
  <D.25619>:
  stack_pop (ctx);
  <D.25620>:
  return;
  <D.25603>:
  D.25621 = check_underflow (ctx, 1);
  if (D.25621 != 0) goto <D.25622>; else goto <D.25623>;
  <D.25622>:
  value = stack_pop (ctx);
  D.25624 = ctx->params;
  D.25625 = (long unsigned int) arg;
  D.25626 = D.25625 * 8;
  D.25627 = D.25624 + D.25626;
  D.25628 = *D.25627;
  D.25629 = verify_stack_type_compatibility (ctx, D.25628, value);
  if (D.25629 == 0) goto <D.25630>; else goto <D.25631>;
  <D.25630>:
  D.25606 = ctx->verifiable;
  if (D.25606 != 0) goto <D.25632>; else goto <D.25634>;
  <D.25634>:
  D.25608 = ctx->level;
  D.25609 = D.25608 & 128;
  if (D.25609 != 0) goto <D.25632>; else goto <D.25633>;
  <D.25632>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25610 = ctx->ip_offset;
    D.25635 = stack_slot_get_name (value);
    D.25636 = monoeg_g_strdup_printf ("Incompatible type %s in argument store at 0x%04x", D.25635, D.25610);
    vinfo->info.message = D.25636;
    vinfo->exception_type = 4;
    D.25613 = ctx->list;
    D.25637 = monoeg_g_slist_prepend (D.25613, vinfo);
    ctx->list = D.25637;
  }
  ctx->verifiable = 0;
  D.25608 = ctx->level;
  D.25615 = D.25608 & 16;
  if (D.25615 != 0) goto <D.25638>; else goto <D.25639>;
  <D.25638>:
  ctx->valid = 0;
  <D.25639>:
  <D.25633>:
  <D.25631>:
  <D.25623>:
  if (arg == 0) goto <D.25640>; else goto <D.25641>;
  <D.25640>:
  D.25642 = ctx->method;
  D.25643 = D.25642->flags;
  D.25644 = (int) D.25643;
  D.25645 = D.25644 & 16;
  if (D.25645 == 0) goto <D.25646>; else goto <D.25647>;
  <D.25646>:
  ctx->has_this_store = 1;
  <D.25647>:
  <D.25641>:
}


check_overflow (struct VerifyContext * ctx)
{
  short unsigned int D.25649;
  int D.25650;
  int D.25651;
  unsigned int D.25654;
  int D.25655;
  gchar * D.25656;
  struct GSList * D.25657;
  struct GSList * D.25658;
  int D.25659;

  D.25649 = ctx->eval.size;
  D.25650 = (int) D.25649;
  D.25651 = ctx->max_stack;
  if (D.25650 >= D.25651) goto <D.25652>; else goto <D.25653>;
  <D.25652>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25654 = ctx->ip_offset;
    D.25649 = ctx->eval.size;
    D.25650 = (int) D.25649;
    D.25655 = D.25650 + 1;
    D.25656 = monoeg_g_strdup_printf ("Method doesn\'t have stack-depth %d at 0x%04x", D.25655, D.25654);
    vinfo->info.message = D.25656;
    vinfo->exception_type = 3;
    D.25657 = ctx->list;
    D.25658 = monoeg_g_slist_prepend (D.25657, vinfo);
    ctx->list = D.25658;
  }
  ctx->valid = 0;
  D.25659 = 0;
  return D.25659;
  <D.25653>:
  D.25659 = 1;
  return D.25659;
}


stack_push (struct VerifyContext * ctx)
{
  short unsigned int D.25661;
  int D.25662;
  int D.25663;
  _Bool D.25664;
  long int D.25665;
  long int D.25666;
  short unsigned int D.25669;
  _Bool D.25670;
  long int D.25671;
  long int D.25672;
  int D.25675;
  struct ILCodeDesc * D.25676;
  struct ILStackDesc * D.25677;
  struct ILStackDesc * D.25678;
  short unsigned int D.25679;
  short unsigned int D.25680;
  long unsigned int D.25681;
  long unsigned int D.25682;

  D.25661 = ctx->eval.size;
  D.25662 = (int) D.25661;
  D.25663 = ctx->max_stack;
  D.25664 = D.25662 >= D.25663;
  D.25665 = (long int) D.25664;
  D.25666 = __builtin_expect (D.25665, 0);
  if (D.25666 != 0) goto <D.25667>; else goto <D.25668>;
  <D.25667>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1589, "ctx->eval.size < ctx->max_stack");
  <D.25668>:
  D.25661 = ctx->eval.size;
  D.25669 = ctx->eval.max_size;
  D.25670 = D.25661 > D.25669;
  D.25671 = (long int) D.25670;
  D.25672 = __builtin_expect (D.25671, 0);
  if (D.25672 != 0) goto <D.25673>; else goto <D.25674>;
  <D.25673>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1590, "ctx->eval.size <= ctx->eval.max_size");
  <D.25674>:
  D.25661 = ctx->eval.size;
  D.25662 = (int) D.25661;
  D.25675 = D.25662 + 1;
  D.25676 = &ctx->eval;
  ensure_stack_size (D.25676, D.25675);
  D.25678 = ctx->eval.stack;
  D.25661 = ctx->eval.size;
  D.25679 = D.25661;
  D.25680 = D.25679 + 1;
  ctx->eval.size = D.25680;
  D.25681 = (long unsigned int) D.25679;
  D.25682 = D.25681 * 24;
  D.25677 = D.25678 + D.25682;
  return D.25677;
}


set_stack_value (struct VerifyContext * ctx, struct ILStackDesc * stack, struct MonoType * type, int take_addr)
{
  unsigned char D.25684;
  unsigned char D.25687;
  unsigned char D.25688;
  int D.25690;
  int D.25691;
  int D.25692;
  int D.25693;
  int D.25694;
  int D.25695;
  int D.25696;
  unsigned int D.25701;
  int D.25702;
  gchar * D.25703;
  struct GSList * D.25704;
  struct GSList * D.25705;
  gboolean D.25706;
  gchar * D.25707;
  struct GSList * D.25708;
  int mask;
  int type_kind;
  void handle_enum = <<< error >>>;

  mask = 0;
  D.25684 = type->type;
  type_kind = (int) D.25684;
  D.25687 = BIT_FIELD_REF <*type, 8, 88>;
  D.25688 = D.25687 & 64;
  if (D.25688 != 0) goto <D.25685>; else goto <D.25689>;
  <D.25689>:
  if (take_addr != 0) goto <D.25685>; else goto <D.25686>;
  <D.25685>:
  mask = 256;
  <D.25686>:
  handle_enum:
  stack->type = type;
  switch (type_kind) <default: <D.18449>, case 2: <D.18422>, case 3: <D.18425>, case 4: <D.18420>, case 5: <D.18421>, case 6: <D.18423>, case 7: <D.18424>, case 8: <D.18426>, case 9: <D.18427>, case 10: <D.18441>, case 11: <D.18442>, case 12: <D.18443>, case 13: <D.18444>, case 14: <D.18435>, case 15: <D.18432>, case 17: <D.18446>, case 18: <D.18434>, case 19: <D.18439>, case 20: <D.18438>, case 21: <D.18445>, case 22: <D.18433>, case 24: <D.18429>, case 25: <D.18430>, case 27: <D.18431>, case 28: <D.18436>, case 29: <D.18437>, case 30: <D.18440>>
  <D.18420>:
  <D.18421>:
  <D.18422>:
  <D.18423>:
  <D.18424>:
  <D.18425>:
  <D.18426>:
  <D.18427>:
  D.25690 = mask | 1;
  stack->stype = D.25690;
  goto <D.18428>;
  <D.18429>:
  <D.18430>:
  D.25691 = mask | 3;
  stack->stype = D.25691;
  goto <D.18428>;
  <D.18431>:
  <D.18432>:
  <D.18433>:
  D.25692 = mask | 5;
  stack->stype = D.25692;
  goto <D.18428>;
  <D.18434>:
  <D.18435>:
  <D.18436>:
  <D.18437>:
  <D.18438>:
  <D.18439>:
  <D.18440>:
  D.25693 = mask | 6;
  stack->stype = D.25693;
  goto <D.18428>;
  <D.18441>:
  <D.18442>:
  D.25694 = mask | 2;
  stack->stype = D.25694;
  goto <D.18428>;
  <D.18443>:
  <D.18444>:
  D.25695 = mask | 4;
  stack->stype = D.25695;
  goto <D.18428>;
  <D.18445>:
  <D.18446>:
  D.25696 = mono_type_is_enum_type (type);
  if (D.25696 != 0) goto <D.25697>; else goto <D.25698>;
  <D.25697>:
  {
    struct MonoType * utype;

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

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.25701 = ctx->ip_offset;
      D.25684 = type->type;
      D.25702 = (int) D.25684;
      D.25703 = monoeg_g_strdup_printf ("Could not resolve underlying type of %x at %d", D.25702, D.25701);
      vinfo->info.message = D.25703;
      vinfo->exception_type = 3;
      D.25704 = ctx->list;
      D.25705 = monoeg_g_slist_prepend (D.25704, vinfo);
      ctx->list = D.25705;
    }
    ctx->valid = 0;
    D.25706 = 0;
    return D.25706;
    <D.25700>:
    type = utype;
    D.25684 = type->type;
    type_kind = (int) D.25684;
    goto handle_enum;
  }
  <D.25698>:
  D.25693 = mask | 6;
  stack->stype = D.25693;
  goto <D.18428>;
  <D.18449>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25701 = ctx->ip_offset;
    D.25684 = type->type;
    D.25702 = (int) D.25684;
    D.25707 = monoeg_g_strdup_printf ("Illegal value set on stack 0x%02x at %d", D.25702, D.25701);
    vinfo->info.message = D.25707;
    vinfo->exception_type = 3;
    D.25704 = ctx->list;
    D.25708 = monoeg_g_slist_prepend (D.25704, vinfo);
    ctx->list = D.25708;
  }
  ctx->valid = 0;
  D.25706 = 0;
  return D.25706;
  <D.18428>:
  D.25706 = 1;
  return D.25706;
}


do_load_function_ptr (struct VerifyContext * ctx, guint32 token, gboolean virtual)
{
  int D.25712;
  int D.25717;
  struct MonoMethod * D.25720;
  unsigned char D.25721;
  unsigned char D.25722;
  unsigned int D.25727;
  gchar * D.25728;
  struct GSList * D.25729;
  struct GSList * D.25730;
  unsigned int D.25735;
  _Bool D.25736;
  _Bool D.25737;
  _Bool D.25738;
  unsigned int D.25740;
  struct MonoImage * D.25741;
  int D.25742;
  gchar * D.25743;
  struct GSList * D.25744;
  const char * iftmp.103;
  int token.104;
  int D.25752;
  int D.25757;
  int D.25759;
  int D.25760;
  gchar * D.25761;
  struct GSList * D.25762;
  int D.25763;
  int D.25770;
  struct MonoType * D.25772;
  unsigned char D.25773;
  gchar * D.25777;
  struct GSList * D.25778;
  short unsigned int D.25781;
  int D.25782;
  int D.25783;
  gchar * D.25789;
  struct GSList * D.25790;
  struct MonoClass * D.25793;
  struct MonoType * D.25794;
  int D.25795;
  gchar * D.25801;
  struct GSList * D.25802;
  int D.25805;
  int D.25808;
  gchar * D.25814;
  struct GSList * D.25815;
  struct MonoType * D.25818;
  struct ILStackDesc * top;
  struct MonoMethod * method;

  if (virtual != 0) goto <D.25710>; else goto <D.25711>;
  <D.25710>:
  D.25712 = check_underflow (ctx, 1);
  if (D.25712 == 0) goto <D.25713>; else goto <D.25714>;
  <D.25713>:
  return;
  <D.25714>:
  <D.25711>:
  if (virtual == 0) goto <D.25715>; else goto <D.25716>;
  <D.25715>:
  D.25717 = check_overflow (ctx);
  if (D.25717 == 0) goto <D.25718>; else goto <D.25719>;
  <D.25718>:
  return;
  <D.25719>:
  <D.25716>:
  D.25720 = ctx->method;
  D.25721 = BIT_FIELD_REF <*D.25720, 8, 256>;
  D.25722 = D.25721 & 124;
  if (D.25722 != 0) goto <D.25723>; else goto <D.25724>;
  <D.25723>:
  D.25720 = ctx->method;
  method = mono_method_get_wrapper_data (D.25720, token);
  if (method == 0B) goto <D.25725>; else goto <D.25726>;
  <D.25725>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25727 = ctx->ip_offset;
    D.25728 = monoeg_g_strdup_printf ("Invalid token %x for ldftn  at 0x%04x", token, D.25727);
    vinfo->info.message = D.25728;
    vinfo->exception_type = 12;
    D.25729 = ctx->list;
    D.25730 = monoeg_g_slist_prepend (D.25729, vinfo);
    ctx->list = D.25730;
  }
  ctx->valid = 0;
  return;
  <D.25726>:
  goto <D.25731>;
  <D.25724>:
  D.25735 = token >> 24;
  D.25736 = D.25735 != 6;
  D.25737 = D.25735 != 10;
  D.25738 = D.25736 & D.25737;
  if (D.25738 != 0) goto <D.25739>; else goto <D.25732>;
  <D.25739>:
  D.25740 = token >> 24;
  if (D.25740 != 43) goto <D.25733>; else goto <D.25732>;
  <D.25732>:
  D.25741 = ctx->image;
  D.25742 = token_bounds_check (D.25741, token);
  if (D.25742 == 0) goto <D.25733>; else goto <D.25734>;
  <D.25733>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25727 = ctx->ip_offset;
    D.25743 = monoeg_g_strdup_printf ("Invalid token %x for ldftn  at 0x%04x", token, D.25727);
    vinfo->info.message = D.25743;
    vinfo->exception_type = 12;
    D.25729 = ctx->list;
    D.25744 = monoeg_g_slist_prepend (D.25729, vinfo);
    ctx->list = D.25744;
  }
  ctx->valid = 0;
  return;
  <D.25734>:
  if (virtual != 0) goto <D.25746>; else goto <D.25747>;
  <D.25746>:
  iftmp.103 = "ldvirtfrn";
  goto <D.25748>;
  <D.25747>:
  iftmp.103 = "ldftn";
  <D.25748>:
  token.104 = (int) token;
  method = verifier_load_method (ctx, token.104, iftmp.103);
  if (method == 0B) goto <D.25750>; else goto <D.25751>;
  <D.25750>:
  return;
  <D.25751>:
  <D.25731>:
  D.25752 = mono_method_is_constructor (method);
  if (D.25752 != 0) goto <D.25753>; else goto <D.25754>;
  <D.25753>:
  D.25757 = ctx->verifiable;
  if (D.25757 != 0) goto <D.25755>; else goto <D.25758>;
  <D.25758>:
  D.25759 = ctx->level;
  D.25760 = D.25759 & 128;
  if (D.25760 != 0) goto <D.25755>; else goto <D.25756>;
  <D.25755>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25727 = ctx->ip_offset;
    D.25761 = monoeg_g_strdup_printf ("Cannot use ldftn with a constructor at 0x%04x", D.25727);
    vinfo->info.message = D.25761;
    vinfo->exception_type = 4;
    D.25729 = ctx->list;
    D.25762 = monoeg_g_slist_prepend (D.25729, vinfo);
    ctx->list = D.25762;
  }
  ctx->verifiable = 0;
  D.25759 = ctx->level;
  D.25763 = D.25759 & 16;
  if (D.25763 != 0) goto <D.25764>; else goto <D.25765>;
  <D.25764>:
  ctx->valid = 0;
  <D.25765>:
  <D.25756>:
  <D.25754>:
  if (virtual != 0) goto <D.25766>; else goto <D.25767>;
  <D.25766>:
  {
    struct ILStackDesc * top;

    top = stack_pop (ctx);
    D.25770 = stack_slot_get_type (top);
    if (D.25770 != 6) goto <D.25768>; else goto <D.25771>;
    <D.25771>:
    D.25772 = top->type;
    D.25773 = D.25772->type;
    if (D.25773 == 17) goto <D.25768>; else goto <D.25769>;
    <D.25768>:
    D.25757 = ctx->verifiable;
    if (D.25757 != 0) goto <D.25774>; else goto <D.25776>;
    <D.25776>:
    D.25759 = ctx->level;
    D.25760 = D.25759 & 128;
    if (D.25760 != 0) goto <D.25774>; else goto <D.25775>;
    <D.25774>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25727 = ctx->ip_offset;
      D.25777 = monoeg_g_strdup_printf ("Invalid argument to ldvirtftn at 0x%04x", D.25727);
      vinfo->info.message = D.25777;
      vinfo->exception_type = 4;
      D.25729 = ctx->list;
      D.25778 = monoeg_g_slist_prepend (D.25729, vinfo);
      ctx->list = D.25778;
    }
    ctx->verifiable = 0;
    D.25759 = ctx->level;
    D.25763 = D.25759 & 16;
    if (D.25763 != 0) goto <D.25779>; else goto <D.25780>;
    <D.25779>:
    ctx->valid = 0;
    <D.25780>:
    <D.25775>:
    <D.25769>:
    D.25781 = method->flags;
    D.25782 = (int) D.25781;
    D.25783 = D.25782 & 16;
    if (D.25783 != 0) goto <D.25784>; else goto <D.25785>;
    <D.25784>:
    D.25757 = ctx->verifiable;
    if (D.25757 != 0) goto <D.25786>; else goto <D.25788>;
    <D.25788>:
    D.25759 = ctx->level;
    D.25760 = D.25759 & 128;
    if (D.25760 != 0) goto <D.25786>; else goto <D.25787>;
    <D.25786>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25727 = ctx->ip_offset;
      D.25789 = monoeg_g_strdup_printf ("Cannot use ldvirtftn with a constructor at 0x%04x", D.25727);
      vinfo->info.message = D.25789;
      vinfo->exception_type = 4;
      D.25729 = ctx->list;
      D.25790 = monoeg_g_slist_prepend (D.25729, vinfo);
      ctx->list = D.25790;
    }
    ctx->verifiable = 0;
    D.25759 = ctx->level;
    D.25763 = D.25759 & 16;
    if (D.25763 != 0) goto <D.25791>; else goto <D.25792>;
    <D.25791>:
    ctx->valid = 0;
    <D.25792>:
    <D.25787>:
    <D.25785>:
    D.25793 = method->klass;
    D.25794 = &D.25793->byval_arg;
    D.25795 = verify_stack_type_compatibility (ctx, D.25794, top);
    if (D.25795 == 0) goto <D.25796>; else goto <D.25797>;
    <D.25796>:
    D.25757 = ctx->verifiable;
    if (D.25757 != 0) goto <D.25798>; else goto <D.25800>;
    <D.25800>:
    D.25759 = ctx->level;
    D.25760 = D.25759 & 128;
    if (D.25760 != 0) goto <D.25798>; else goto <D.25799>;
    <D.25798>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25727 = ctx->ip_offset;
      D.25801 = monoeg_g_strdup_printf ("Unexpected object for ldvirtftn at 0x%04x", D.25727);
      vinfo->info.message = D.25801;
      vinfo->exception_type = 4;
      D.25729 = ctx->list;
      D.25802 = monoeg_g_slist_prepend (D.25729, vinfo);
      ctx->list = D.25802;
    }
    ctx->verifiable = 0;
    D.25759 = ctx->level;
    D.25763 = D.25759 & 16;
    if (D.25763 != 0) goto <D.25803>; else goto <D.25804>;
    <D.25803>:
    ctx->valid = 0;
    <D.25804>:
    <D.25799>:
    <D.25797>:
  }
  <D.25767>:
  D.25759 = ctx->level;
  D.25805 = D.25759 & 64;
  if (D.25805 == 0) goto <D.25806>; else goto <D.25807>;
  <D.25806>:
  D.25720 = ctx->method;
  D.25808 = mono_method_can_access_method_full (D.25720, method, 0B);
  if (D.25808 == 0) goto <D.25809>; else goto <D.25810>;
  <D.25809>:
  D.25757 = ctx->verifiable;
  if (D.25757 != 0) goto <D.25811>; else goto <D.25813>;
  <D.25813>:
  D.25759 = ctx->level;
  D.25760 = D.25759 & 128;
  if (D.25760 != 0) goto <D.25811>; else goto <D.25812>;
  <D.25811>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25727 = ctx->ip_offset;
    D.25814 = monoeg_g_strdup_printf ("Loaded method is not visible for ldftn/ldvirtftn at 0x%04x", D.25727);
    vinfo->info.message = D.25814;
    vinfo->exception_type = 9;
    D.25729 = ctx->list;
    D.25815 = monoeg_g_slist_prepend (D.25729, vinfo);
    ctx->list = D.25815;
  }
  ctx->verifiable = 0;
  D.25759 = ctx->level;
  D.25763 = D.25759 & 16;
  if (D.25763 != 0) goto <D.25816>; else goto <D.25817>;
  <D.25816>:
  ctx->valid = 0;
  <D.25817>:
  <D.25812>:
  <D.25810>:
  <D.25807>:
  D.25818 = mono_type_create_fnptr_from_mono_method (ctx, method);
  top = stack_push_val (ctx, 5, D.25818);
  top->method = method;
}


mono_type_create_fnptr_from_mono_method (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethodSignature * D.25820;
  struct GSList * D.25821;
  struct GSList * D.25822;
  struct MonoType * D.25823;
  struct MonoType * res;

  res = monoeg_malloc0 (16);
  D.25820 = mono_method_signature (method);
  res->data.method = D.25820;
  res->type = 27;
  D.25821 = ctx->funptrs;
  D.25822 = monoeg_g_slist_prepend (D.25821, res);
  ctx->funptrs = D.25822;
  D.25823 = res;
  return D.25823;
}


push_arg (struct VerifyContext * ctx, unsigned int arg, int take_addr)
{
  int D.25825;
  unsigned int D.25826;
  unsigned int D.25831;
  gchar * D.25832;
  struct GSList * D.25833;
  struct GSList * D.25834;
  int D.25838;
  int D.25840;
  int D.25841;
  gchar * D.25842;
  struct GSList * D.25843;
  int D.25844;
  int D.25847;
  struct MonoClass * D.25850;
  struct MonoType * D.25851;
  int D.25853;
  struct MonoType * * D.25856;
  long unsigned int D.25857;
  long unsigned int D.25858;
  struct MonoType * * D.25859;
  struct MonoType * D.25860;
  unsigned char D.25861;
  unsigned char D.25862;
  unsigned int D.25870;
  gchar * D.25871;
  struct GSList * D.25872;
  int D.25875;
  struct MonoMethod * D.25880;
  short unsigned int D.25881;
  int D.25882;
  int D.25883;
  int D.25889;
  int D.25890;
  int D.25891;
  int D.25894;
  struct MonoClass * D.25897;
  unsigned char D.25898;
  unsigned char D.25899;
  int D.25902;
  struct ILStackDesc * top;

  D.25825 = ctx->max_args;
  D.25826 = (unsigned int) D.25825;
  if (D.25826 <= arg) goto <D.25827>; else goto <D.25828>;
  <D.25827>:
  if (take_addr != 0) goto <D.25829>; else goto <D.25830>;
  <D.25829>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25831 = arg + 1;
    D.25832 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d", D.25831);
    vinfo->info.message = D.25832;
    vinfo->exception_type = 3;
    D.25833 = ctx->list;
    D.25834 = monoeg_g_slist_prepend (D.25833, vinfo);
    ctx->list = D.25834;
  }
  ctx->valid = 0;
  goto <D.25835>;
  <D.25830>:
  D.25838 = ctx->verifiable;
  if (D.25838 != 0) goto <D.25836>; else goto <D.25839>;
  <D.25839>:
  D.25840 = ctx->level;
  D.25841 = D.25840 & 128;
  if (D.25841 != 0) goto <D.25836>; else goto <D.25837>;
  <D.25836>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25831 = arg + 1;
    D.25842 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d", D.25831);
    vinfo->info.message = D.25842;
    vinfo->exception_type = 4;
    D.25833 = ctx->list;
    D.25843 = monoeg_g_slist_prepend (D.25833, vinfo);
    ctx->list = D.25843;
  }
  ctx->verifiable = 0;
  D.25840 = ctx->level;
  D.25844 = D.25840 & 16;
  if (D.25844 != 0) goto <D.25845>; else goto <D.25846>;
  <D.25845>:
  ctx->valid = 0;
  <D.25846>:
  <D.25837>:
  D.25847 = check_overflow (ctx);
  if (D.25847 != 0) goto <D.25848>; else goto <D.25849>;
  <D.25848>:
  D.25850 = mono_defaults.int32_class;
  D.25851 = &D.25850->byval_arg;
  stack_push_val (ctx, 1, D.25851);
  <D.25849>:
  <D.25835>:
  goto <D.25852>;
  <D.25828>:
  D.25853 = check_overflow (ctx);
  if (D.25853 != 0) goto <D.25854>; else goto <D.25855>;
  <D.25854>:
  D.25856 = ctx->params;
  D.25857 = (long unsigned int) arg;
  D.25858 = D.25857 * 8;
  D.25859 = D.25856 + D.25858;
  D.25860 = *D.25859;
  check_unverifiable_type (ctx, D.25860);
  D.25856 = ctx->params;
  D.25857 = (long unsigned int) arg;
  D.25858 = D.25857 * 8;
  D.25859 = D.25856 + D.25858;
  D.25860 = *D.25859;
  D.25861 = BIT_FIELD_REF <*D.25860, 8, 88>;
  D.25862 = D.25861 & 64;
  if (D.25862 != 0) goto <D.25863>; else goto <D.25864>;
  <D.25863>:
  if (take_addr != 0) goto <D.25865>; else goto <D.25866>;
  <D.25865>:
  D.25838 = ctx->verifiable;
  if (D.25838 != 0) goto <D.25867>; else goto <D.25869>;
  <D.25869>:
  D.25840 = ctx->level;
  D.25841 = D.25840 & 128;
  if (D.25841 != 0) goto <D.25867>; else goto <D.25868>;
  <D.25867>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25870 = ctx->ip_offset;
    D.25871 = monoeg_g_strdup_printf ("ByRef of ByRef at 0x%04x", D.25870);
    vinfo->info.message = D.25871;
    vinfo->exception_type = 4;
    D.25833 = ctx->list;
    D.25872 = monoeg_g_slist_prepend (D.25833, vinfo);
    ctx->list = D.25872;
  }
  ctx->verifiable = 0;
  D.25840 = ctx->level;
  D.25844 = D.25840 & 16;
  if (D.25844 != 0) goto <D.25873>; else goto <D.25874>;
  <D.25873>:
  ctx->valid = 0;
  <D.25874>:
  <D.25868>:
  <D.25866>:
  <D.25864>:
  top = stack_push (ctx);
  D.25856 = ctx->params;
  D.25857 = (long unsigned int) arg;
  D.25858 = D.25857 * 8;
  D.25859 = D.25856 + D.25858;
  D.25860 = *D.25859;
  D.25875 = set_stack_value (ctx, top, D.25860, take_addr);
  if (D.25875 == 0) goto <D.25876>; else goto <D.25877>;
  <D.25876>:
  return;
  <D.25877>:
  if (arg == 0) goto <D.25878>; else goto <D.25879>;
  <D.25878>:
  D.25880 = ctx->method;
  D.25881 = D.25880->flags;
  D.25882 = (int) D.25881;
  D.25883 = D.25882 & 16;
  if (D.25883 == 0) goto <D.25884>; else goto <D.25885>;
  <D.25884>:
  if (take_addr != 0) goto <D.25886>; else goto <D.25887>;
  <D.25886>:
  ctx->has_this_store = 1;
  goto <D.25888>;
  <D.25887>:
  D.25889 = top->stype;
  D.25890 = D.25889 | 2048;
  top->stype = D.25890;
  <D.25888>:
  D.25880 = ctx->method;
  D.25891 = mono_method_is_constructor (D.25880);
  if (D.25891 != 0) goto <D.25892>; else goto <D.25893>;
  <D.25892>:
  D.25894 = ctx->super_ctor_called;
  if (D.25894 == 0) goto <D.25895>; else goto <D.25896>;
  <D.25895>:
  D.25880 = ctx->method;
  D.25897 = D.25880->klass;
  D.25898 = BIT_FIELD_REF <*D.25897, 8, 256>;
  D.25899 = D.25898 & 8;
  if (D.25899 == 0) goto <D.25900>; else goto <D.25901>;
  <D.25900>:
  D.25889 = top->stype;
  D.25902 = D.25889 | 8192;
  top->stype = D.25902;
  <D.25901>:
  <D.25896>:
  <D.25893>:
  <D.25885>:
  <D.25879>:
  <D.25855>:
  <D.25852>:
}


check_unverifiable_type (struct VerifyContext * ctx, struct MonoType * type)
{
  unsigned char D.25904;
  _Bool D.25905;
  _Bool D.25906;
  _Bool D.25907;
  int D.25912;
  int D.25914;
  int D.25915;
  unsigned int D.25916;
  gchar * D.25917;
  struct GSList * D.25918;
  struct GSList * D.25919;
  int D.25920;
  gboolean D.25923;

  D.25904 = type->type;
  D.25905 = D.25904 == 15;
  D.25906 = D.25904 == 27;
  D.25907 = D.25905 | D.25906;
  if (D.25907 != 0) goto <D.25908>; else goto <D.25909>;
  <D.25908>:
  D.25912 = ctx->verifiable;
  if (D.25912 != 0) goto <D.25910>; else goto <D.25913>;
  <D.25913>:
  D.25914 = ctx->level;
  D.25915 = D.25914 & 128;
  if (D.25915 != 0) goto <D.25910>; else goto <D.25911>;
  <D.25910>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25916 = ctx->ip_offset;
    D.25917 = monoeg_g_strdup_printf ("Unmanaged pointer is not a verifiable type at 0x%04x", D.25916);
    vinfo->info.message = D.25917;
    vinfo->exception_type = 4;
    D.25918 = ctx->list;
    D.25919 = monoeg_g_slist_prepend (D.25918, vinfo);
    ctx->list = D.25919;
  }
  ctx->verifiable = 0;
  D.25914 = ctx->level;
  D.25920 = D.25914 & 16;
  if (D.25920 != 0) goto <D.25921>; else goto <D.25922>;
  <D.25921>:
  ctx->valid = 0;
  <D.25922>:
  <D.25911>:
  D.25923 = 0;
  return D.25923;
  <D.25909>:
  D.25923 = 1;
  return D.25923;
}


push_local (struct VerifyContext * ctx, guint32 arg, int take_addr)
{
  int D.25925;
  unsigned int D.25926;
  unsigned int D.25929;
  gchar * D.25930;
  struct GSList * D.25931;
  struct GSList * D.25932;
  int D.25934;
  struct MonoType * * D.25937;
  long unsigned int D.25938;
  long unsigned int D.25939;
  struct MonoType * * D.25940;
  struct MonoType * D.25941;
  unsigned char D.25942;
  unsigned char D.25943;
  int D.25950;
  int D.25952;
  int D.25953;
  unsigned int D.25954;
  gchar * D.25955;
  struct GSList * D.25956;
  int D.25957;
  struct ILStackDesc * D.25960;

  D.25925 = ctx->num_locals;
  D.25926 = (unsigned int) D.25925;
  if (D.25926 <= arg) goto <D.25927>; else goto <D.25928>;
  <D.25927>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25929 = arg + 1;
    D.25930 = monoeg_g_strdup_printf ("Method doesn\'t have local %d", D.25929);
    vinfo->info.message = D.25930;
    vinfo->exception_type = 3;
    D.25931 = ctx->list;
    D.25932 = monoeg_g_slist_prepend (D.25931, vinfo);
    ctx->list = D.25932;
  }
  ctx->valid = 0;
  goto <D.25933>;
  <D.25928>:
  D.25934 = check_overflow (ctx);
  if (D.25934 != 0) goto <D.25935>; else goto <D.25936>;
  <D.25935>:
  D.25937 = ctx->locals;
  D.25938 = (long unsigned int) arg;
  D.25939 = D.25938 * 8;
  D.25940 = D.25937 + D.25939;
  D.25941 = *D.25940;
  check_unverifiable_type (ctx, D.25941);
  D.25937 = ctx->locals;
  D.25938 = (long unsigned int) arg;
  D.25939 = D.25938 * 8;
  D.25940 = D.25937 + D.25939;
  D.25941 = *D.25940;
  D.25942 = BIT_FIELD_REF <*D.25941, 8, 88>;
  D.25943 = D.25942 & 64;
  if (D.25943 != 0) goto <D.25944>; else goto <D.25945>;
  <D.25944>:
  if (take_addr != 0) goto <D.25946>; else goto <D.25947>;
  <D.25946>:
  D.25950 = ctx->verifiable;
  if (D.25950 != 0) goto <D.25948>; else goto <D.25951>;
  <D.25951>:
  D.25952 = ctx->level;
  D.25953 = D.25952 & 128;
  if (D.25953 != 0) goto <D.25948>; else goto <D.25949>;
  <D.25948>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25954 = ctx->ip_offset;
    D.25955 = monoeg_g_strdup_printf ("ByRef of ByRef at 0x%04x", D.25954);
    vinfo->info.message = D.25955;
    vinfo->exception_type = 4;
    D.25931 = ctx->list;
    D.25956 = monoeg_g_slist_prepend (D.25931, vinfo);
    ctx->list = D.25956;
  }
  ctx->verifiable = 0;
  D.25952 = ctx->level;
  D.25957 = D.25952 & 16;
  if (D.25957 != 0) goto <D.25958>; else goto <D.25959>;
  <D.25958>:
  ctx->valid = 0;
  <D.25959>:
  <D.25949>:
  <D.25947>:
  <D.25945>:
  D.25937 = ctx->locals;
  D.25938 = (long unsigned int) arg;
  D.25939 = D.25938 * 8;
  D.25940 = D.25937 + D.25939;
  D.25941 = *D.25940;
  D.25960 = stack_push (ctx);
  set_stack_value (ctx, D.25960, D.25941, take_addr);
  <D.25936>:
  <D.25933>:
}


do_localloc (struct VerifyContext * ctx)
{
  short unsigned int D.25961;
  unsigned int D.25964;
  gchar * D.25965;
  struct GSList * D.25966;
  struct GSList * D.25967;
  struct MonoMethodHeader * D.25968;
  int D.25969;
  gchar * D.25972;
  struct GSList * D.25973;
  struct MonoClass * D.25974;
  struct MonoType * D.25975;
  struct ILStackDesc * D.25976;
  int D.25979;
  int D.25981;
  int D.25982;
  gchar * D.25983;
  struct GSList * D.25984;
  int D.25985;
  struct ILStackDesc * top;

  D.25961 = ctx->eval.size;
  if (D.25961 != 1) goto <D.25962>; else goto <D.25963>;
  <D.25962>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25964 = ctx->ip_offset;
    D.25965 = monoeg_g_strdup_printf ("Stack must have only size item in localloc at 0x%04x", D.25964);
    vinfo->info.message = D.25965;
    vinfo->exception_type = 3;
    D.25966 = ctx->list;
    D.25967 = monoeg_g_slist_prepend (D.25966, vinfo);
    ctx->list = D.25967;
  }
  ctx->valid = 0;
  return;
  <D.25963>:
  D.25964 = ctx->ip_offset;
  D.25968 = ctx->header;
  D.25969 = in_any_exception_block (D.25968, D.25964);
  if (D.25969 != 0) goto <D.25970>; else goto <D.25971>;
  <D.25970>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25964 = ctx->ip_offset;
    D.25972 = monoeg_g_strdup_printf ("Stack must have only size item in localloc at 0x%04x", D.25964);
    vinfo->info.message = D.25972;
    vinfo->exception_type = 3;
    D.25966 = ctx->list;
    D.25973 = monoeg_g_slist_prepend (D.25966, vinfo);
    ctx->list = D.25973;
  }
  ctx->valid = 0;
  return;
  <D.25971>:
  top = stack_pop (ctx);
  D.25974 = mono_defaults.int_class;
  D.25975 = &D.25974->byval_arg;
  D.25976 = stack_push (ctx);
  set_stack_value (ctx, D.25976, D.25975, 0);
  D.25979 = ctx->verifiable;
  if (D.25979 != 0) goto <D.25977>; else goto <D.25980>;
  <D.25980>:
  D.25981 = ctx->level;
  D.25982 = D.25981 & 128;
  if (D.25982 != 0) goto <D.25977>; else goto <D.25978>;
  <D.25977>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25964 = ctx->ip_offset;
    D.25983 = monoeg_g_strdup_printf ("Instruction localloc in never verifiable at 0x%04x", D.25964);
    vinfo->info.message = D.25983;
    vinfo->exception_type = 4;
    D.25966 = ctx->list;
    D.25984 = monoeg_g_slist_prepend (D.25966, vinfo);
    ctx->list = D.25984;
  }
  ctx->verifiable = 0;
  D.25981 = ctx->level;
  D.25985 = D.25981 & 16;
  if (D.25985 != 0) goto <D.25986>; else goto <D.25987>;
  <D.25986>:
  ctx->valid = 0;
  <D.25987>:
  <D.25978>:
}


in_any_exception_block (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.25989;
  long unsigned int D.25990;
  long unsigned int D.25991;
  unsigned int D.25992;
  unsigned int D.25995;
  unsigned int D.25996;
  gboolean D.25999;
  unsigned int D.26000;
  unsigned int D.26003;
  <unnamed-unsigned:15> D.26008;
  int D.26009;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18192>;
  <D.18191>:
  D.25989 = header->clauses;
  D.25990 = (long unsigned int) i;
  D.25991 = D.25990 * 32;
  clause = D.25989 + D.25991;
  D.25992 = clause->handler_offset;
  if (D.25992 <= offset) goto <D.25993>; else goto <D.25994>;
  <D.25993>:
  D.25992 = clause->handler_offset;
  D.25995 = clause->handler_len;
  D.25996 = D.25992 + D.25995;
  if (D.25996 > offset) goto <D.25997>; else goto <D.25998>;
  <D.25997>:
  D.25999 = 1;
  return D.25999;
  <D.25998>:
  <D.25994>:
  D.26000 = clause->flags;
  if (D.26000 == 1) goto <D.26001>; else goto <D.26002>;
  <D.26001>:
  D.26003 = clause->data.filter_offset;
  if (D.26003 <= offset) goto <D.26004>; else goto <D.26005>;
  <D.26004>:
  D.25992 = clause->handler_offset;
  if (D.25992 > offset) goto <D.26006>; else goto <D.26007>;
  <D.26006>:
  D.25999 = 1;
  return D.25999;
  <D.26007>:
  <D.26005>:
  <D.26002>:
  i = i + 1;
  <D.18192>:
  D.26008 = header->num_clauses;
  D.26009 = (int) D.26008;
  if (D.26009 > i) goto <D.18191>; else goto <D.18193>;
  <D.18193>:
  D.25999 = 0;
  return D.25999;
}


do_endfilter (struct VerifyContext * ctx)
{
  int D.26011;
  int D.26012;
  short unsigned int D.26015;
  int D.26020;
  int D.26022;
  unsigned int D.26023;
  gchar * D.26024;
  struct GSList * D.26025;
  struct GSList * D.26026;
  int D.26027;
  struct ILStackDesc * D.26032;
  int D.26033;
  gchar * D.26039;
  struct GSList * D.26040;
  unsigned int D.26047;
  unsigned int D.26048;
  gchar * D.26051;
  struct GSList * D.26052;
  unsigned int D.26059;
  unsigned int D.26060;
  gchar * D.26061;
  struct GSList * D.26062;
  int D.26067;
  gchar * D.26069;
  struct GSList * D.26070;
  gchar * D.26074;
  struct GSList * D.26075;
  struct MonoExceptionClause * clause;

  D.26011 = ctx->level;
  D.26012 = D.26011 & 32;
  if (D.26012 == 0) goto <D.26013>; else goto <D.26014>;
  <D.26013>:
  D.26015 = ctx->eval.size;
  if (D.26015 != 1) goto <D.26016>; else goto <D.26017>;
  <D.26016>:
  D.26020 = ctx->verifiable;
  if (D.26020 != 0) goto <D.26018>; else goto <D.26021>;
  <D.26021>:
  D.26011 = ctx->level;
  D.26022 = D.26011 & 128;
  if (D.26022 != 0) goto <D.26018>; else goto <D.26019>;
  <D.26018>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26023 = ctx->ip_offset;
    D.26024 = monoeg_g_strdup_printf ("Stack size must have one item for endfilter at 0x%04x", D.26023);
    vinfo->info.message = D.26024;
    vinfo->exception_type = 4;
    D.26025 = ctx->list;
    D.26026 = monoeg_g_slist_prepend (D.26025, vinfo);
    ctx->list = D.26026;
  }
  ctx->verifiable = 0;
  D.26011 = ctx->level;
  D.26027 = D.26011 & 16;
  if (D.26027 != 0) goto <D.26028>; else goto <D.26029>;
  <D.26028>:
  ctx->valid = 0;
  <D.26029>:
  <D.26019>:
  <D.26017>:
  D.26015 = ctx->eval.size;
  if (D.26015 != 0) goto <D.26030>; else goto <D.26031>;
  <D.26030>:
  D.26032 = stack_pop (ctx);
  D.26033 = stack_slot_get_type (D.26032);
  if (D.26033 != 1) goto <D.26034>; else goto <D.26035>;
  <D.26034>:
  D.26020 = ctx->verifiable;
  if (D.26020 != 0) goto <D.26036>; else goto <D.26038>;
  <D.26038>:
  D.26011 = ctx->level;
  D.26022 = D.26011 & 128;
  if (D.26022 != 0) goto <D.26036>; else goto <D.26037>;
  <D.26036>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26023 = ctx->ip_offset;
    D.26039 = monoeg_g_strdup_printf ("Stack item type is not an int32 for endfilter at 0x%04x", D.26023);
    vinfo->info.message = D.26039;
    vinfo->exception_type = 4;
    D.26025 = ctx->list;
    D.26040 = monoeg_g_slist_prepend (D.26025, vinfo);
    ctx->list = D.26040;
  }
  ctx->verifiable = 0;
  D.26011 = ctx->level;
  D.26027 = D.26011 & 16;
  if (D.26027 != 0) goto <D.26041>; else goto <D.26042>;
  <D.26041>:
  ctx->valid = 0;
  <D.26042>:
  <D.26037>:
  <D.26035>:
  <D.26031>:
  <D.26014>:
  D.26023 = ctx->ip_offset;
  clause = is_correct_endfilter (ctx, D.26023);
  if (clause != 0B) goto <D.26043>; else goto <D.26044>;
  <D.26043>:
  D.26011 = ctx->level;
  D.26012 = D.26011 & 32;
  if (D.26012 == 0) goto <D.26045>; else goto <D.26046>;
  <D.26045>:
  D.26023 = ctx->ip_offset;
  D.26047 = clause->handler_offset;
  D.26048 = D.26047 + 4294967294;
  if (D.26023 != D.26048) goto <D.26049>; else goto <D.26050>;
  <D.26049>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26023 = ctx->ip_offset;
    D.26051 = monoeg_g_strdup_printf ("endfilter is not the last instruction of the filter clause at 0x%04x", D.26023);
    vinfo->info.message = D.26051;
    vinfo->exception_type = 3;
    D.26025 = ctx->list;
    D.26052 = monoeg_g_slist_prepend (D.26025, vinfo);
    ctx->list = D.26052;
  }
  ctx->valid = 0;
  <D.26050>:
  goto <D.26053>;
  <D.26046>:
  D.26023 = ctx->ip_offset;
  D.26047 = clause->handler_offset;
  D.26048 = D.26047 + 4294967294;
  if (D.26023 != D.26048) goto <D.26056>; else goto <D.26057>;
  <D.26056>:
  D.26047 = clause->handler_offset;
  D.26023 = ctx->ip_offset;
  if (D.26047 > D.26023) goto <D.26054>; else goto <D.26058>;
  <D.26058>:
  D.26023 = ctx->ip_offset;
  D.26047 = clause->handler_offset;
  D.26059 = clause->handler_len;
  D.26060 = D.26047 + D.26059;
  if (D.26023 >= D.26060) goto <D.26054>; else goto <D.26055>;
  <D.26054>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26023 = ctx->ip_offset;
    D.26061 = monoeg_g_strdup_printf ("endfilter is not the last instruction of the filter clause at 0x%04x", D.26023);
    vinfo->info.message = D.26061;
    vinfo->exception_type = 3;
    D.26025 = ctx->list;
    D.26062 = monoeg_g_slist_prepend (D.26025, vinfo);
    ctx->list = D.26062;
  }
  ctx->valid = 0;
  <D.26055>:
  <D.26057>:
  <D.26053>:
  goto <D.26063>;
  <D.26044>:
  D.26011 = ctx->level;
  D.26012 = D.26011 & 32;
  if (D.26012 == 0) goto <D.26066>; else goto <D.26064>;
  <D.26066>:
  D.26023 = ctx->ip_offset;
  D.26067 = is_unverifiable_endfilter (ctx, D.26023);
  if (D.26067 == 0) goto <D.26068>; else goto <D.26064>;
  <D.26068>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26023 = ctx->ip_offset;
    D.26069 = monoeg_g_strdup_printf ("endfilter outside filter clause at 0x%04x", D.26023);
    vinfo->info.message = D.26069;
    vinfo->exception_type = 3;
    D.26025 = ctx->list;
    D.26070 = monoeg_g_slist_prepend (D.26025, vinfo);
    ctx->list = D.26070;
  }
  ctx->valid = 0;
  goto <D.26065>;
  <D.26064>:
  D.26020 = ctx->verifiable;
  if (D.26020 != 0) goto <D.26071>; else goto <D.26073>;
  <D.26073>:
  D.26011 = ctx->level;
  D.26022 = D.26011 & 128;
  if (D.26022 != 0) goto <D.26071>; else goto <D.26072>;
  <D.26071>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26023 = ctx->ip_offset;
    D.26074 = monoeg_g_strdup_printf ("endfilter outside filter clause at 0x%04x", D.26023);
    vinfo->info.message = D.26074;
    vinfo->exception_type = 4;
    D.26025 = ctx->list;
    D.26075 = monoeg_g_slist_prepend (D.26025, vinfo);
    ctx->list = D.26075;
  }
  ctx->verifiable = 0;
  D.26011 = ctx->level;
  D.26027 = D.26011 & 16;
  if (D.26027 != 0) goto <D.26076>; else goto <D.26077>;
  <D.26076>:
  ctx->valid = 0;
  <D.26077>:
  <D.26072>:
  <D.26065>:
  <D.26063>:
  ctx->eval.size = 0;
}


is_correct_endfilter (struct VerifyContext * ctx, guint offset)
{
  struct MonoMethodHeader * D.26078;
  struct MonoExceptionClause * D.26079;
  long unsigned int D.26080;
  long unsigned int D.26081;
  unsigned int D.26082;
  unsigned int D.26087;
  unsigned int D.26090;
  struct MonoExceptionClause * D.26093;
  int D.26094;
  int D.26095;
  unsigned int D.26100;
  unsigned int D.26101;
  <unnamed-unsigned:15> D.26104;
  int D.26105;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18250>;
  <D.18249>:
  D.26078 = ctx->header;
  D.26079 = D.26078->clauses;
  D.26080 = (long unsigned int) i;
  D.26081 = D.26080 * 32;
  clause = D.26079 + D.26081;
  D.26082 = clause->flags;
  if (D.26082 != 1) goto <D.26083>; else goto <D.26084>;
  <D.26083>:
  // predicted unlikely by continue predictor.
  goto <D.18248>;
  <D.26084>:
  D.26082 = clause->flags;
  if (D.26082 == 1) goto <D.26085>; else goto <D.26086>;
  <D.26085>:
  D.26087 = clause->data.filter_offset;
  if (D.26087 <= offset) goto <D.26088>; else goto <D.26089>;
  <D.26088>:
  D.26090 = clause->handler_offset;
  if (D.26090 > offset) goto <D.26091>; else goto <D.26092>;
  <D.26091>:
  D.26093 = clause;
  return D.26093;
  <D.26092>:
  <D.26089>:
  <D.26086>:
  D.26094 = ctx->level;
  D.26095 = D.26094 & 32;
  if (D.26095 != 0) goto <D.26096>; else goto <D.26097>;
  <D.26096>:
  D.26090 = clause->handler_offset;
  if (D.26090 <= offset) goto <D.26098>; else goto <D.26099>;
  <D.26098>:
  D.26090 = clause->handler_offset;
  D.26100 = clause->handler_len;
  D.26101 = D.26090 + D.26100;
  if (D.26101 > offset) goto <D.26102>; else goto <D.26103>;
  <D.26102>:
  D.26093 = clause;
  return D.26093;
  <D.26103>:
  <D.26099>:
  <D.26097>:
  <D.18248>:
  i = i + 1;
  <D.18250>:
  D.26078 = ctx->header;
  D.26104 = D.26078->num_clauses;
  D.26105 = (int) D.26104;
  if (D.26105 > i) goto <D.18249>; else goto <D.18251>;
  <D.18251>:
  D.26093 = 0B;
  return D.26093;
}


is_unverifiable_endfilter (struct VerifyContext * ctx, guint offset)
{
  struct MonoMethodHeader * D.26107;
  struct MonoExceptionClause * D.26108;
  long unsigned int D.26109;
  long unsigned int D.26110;
  unsigned int D.26111;
  unsigned int D.26114;
  unsigned int D.26115;
  int D.26118;
  <unnamed-unsigned:15> D.26119;
  int D.26120;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18259>;
  <D.18258>:
  D.26107 = ctx->header;
  D.26108 = D.26107->clauses;
  D.26109 = (long unsigned int) i;
  D.26110 = D.26109 * 32;
  clause = D.26108 + D.26110;
  D.26111 = clause->try_offset;
  if (D.26111 <= offset) goto <D.26112>; else goto <D.26113>;
  <D.26112>:
  D.26111 = clause->try_offset;
  D.26114 = clause->try_len;
  D.26115 = D.26111 + D.26114;
  if (D.26115 > offset) goto <D.26116>; else goto <D.26117>;
  <D.26116>:
  D.26118 = 1;
  return D.26118;
  <D.26117>:
  <D.26113>:
  i = i + 1;
  <D.18259>:
  D.26107 = ctx->header;
  D.26119 = D.26107->num_clauses;
  D.26120 = (int) D.26119;
  if (D.26120 > i) goto <D.18258>; else goto <D.18260>;
  <D.18260>:
  D.26118 = 0;
  return D.26118;
}


do_initobj (struct VerifyContext * ctx, int token)
{
  int D.26124;
  int D.26127;
  int D.26132;
  int D.26134;
  int D.26135;
  unsigned int D.26136;
  gchar * D.26137;
  struct GSList * D.26138;
  struct GSList * D.26139;
  int D.26140;
  int D.26143;
  gchar * D.26149;
  struct GSList * D.26150;
  struct MonoType * D.26153;
  int D.26154;
  int D.26157;
  gchar * D.26163;
  struct GSList * D.26164;
  int D.26168;
  int D.26171;
  gchar * D.26177;
  struct GSList * D.26178;
  int D.26182;
  gchar * D.26188;
  struct GSList * D.26189;
  struct ILStackDesc * obj;
  struct MonoType * stack;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "initobj");
  if (type == 0B) goto <D.26122>; else goto <D.26123>;
  <D.26122>:
  return;
  <D.26123>:
  D.26124 = check_underflow (ctx, 1);
  if (D.26124 == 0) goto <D.26125>; else goto <D.26126>;
  <D.26125>:
  return;
  <D.26126>:
  obj = stack_pop (ctx);
  D.26127 = stack_slot_is_managed_pointer (obj);
  if (D.26127 == 0) goto <D.26128>; else goto <D.26129>;
  <D.26128>:
  D.26132 = ctx->verifiable;
  if (D.26132 != 0) goto <D.26130>; else goto <D.26133>;
  <D.26133>:
  D.26134 = ctx->level;
  D.26135 = D.26134 & 128;
  if (D.26135 != 0) goto <D.26130>; else goto <D.26131>;
  <D.26130>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26136 = ctx->ip_offset;
    D.26137 = monoeg_g_strdup_printf ("Invalid object address for initobj at 0x%04x", D.26136);
    vinfo->info.message = D.26137;
    vinfo->exception_type = 4;
    D.26138 = ctx->list;
    D.26139 = monoeg_g_slist_prepend (D.26138, vinfo);
    ctx->list = D.26139;
  }
  ctx->verifiable = 0;
  D.26134 = ctx->level;
  D.26140 = D.26134 & 16;
  if (D.26140 != 0) goto <D.26141>; else goto <D.26142>;
  <D.26141>:
  ctx->valid = 0;
  <D.26142>:
  <D.26131>:
  <D.26129>:
  D.26143 = stack_slot_is_managed_mutability_pointer (obj);
  if (D.26143 != 0) goto <D.26144>; else goto <D.26145>;
  <D.26144>:
  D.26132 = ctx->verifiable;
  if (D.26132 != 0) goto <D.26146>; else goto <D.26148>;
  <D.26148>:
  D.26134 = ctx->level;
  D.26135 = D.26134 & 128;
  if (D.26135 != 0) goto <D.26146>; else goto <D.26147>;
  <D.26146>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26136 = ctx->ip_offset;
    D.26149 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with initobj at 0x%04x", D.26136);
    vinfo->info.message = D.26149;
    vinfo->exception_type = 4;
    D.26138 = ctx->list;
    D.26150 = monoeg_g_slist_prepend (D.26138, vinfo);
    ctx->list = D.26150;
  }
  ctx->verifiable = 0;
  D.26134 = ctx->level;
  D.26140 = D.26134 & 16;
  if (D.26140 != 0) goto <D.26151>; else goto <D.26152>;
  <D.26151>:
  ctx->valid = 0;
  <D.26152>:
  <D.26147>:
  <D.26145>:
  D.26153 = obj->type;
  stack = mono_type_get_type_byval (D.26153);
  D.26154 = mono_type_is_reference (stack);
  if (D.26154 != 0) goto <D.26155>; else goto <D.26156>;
  <D.26155>:
  D.26157 = verify_type_compatibility (ctx, stack, type);
  if (D.26157 == 0) goto <D.26158>; else goto <D.26159>;
  <D.26158>:
  D.26132 = ctx->verifiable;
  if (D.26132 != 0) goto <D.26160>; else goto <D.26162>;
  <D.26162>:
  D.26134 = ctx->level;
  D.26135 = D.26134 & 128;
  if (D.26135 != 0) goto <D.26160>; else goto <D.26161>;
  <D.26160>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26136 = ctx->ip_offset;
    D.26163 = monoeg_g_strdup_printf ("Type token of initobj not compatible with value on stack at 0x%04x", D.26136);
    vinfo->info.message = D.26163;
    vinfo->exception_type = 4;
    D.26138 = ctx->list;
    D.26164 = monoeg_g_slist_prepend (D.26138, vinfo);
    ctx->list = D.26164;
  }
  ctx->verifiable = 0;
  D.26134 = ctx->level;
  D.26140 = D.26134 & 16;
  if (D.26140 != 0) goto <D.26165>; else goto <D.26166>;
  <D.26165>:
  ctx->valid = 0;
  <D.26166>:
  <D.26161>:
  goto <D.26167>;
  <D.26159>:
  D.26134 = ctx->level;
  D.26168 = D.26134 & 32;
  if (D.26168 == 0) goto <D.26169>; else goto <D.26170>;
  <D.26169>:
  D.26171 = mono_metadata_type_equal (type, stack);
  if (D.26171 == 0) goto <D.26172>; else goto <D.26173>;
  <D.26172>:
  D.26132 = ctx->verifiable;
  if (D.26132 != 0) goto <D.26174>; else goto <D.26176>;
  <D.26176>:
  D.26134 = ctx->level;
  D.26135 = D.26134 & 128;
  if (D.26135 != 0) goto <D.26174>; else goto <D.26175>;
  <D.26174>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26136 = ctx->ip_offset;
    D.26177 = monoeg_g_strdup_printf ("Type token of initobj not compatible with value on stack at 0x%04x", D.26136);
    vinfo->info.message = D.26177;
    vinfo->exception_type = 4;
    D.26138 = ctx->list;
    D.26178 = monoeg_g_slist_prepend (D.26138, vinfo);
    ctx->list = D.26178;
  }
  ctx->verifiable = 0;
  D.26134 = ctx->level;
  D.26140 = D.26134 & 16;
  if (D.26140 != 0) goto <D.26179>; else goto <D.26180>;
  <D.26179>:
  ctx->valid = 0;
  <D.26180>:
  <D.26175>:
  <D.26173>:
  <D.26170>:
  <D.26167>:
  goto <D.26181>;
  <D.26156>:
  D.26182 = verify_type_compatibility (ctx, stack, type);
  if (D.26182 == 0) goto <D.26183>; else goto <D.26184>;
  <D.26183>:
  {
    char * expected_name;
    char * stack_name;

    expected_name = mono_type_full_name (type);
    stack_name = mono_type_full_name (stack);
    D.26132 = ctx->verifiable;
    if (D.26132 != 0) goto <D.26185>; else goto <D.26187>;
    <D.26187>:
    D.26134 = ctx->level;
    D.26135 = D.26134 & 128;
    if (D.26135 != 0) goto <D.26185>; else goto <D.26186>;
    <D.26185>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.26136 = ctx->ip_offset;
      D.26188 = monoeg_g_strdup_printf ("Initobj %s not compatible with value on stack %s at 0x%04x", expected_name, stack_name, D.26136);
      vinfo->info.message = D.26188;
      vinfo->exception_type = 4;
      D.26138 = ctx->list;
      D.26189 = monoeg_g_slist_prepend (D.26138, vinfo);
      ctx->list = D.26189;
    }
    ctx->verifiable = 0;
    D.26134 = ctx->level;
    D.26140 = D.26134 & 16;
    if (D.26140 != 0) goto <D.26190>; else goto <D.26191>;
    <D.26190>:
    ctx->valid = 0;
    <D.26191>:
    <D.26186>:
    monoeg_g_free (expected_name);
    monoeg_g_free (stack_name);
  }
  <D.26184>:
  <D.26181>:
}


get_boxable_mono_type (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoType * D.26195;
  unsigned char D.26196;
  unsigned char D.26197;
  unsigned char D.26200;
  unsigned int D.26203;
  gchar * D.26204;
  struct GSList * D.26205;
  struct GSList * D.26206;
  gchar * D.26209;
  struct GSList * D.26210;
  int D.26215;
  int D.26217;
  int D.26218;
  gchar * D.26219;
  struct GSList * D.26220;
  int D.26221;
  gchar * D.26226;
  struct GSList * D.26227;
  struct MonoGenericContainer * D.26228;
  gchar * D.26236;
  struct GSList * D.26237;
  struct MonoType * type;
  struct MonoClass * class;

  type = verifier_load_type (ctx, token, opcode);
  if (type == 0B) goto <D.26193>; else goto <D.26194>;
  <D.26193>:
  D.26195 = 0B;
  return D.26195;
  <D.26194>:
  D.26196 = BIT_FIELD_REF <*type, 8, 88>;
  D.26197 = D.26196 & 64;
  if (D.26197 != 0) goto <D.26198>; else goto <D.26199>;
  <D.26198>:
  D.26200 = type->type;
  if (D.26200 != 22) goto <D.26201>; else goto <D.26202>;
  <D.26201>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26203 = ctx->ip_offset;
    D.26204 = monoeg_g_strdup_printf ("Invalid use of byref type for %s at 0x%04x", opcode, D.26203);
    vinfo->info.message = D.26204;
    vinfo->exception_type = 3;
    D.26205 = ctx->list;
    D.26206 = monoeg_g_slist_prepend (D.26205, vinfo);
    ctx->list = D.26206;
  }
  ctx->valid = 0;
  D.26195 = 0B;
  return D.26195;
  <D.26202>:
  <D.26199>:
  D.26200 = type->type;
  if (D.26200 == 1) goto <D.26207>; else goto <D.26208>;
  <D.26207>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26203 = ctx->ip_offset;
    D.26209 = monoeg_g_strdup_printf ("Invalid use of void type for %s at 0x%04x", opcode, D.26203);
    vinfo->info.message = D.26209;
    vinfo->exception_type = 3;
    D.26205 = ctx->list;
    D.26210 = monoeg_g_slist_prepend (D.26205, vinfo);
    ctx->list = D.26210;
  }
  ctx->valid = 0;
  D.26195 = 0B;
  return D.26195;
  <D.26208>:
  D.26200 = type->type;
  if (D.26200 == 22) goto <D.26211>; else goto <D.26212>;
  <D.26211>:
  D.26215 = ctx->verifiable;
  if (D.26215 != 0) goto <D.26213>; else goto <D.26216>;
  <D.26216>:
  D.26217 = ctx->level;
  D.26218 = D.26217 & 128;
  if (D.26218 != 0) goto <D.26213>; else goto <D.26214>;
  <D.26213>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26203 = ctx->ip_offset;
    D.26219 = monoeg_g_strdup_printf ("Invalid use of typedbyref for %s at 0x%04x", opcode, D.26203);
    vinfo->info.message = D.26219;
    vinfo->exception_type = 4;
    D.26205 = ctx->list;
    D.26220 = monoeg_g_slist_prepend (D.26205, vinfo);
    ctx->list = D.26220;
  }
  ctx->verifiable = 0;
  D.26217 = ctx->level;
  D.26221 = D.26217 & 16;
  if (D.26221 != 0) goto <D.26222>; else goto <D.26223>;
  <D.26222>:
  ctx->valid = 0;
  <D.26223>:
  <D.26214>:
  <D.26212>:
  class = mono_class_from_mono_type (type);
  if (class == 0B) goto <D.26224>; else goto <D.26225>;
  <D.26224>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26203 = ctx->ip_offset;
    D.26226 = monoeg_g_strdup_printf ("Could not retrieve type token for %s at 0x%04x", opcode, D.26203);
    vinfo->info.message = D.26226;
    vinfo->exception_type = 3;
    D.26205 = ctx->list;
    D.26227 = monoeg_g_slist_prepend (D.26205, vinfo);
    ctx->list = D.26227;
  }
  ctx->valid = 0;
  <D.26225>:
  D.26228 = class->generic_container;
  if (D.26228 != 0B) goto <D.26229>; else goto <D.26230>;
  <D.26229>:
  D.26200 = type->type;
  if (D.26200 != 21) goto <D.26231>; else goto <D.26232>;
  <D.26231>:
  D.26215 = ctx->verifiable;
  if (D.26215 != 0) goto <D.26233>; else goto <D.26235>;
  <D.26235>:
  D.26217 = ctx->level;
  D.26218 = D.26217 & 128;
  if (D.26218 != 0) goto <D.26233>; else goto <D.26234>;
  <D.26233>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26203 = ctx->ip_offset;
    D.26236 = monoeg_g_strdup_printf ("Cannot use the generic type definition in a boxable type position for %s at 0x%04x", opcode, D.26203);
    vinfo->info.message = D.26236;
    vinfo->exception_type = 4;
    D.26205 = ctx->list;
    D.26237 = monoeg_g_slist_prepend (D.26205, vinfo);
    ctx->list = D.26237;
  }
  ctx->verifiable = 0;
  D.26217 = ctx->level;
  D.26221 = D.26217 & 16;
  if (D.26221 != 0) goto <D.26238>; else goto <D.26239>;
  <D.26238>:
  ctx->valid = 0;
  <D.26239>:
  <D.26234>:
  <D.26232>:
  <D.26230>:
  check_unverifiable_type (ctx, type);
  D.26195 = type;
  return D.26195;
}


check_underflow (struct VerifyContext * ctx, int size)
{
  short unsigned int D.26241;
  int D.26242;
  unsigned int D.26245;
  gchar * D.26246;
  struct GSList * D.26247;
  struct GSList * D.26248;
  int D.26249;

  D.26241 = ctx->eval.size;
  D.26242 = (int) D.26241;
  if (D.26242 < size) goto <D.26243>; else goto <D.26244>;
  <D.26243>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26245 = ctx->ip_offset;
    D.26241 = ctx->eval.size;
    D.26242 = (int) D.26241;
    D.26246 = monoeg_g_strdup_printf ("Stack underflow, required %d, but have %d at 0x%04x", size, D.26242, D.26245);
    vinfo->info.message = D.26246;
    vinfo->exception_type = 3;
    D.26247 = ctx->list;
    D.26248 = monoeg_g_slist_prepend (D.26247, vinfo);
    ctx->list = D.26248;
  }
  ctx->valid = 0;
  D.26249 = 0;
  return D.26249;
  <D.26244>:
  D.26249 = 1;
  return D.26249;
}


is_correct_rethrow (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.26251;
  long unsigned int D.26252;
  long unsigned int D.26253;
  unsigned int D.26254;
  unsigned int D.26257;
  unsigned int D.26258;
  int D.26261;
  unsigned int D.26262;
  unsigned int D.26265;
  <unnamed-unsigned:15> D.26270;
  int D.26271;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18231>;
  <D.18230>:
  D.26251 = header->clauses;
  D.26252 = (long unsigned int) i;
  D.26253 = D.26252 * 32;
  clause = D.26251 + D.26253;
  D.26254 = clause->handler_offset;
  if (D.26254 <= offset) goto <D.26255>; else goto <D.26256>;
  <D.26255>:
  D.26254 = clause->handler_offset;
  D.26257 = clause->handler_len;
  D.26258 = D.26254 + D.26257;
  if (D.26258 > offset) goto <D.26259>; else goto <D.26260>;
  <D.26259>:
  D.26261 = 1;
  return D.26261;
  <D.26260>:
  <D.26256>:
  D.26262 = clause->flags;
  if (D.26262 == 1) goto <D.26263>; else goto <D.26264>;
  <D.26263>:
  D.26265 = clause->data.filter_offset;
  if (D.26265 <= offset) goto <D.26266>; else goto <D.26267>;
  <D.26266>:
  D.26254 = clause->handler_offset;
  if (D.26254 > offset) goto <D.26268>; else goto <D.26269>;
  <D.26268>:
  D.26261 = 1;
  return D.26261;
  <D.26269>:
  <D.26267>:
  <D.26264>:
  i = i + 1;
  <D.18231>:
  D.26270 = header->num_clauses;
  D.26271 = (int) D.26270;
  if (D.26271 > i) goto <D.18230>; else goto <D.18232>;
  <D.18232>:
  D.26261 = 0;
  return D.26261;
}


do_sizeof (struct VerifyContext * ctx, int token)
{
  unsigned char D.26275;
  unsigned char D.26276;
  unsigned char D.26279;
  unsigned int D.26282;
  gchar * D.26283;
  struct GSList * D.26284;
  struct GSList * D.26285;
  gchar * D.26288;
  struct GSList * D.26289;
  int D.26290;
  struct MonoClass * D.26293;
  struct MonoType * D.26294;
  struct ILStackDesc * D.26295;
  struct MonoType * type;

  type = verifier_load_type (ctx, token, "sizeof");
  if (type == 0B) goto <D.26273>; else goto <D.26274>;
  <D.26273>:
  return;
  <D.26274>:
  D.26275 = BIT_FIELD_REF <*type, 8, 88>;
  D.26276 = D.26275 & 64;
  if (D.26276 != 0) goto <D.26277>; else goto <D.26278>;
  <D.26277>:
  D.26279 = type->type;
  if (D.26279 != 22) goto <D.26280>; else goto <D.26281>;
  <D.26280>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26282 = ctx->ip_offset;
    D.26283 = monoeg_g_strdup_printf ("Invalid use of byref type at 0x%04x", D.26282);
    vinfo->info.message = D.26283;
    vinfo->exception_type = 3;
    D.26284 = ctx->list;
    D.26285 = monoeg_g_slist_prepend (D.26284, vinfo);
    ctx->list = D.26285;
  }
  ctx->valid = 0;
  return;
  <D.26281>:
  <D.26278>:
  D.26279 = type->type;
  if (D.26279 == 1) goto <D.26286>; else goto <D.26287>;
  <D.26286>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26282 = ctx->ip_offset;
    D.26288 = monoeg_g_strdup_printf ("Invalid use of void type at 0x%04x", D.26282);
    vinfo->info.message = D.26288;
    vinfo->exception_type = 3;
    D.26284 = ctx->list;
    D.26289 = monoeg_g_slist_prepend (D.26284, vinfo);
    ctx->list = D.26289;
  }
  ctx->valid = 0;
  return;
  <D.26287>:
  D.26290 = check_overflow (ctx);
  if (D.26290 != 0) goto <D.26291>; else goto <D.26292>;
  <D.26291>:
  D.26293 = mono_defaults.uint32_class;
  D.26294 = &D.26293->byval_arg;
  D.26295 = stack_push (ctx);
  set_stack_value (ctx, D.26295, D.26294, 0);
  <D.26292>:
}


do_refanytype (struct VerifyContext * ctx)
{
  int D.26297;
  int D.26302;
  struct MonoType * D.26304;
  unsigned char D.26305;
  unsigned int D.26306;
  const char * D.26307;
  gchar * D.26308;
  struct GSList * D.26309;
  struct GSList * D.26310;
  struct MonoClass * D.26311;
  struct MonoType * D.26312;
  struct ILStackDesc * D.26313;
  struct ILStackDesc * top;

  D.26297 = check_underflow (ctx, 1);
  if (D.26297 == 0) goto <D.26298>; else goto <D.26299>;
  <D.26298>:
  return;
  <D.26299>:
  top = stack_pop (ctx);
  D.26302 = top->stype;
  if (D.26302 != 5) goto <D.26300>; else goto <D.26303>;
  <D.26303>:
  D.26304 = top->type;
  D.26305 = D.26304->type;
  if (D.26305 != 22) goto <D.26300>; else goto <D.26301>;
  <D.26300>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26306 = ctx->ip_offset;
    D.26307 = stack_slot_get_name (top);
    D.26308 = monoeg_g_strdup_printf ("Expected a typedref as argument for refanytype, but found %s at 0x%04x", D.26307, D.26306);
    vinfo->info.message = D.26308;
    vinfo->exception_type = 3;
    D.26309 = ctx->list;
    D.26310 = monoeg_g_slist_prepend (D.26309, vinfo);
    ctx->list = D.26310;
  }
  ctx->valid = 0;
  <D.26301>:
  D.26311 = mono_defaults.typehandle_class;
  D.26312 = &D.26311->byval_arg;
  D.26313 = stack_push (ctx);
  set_stack_value (ctx, D.26313, D.26312, 0);
}


mono_method_is_constructor (struct MonoMethod * method)
{
  gboolean D.26315;
  int iftmp.105;
  short unsigned int D.26319;
  unsigned int D.26320;
  unsigned int D.26321;
  int D.17926;
  int iftmp.106;
  int D.17922;
  const char[6] * D.26326;
  unsigned char D.26327;
  int D.26328;
  unsigned char D.26329;
  int D.26330;
  _Bool D.26331;
  _Bool D.26332;
  _Bool D.26333;
  const unsigned char * D.26336;
  unsigned char D.26337;
  int D.26338;
  const unsigned char * D.26339;
  unsigned char D.26340;
  int D.26341;
  _Bool D.26342;
  _Bool D.26343;
  const unsigned char * D.26346;
  unsigned char D.26347;
  int D.26348;
  const unsigned char * D.26349;
  unsigned char D.26350;
  int D.26351;
  _Bool D.26352;
  _Bool D.26353;
  const unsigned char * D.26356;
  unsigned char D.26357;
  int D.26358;
  const unsigned char * D.26359;
  unsigned char D.26360;
  int D.26361;
  const char * D.26363;

  D.26319 = method->flags;
  D.26320 = (unsigned int) D.26319;
  D.26321 = D.26320 & 6160;
  if (D.26321 == 6144) goto <D.26322>; else goto <D.26317>;
  <D.26322>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = method->name;
      D.26326 = ".ctor";
      D.26327 = MEM[(const unsigned char *)D.26326];
      D.26328 = (int) D.26327;
      D.26329 = *__s2;
      D.26330 = (int) D.26329;
      __result = D.26328 - D.26330;
      {
        D.26331 = __s1_len != 0;
        D.26332 = __result == 0;
        D.26333 = D.26331 & D.26332;
        if (D.26333 != 0) goto <D.26334>; else goto <D.26335>;
        <D.26334>:
        D.26336 = &MEM[(void *)".ctor" + 1B];
        D.26337 = *D.26336;
        D.26338 = (int) D.26337;
        D.26339 = __s2 + 1;
        D.26340 = *D.26339;
        D.26341 = (int) D.26340;
        __result = D.26338 - D.26341;
        D.26342 = __s1_len > 1;
        D.26332 = __result == 0;
        D.26343 = D.26342 & D.26332;
        if (D.26343 != 0) goto <D.26344>; else goto <D.26345>;
        <D.26344>:
        D.26346 = &MEM[(void *)".ctor" + 2B];
        D.26347 = *D.26346;
        D.26348 = (int) D.26347;
        D.26349 = __s2 + 2;
        D.26350 = *D.26349;
        D.26351 = (int) D.26350;
        __result = D.26348 - D.26351;
        D.26352 = __s1_len > 2;
        D.26332 = __result == 0;
        D.26353 = D.26352 & D.26332;
        if (D.26353 != 0) goto <D.26354>; else goto <D.26355>;
        <D.26354>:
        D.26356 = &MEM[(void *)".ctor" + 3B];
        D.26357 = *D.26356;
        D.26358 = (int) D.26357;
        D.26359 = __s2 + 3;
        D.26360 = *D.26359;
        D.26361 = (int) D.26360;
        __result = D.26358 - D.26361;
        <D.26355>:
        <D.26345>:
        <D.26335>:
      }
      D.17922 = __result;
    }
    iftmp.106 = D.17922;
    goto <D.26362>;
    <D.26325>:
    D.26363 = method->name;
    iftmp.106 = __builtin_strcmp (".ctor", D.26363);
    <D.26362>:
    D.17926 = iftmp.106;
  }
  if (D.17926 == 0) goto <D.26364>; else goto <D.26317>;
  <D.26364>:
  iftmp.105 = 1;
  goto <D.26318>;
  <D.26317>:
  iftmp.105 = 0;
  <D.26318>:
  D.26315 = iftmp.105;
  return D.26315;
}


mono_verify_corlib ()
{
  char * D.26366;

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


mono_verifier_is_enabled_for_method (struct MonoMethod * method)
{
  gboolean D.26368;
  int iftmp.107;
  struct MonoClass * D.26372;
  int D.26373;
  unsigned char D.26375;
  unsigned char D.26376;
  _Bool D.26377;
  _Bool D.26378;
  _Bool D.26379;

  D.26372 = method->klass;
  D.26373 = mono_verifier_is_enabled_for_class (D.26372);
  if (D.26373 != 0) goto <D.26374>; else goto <D.26370>;
  <D.26374>:
  D.26375 = BIT_FIELD_REF <*method, 8, 256>;
  D.26376 = D.26375 & 124;
  D.26377 = D.26376 == 0;
  D.26378 = D.26376 == 68;
  D.26379 = D.26377 | D.26378;
  if (D.26379 != 0) goto <D.26380>; else goto <D.26370>;
  <D.26380>:
  iftmp.107 = 1;
  goto <D.26371>;
  <D.26370>:
  iftmp.107 = 0;
  <D.26371>:
  D.26368 = iftmp.107;
  return D.26368;
}


mono_verifier_is_enabled_for_class (struct MonoClass * klass)
{
  gboolean D.26382;
  int iftmp.108;
  int verify_all.109;
  <unnamed type> verifier_mode.110;
  struct MonoImage * D.26392;
  struct MonoAssembly * D.26393;
  unsigned char D.26395;
  struct MonoImage * D.26396;

  verify_all.109 = verify_all;
  if (verify_all.109 != 0) goto <D.26384>; else goto <D.26389>;
  <D.26389>:
  verifier_mode.110 = verifier_mode;
  if (verifier_mode.110 != 0) goto <D.26391>; else goto <D.26385>;
  <D.26391>:
  D.26392 = klass->image;
  D.26393 = D.26392->assembly;
  if (D.26393 == 0B) goto <D.26386>; else goto <D.26394>;
  <D.26394>:
  D.26392 = klass->image;
  D.26393 = D.26392->assembly;
  D.26395 = D.26393->in_gac;
  if (D.26395 == 0) goto <D.26386>; else goto <D.26385>;
  <D.26386>:
  D.26392 = klass->image;
  D.26396 = mono_defaults.corlib;
  if (D.26392 != D.26396) goto <D.26384>; else goto <D.26385>;
  <D.26384>:
  iftmp.108 = 1;
  goto <D.26387>;
  <D.26385>:
  iftmp.108 = 0;
  <D.26387>:
  D.26382 = iftmp.108;
  return D.26382;
}


mono_verifier_is_enabled_for_image (struct MonoImage * image)
{
  gboolean D.26398;
  int iftmp.111;
  int verify_all.112;
  <unnamed type> verifier_mode.113;

  verify_all.112 = verify_all;
  if (verify_all.112 != 0) goto <D.26400>; else goto <D.26404>;
  <D.26404>:
  verifier_mode.113 = verifier_mode;
  if (verifier_mode.113 != 0) goto <D.26400>; else goto <D.26401>;
  <D.26400>:
  iftmp.111 = 1;
  goto <D.26402>;
  <D.26401>:
  iftmp.111 = 0;
  <D.26402>:
  D.26398 = iftmp.111;
  return D.26398;
}


mono_verifier_is_method_full_trust (struct MonoMethod * method)
{
  gboolean D.26407;
  int iftmp.114;
  struct MonoClass * D.26411;
  int D.26412;
  unsigned char D.26414;
  unsigned char D.26415;

  D.26411 = method->klass;
  D.26412 = mono_verifier_is_class_full_trust (D.26411);
  if (D.26412 != 0) goto <D.26413>; else goto <D.26409>;
  <D.26413>:
  D.26414 = BIT_FIELD_REF <*method, 8, 264>;
  D.26415 = D.26414 & 2;
  if (D.26415 == 0) goto <D.26416>; else goto <D.26409>;
  <D.26416>:
  iftmp.114 = 1;
  goto <D.26410>;
  <D.26409>:
  iftmp.114 = 0;
  <D.26410>:
  D.26407 = iftmp.114;
  return D.26407;
}


mono_verifier_is_class_full_trust (struct MonoClass * klass)
{
  int iftmp.115;
  <unnamed type> D.26419;
  int iftmp.116;
  struct MonoImage * D.26425;
  struct MonoAssembly * D.26426;
  unsigned char D.26428;
  int verify_all.117;
  <unnamed type> verifier_mode.118;
  gboolean D.26437;
  int iftmp.119;
  struct MonoImage * D.26443;
  int iftmp.120;
  gboolean trusted_location;

  D.26419 = mono_security_get_mode ();
  if (D.26419 != 1) goto <D.26420>; else goto <D.26421>;
  <D.26420>:
  D.26425 = klass->image;
  D.26426 = D.26425->assembly;
  if (D.26426 != 0B) goto <D.26427>; else goto <D.26423>;
  <D.26427>:
  D.26425 = klass->image;
  D.26426 = D.26425->assembly;
  D.26428 = D.26426->in_gac;
  if (D.26428 != 0) goto <D.26429>; else goto <D.26423>;
  <D.26429>:
  iftmp.116 = 1;
  goto <D.26424>;
  <D.26423>:
  iftmp.116 = 0;
  <D.26424>:
  iftmp.115 = iftmp.116;
  goto <D.26430>;
  <D.26421>:
  D.26425 = klass->image;
  iftmp.115 = mono_security_core_clr_is_platform_image (D.26425);
  <D.26430>:
  trusted_location = iftmp.115;
  verify_all.117 = verify_all;
  if (verify_all.117 != 0) goto <D.26432>; else goto <D.26433>;
  <D.26432>:
  verifier_mode.118 = verifier_mode;
  if (verifier_mode.118 == 0) goto <D.26435>; else goto <D.26436>;
  <D.26435>:
  if (trusted_location != 0) goto <D.26439>; else goto <D.26442>;
  <D.26442>:
  D.26425 = klass->image;
  D.26443 = mono_defaults.corlib;
  if (D.26425 == D.26443) goto <D.26439>; else goto <D.26440>;
  <D.26439>:
  iftmp.119 = 1;
  goto <D.26441>;
  <D.26440>:
  iftmp.119 = 0;
  <D.26441>:
  D.26437 = iftmp.119;
  return D.26437;
  <D.26436>:
  <D.26433>:
  verifier_mode.118 = verifier_mode;
  if (verifier_mode.118 <= 1) goto <D.26445>; else goto <D.26448>;
  <D.26448>:
  if (trusted_location != 0) goto <D.26445>; else goto <D.26449>;
  <D.26449>:
  D.26425 = klass->image;
  D.26443 = mono_defaults.corlib;
  if (D.26425 == D.26443) goto <D.26445>; else goto <D.26446>;
  <D.26445>:
  iftmp.120 = 1;
  goto <D.26447>;
  <D.26446>:
  iftmp.120 = 0;
  <D.26447>:
  D.26437 = iftmp.120;
  return D.26437;
}


mono_method_verify_with_current_settings (struct MonoMethod * method, gboolean skip_visibility, gboolean is_fulltrust)
{
  struct GSList * D.26451;
  int iftmp.121;
  <unnamed type> verifier_mode.122;
  int iftmp.123;
  int D.26461;
  int D.26463;
  int iftmp.124;
  int D.26468;

  verifier_mode.122 = verifier_mode;
  if (verifier_mode.122 != 3) goto <D.26454>; else goto <D.26455>;
  <D.26454>:
  iftmp.121 = 32;
  goto <D.26456>;
  <D.26455>:
  iftmp.121 = 0;
  <D.26456>:
  if (is_fulltrust == 0) goto <D.26460>; else goto <D.26458>;
  <D.26460>:
  D.26461 = mono_verifier_is_method_full_trust (method);
  if (D.26461 == 0) goto <D.26462>; else goto <D.26458>;
  <D.26462>:
  iftmp.123 = 16;
  goto <D.26459>;
  <D.26458>:
  iftmp.123 = 0;
  <D.26459>:
  D.26463 = iftmp.121 | iftmp.123;
  if (skip_visibility != 0) goto <D.26465>; else goto <D.26466>;
  <D.26465>:
  iftmp.124 = 64;
  goto <D.26467>;
  <D.26466>:
  iftmp.124 = 0;
  <D.26467>:
  D.26468 = D.26463 | iftmp.124;
  D.26451 = mono_method_verify (method, D.26468);
  return D.26451;
}


mono_verifier_verify_class (struct MonoClass * class)
{
  struct MonoClass * D.26470;
  struct MonoClass * D.26473;
  unsigned int D.26476;
  unsigned int D.26477;
  unsigned char D.26480;
  struct MonoImage * D.26485;
  unsigned char D.26486;
  unsigned char D.26487;
  unsigned int D.26490;
  gboolean D.26493;
  unsigned int D.26498;
  unsigned int D.26499;
  unsigned char D.26501;
  struct MonoGenericClass * D.26503;
  struct MonoGenericContainer * D.26506;
  struct MonoGenericClass * D.26509;
  struct MonoGenericContainer * D.26514;
  struct MonoType * D.26517;
  int D.26518;
  unsigned int D.26523;
  int D.26528;
  int D.26531;
  int D.26536;
  int D.26541;
  unsigned char D.26544;
  unsigned char D.26545;
  int D.26548;
  int D.26551;

  D.26470 = class->parent;
  if (D.26470 == 0B) goto <D.26471>; else goto <D.26472>;
  <D.26471>:
  D.26473 = mono_defaults.object_class;
  if (D.26473 != class) goto <D.26474>; else goto <D.26475>;
  <D.26474>:
  D.26476 = class->flags;
  D.26477 = D.26476 & 32;
  if (D.26477 == 0) goto <D.26478>; else goto <D.26479>;
  <D.26478>:
  D.26480 = class->byval_arg.type;
  if (D.26480 != 19) goto <D.26481>; else goto <D.26482>;
  <D.26481>:
  D.26480 = class->byval_arg.type;
  if (D.26480 != 30) goto <D.26483>; else goto <D.26484>;
  <D.26483>:
  D.26485 = class->image;
  D.26486 = BIT_FIELD_REF <*D.26485, 8, 224>;
  D.26487 = D.26486 & 8;
  if (D.26487 == 0) goto <D.26488>; else goto <D.26489>;
  <D.26488>:
  D.26490 = class->type_token;
  if (D.26490 != 33554433) goto <D.26491>; else goto <D.26492>;
  <D.26491>:
  D.26493 = 0;
  return D.26493;
  <D.26492>:
  <D.26489>:
  <D.26484>:
  <D.26482>:
  <D.26479>:
  <D.26475>:
  <D.26472>:
  D.26470 = class->parent;
  if (D.26470 != 0B) goto <D.26494>; else goto <D.26495>;
  <D.26494>:
  D.26470 = class->parent;
  D.26498 = D.26470->flags;
  D.26499 = D.26498 & 32;
  if (D.26499 != 0) goto <D.26496>; else goto <D.26500>;
  <D.26500>:
  D.26470 = class->parent;
  D.26501 = D.26470->byval_arg.type;
  if (D.26501 == 19) goto <D.26496>; else goto <D.26502>;
  <D.26502>:
  D.26470 = class->parent;
  D.26501 = D.26470->byval_arg.type;
  if (D.26501 == 30) goto <D.26496>; else goto <D.26497>;
  <D.26496>:
  D.26493 = 0;
  return D.26493;
  <D.26497>:
  D.26503 = class->generic_class;
  if (D.26503 == 0B) goto <D.26504>; else goto <D.26505>;
  <D.26504>:
  D.26470 = class->parent;
  D.26506 = D.26470->generic_container;
  if (D.26506 != 0B) goto <D.26507>; else goto <D.26508>;
  <D.26507>:
  D.26493 = 0;
  return D.26493;
  <D.26508>:
  <D.26505>:
  D.26470 = class->parent;
  D.26509 = D.26470->generic_class;
  if (D.26509 != 0B) goto <D.26510>; else goto <D.26511>;
  <D.26510>:
  D.26503 = class->generic_class;
  if (D.26503 == 0B) goto <D.26512>; else goto <D.26513>;
  <D.26512>:
  {
    struct MonoGenericContext * context;

    context = mono_class_get_context (class);
    D.26514 = class->generic_container;
    if (D.26514 != 0B) goto <D.26515>; else goto <D.26516>;
    <D.26515>:
    D.26514 = class->generic_container;
    context = &D.26514->context;
    <D.26516>:
    D.26470 = class->parent;
    D.26517 = &D.26470->byval_arg;
    D.26518 = mono_type_is_valid_type_in_context (D.26517, context);
    if (D.26518 == 0) goto <D.26519>; else goto <D.26520>;
    <D.26519>:
    D.26493 = 0;
    return D.26493;
    <D.26520>:
  }
  <D.26513>:
  <D.26511>:
  <D.26495>:
  D.26514 = class->generic_container;
  if (D.26514 != 0B) goto <D.26521>; else goto <D.26522>;
  <D.26521>:
  D.26476 = class->flags;
  D.26523 = D.26476 & 24;
  if (D.26523 == 16) goto <D.26524>; else goto <D.26525>;
  <D.26524>:
  D.26493 = 0;
  return D.26493;
  <D.26525>:
  <D.26522>:
  D.26514 = class->generic_container;
  if (D.26514 != 0B) goto <D.26526>; else goto <D.26527>;
  <D.26526>:
  D.26528 = verify_generic_parameters (class);
  if (D.26528 == 0) goto <D.26529>; else goto <D.26530>;
  <D.26529>:
  D.26493 = 0;
  return D.26493;
  <D.26530>:
  <D.26527>:
  D.26531 = verify_class_for_overlapping_reference_fields (class);
  if (D.26531 == 0) goto <D.26532>; else goto <D.26533>;
  <D.26532>:
  D.26493 = 0;
  return D.26493;
  <D.26533>:
  D.26503 = class->generic_class;
  if (D.26503 != 0B) goto <D.26534>; else goto <D.26535>;
  <D.26534>:
  D.26536 = mono_class_is_valid_generic_instantiation (0B, class);
  if (D.26536 == 0) goto <D.26537>; else goto <D.26538>;
  <D.26537>:
  D.26493 = 0;
  return D.26493;
  <D.26538>:
  <D.26535>:
  D.26503 = class->generic_class;
  if (D.26503 == 0B) goto <D.26539>; else goto <D.26540>;
  <D.26539>:
  D.26541 = verify_class_fields (class);
  if (D.26541 == 0) goto <D.26542>; else goto <D.26543>;
  <D.26542>:
  D.26493 = 0;
  return D.26493;
  <D.26543>:
  <D.26540>:
  D.26544 = BIT_FIELD_REF <*class, 8, 256>;
  D.26545 = D.26544 & 8;
  if (D.26545 != 0) goto <D.26546>; else goto <D.26547>;
  <D.26546>:
  D.26548 = verify_valuetype_layout (class);
  if (D.26548 == 0) goto <D.26549>; else goto <D.26550>;
  <D.26549>:
  D.26493 = 0;
  return D.26493;
  <D.26550>:
  <D.26547>:
  D.26551 = verify_interfaces (class);
  if (D.26551 == 0) goto <D.26552>; else goto <D.26553>;
  <D.26552>:
  D.26493 = 0;
  return D.26493;
  <D.26553>:
  D.26493 = 1;
  return D.26493;
}


verify_generic_parameters (struct MonoClass * class)
{
  <unnamed-signed:31> D.26555;
  unsigned int D.26556;
  struct MonoGenericParamFull * D.26557;
  long unsigned int D.26558;
  long unsigned int D.26559;
  struct MonoGenericParamFull * D.26560;
  struct MonoClass * * D.26561;
  long unsigned int D.26564;
  long unsigned int D.26565;
  int D.26566;
  long unsigned int D.26567;
  long unsigned int D.26568;
  int D.26569;
  struct MonoGenericContext * D.26571;
  int D.26572;
  int D.26574;
  int D.26577;
  struct MonoGenericClass * D.26579;
  int D.26582;
  struct MonoClass * D.26584;
  int D.26585;
  gboolean D.26586;
  int i;
  struct MonoGenericContainer * gc;
  struct MonoBitSet * used_args;
  void fail = <<< error >>>;

  gc = class->generic_container;
  D.26555 = gc->type_argc;
  D.26556 = (unsigned int) D.26555;
  used_args = mono_bitset_new (D.26556, 0);
  i = 0;
  goto <D.19966>;
  <D.19965>:
  {
    struct MonoGenericParamInfo * param_info;
    struct MonoClass * * constraints;

    D.26557 = gc->type_params;
    D.26558 = (long unsigned int) i;
    D.26559 = D.26558 * 56;
    D.26560 = D.26557 + D.26559;
    param_info = &D.26560->info;
    D.26561 = param_info->constraints;
    if (D.26561 == 0B) goto <D.26562>; else goto <D.26563>;
    <D.26562>:
    // predicted unlikely by continue predictor.
    goto <D.19958>;
    <D.26563>:
    mono_bitset_clear_all (used_args);
    D.26558 = (long unsigned int) i;
    D.26564 = D.26558 / 64;
    D.26565 = used_args->data[D.26564];
    D.26566 = i & 63;
    D.26567 = 1 << D.26566;
    D.26568 = D.26565 | D.26567;
    used_args->data[D.26564] = D.26568;
    constraints = param_info->constraints;
    goto <D.19963>;
    <D.19962>:
    {
      struct MonoClass * ctr;
      struct MonoType * constraint_type;

      ctr = *constraints;
      constraint_type = &ctr->byval_arg;
      D.26569 = mono_class_can_access_class (class, ctr);
      if (D.26569 == 0) goto fail; else goto <D.26570>;
      <D.26570>:
      D.26571 = &gc->context;
      D.26572 = mono_type_is_valid_type_in_context (constraint_type, D.26571);
      if (D.26572 == 0) goto fail; else goto <D.26573>;
      <D.26573>:
      D.26574 = mono_type_is_generic_argument (constraint_type);
      if (D.26574 != 0) goto <D.26575>; else goto <D.26576>;
      <D.26575>:
      D.26577 = recursive_mark_constraint_args (used_args, gc, constraint_type);
      if (D.26577 == 0) goto fail; else goto <D.26578>;
      <D.26578>:
      <D.26576>:
      D.26579 = ctr->generic_class;
      if (D.26579 != 0B) goto <D.26580>; else goto <D.26581>;
      <D.26580>:
      D.26582 = mono_class_is_valid_generic_instantiation (0B, ctr);
      if (D.26582 == 0) goto fail; else goto <D.26583>;
      <D.26583>:
      <D.26581>:
    }
    constraints = constraints + 8;
    <D.19963>:
    D.26584 = *constraints;
    if (D.26584 != 0B) goto <D.19962>; else goto <D.19964>;
    <D.19964>:
  }
  <D.19958>:
  i = i + 1;
  <D.19966>:
  D.26555 = gc->type_argc;
  D.26585 = (int) D.26555;
  if (D.26585 > i) goto <D.19965>; else goto <D.19967>;
  <D.19967>:
  mono_bitset_free (used_args);
  D.26586 = 1;
  return D.26586;
  fail:
  mono_bitset_free (used_args);
  D.26586 = 0;
  return D.26586;
}


recursive_mark_constraint_args (struct MonoBitSet * used_args, struct MonoGenericContainer * gc, struct MonoType * type)
{
  int D.26588;
  _Bool D.26589;
  long int D.26590;
  long int D.26591;
  struct MonoGenericParam * D.26594;
  short unsigned int D.26595;
  long unsigned int D.26596;
  long unsigned int D.26597;
  long unsigned int D.26598;
  int D.26599;
  long unsigned int D.26600;
  long unsigned int D.26601;
  gboolean D.26604;
  long unsigned int D.26605;
  long unsigned int D.26606;
  long unsigned int D.26607;
  long unsigned int D.26608;
  struct MonoGenericParamFull * D.26609;
  long unsigned int D.26610;
  struct MonoGenericParamFull * D.26611;
  struct MonoClass * * D.26612;
  int D.26615;
  int D.26618;
  struct MonoClass * D.26621;
  int idx;
  struct MonoClass * * constraints;
  struct MonoGenericParamInfo * param_info;

  D.26588 = mono_type_is_generic_argument (type);
  D.26589 = D.26588 == 0;
  D.26590 = (long int) D.26589;
  D.26591 = __builtin_expect (D.26590, 0);
  if (D.26591 != 0) goto <D.26592>; else goto <D.26593>;
  <D.26592>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 6206, "mono_type_is_generic_argument (type)");
  <D.26593>:
  D.26594 = type->data.generic_param;
  D.26595 = D.26594->num;
  idx = (int) D.26595;
  D.26596 = (long unsigned int) idx;
  D.26597 = D.26596 / 64;
  D.26598 = used_args->data[D.26597];
  D.26599 = idx & 63;
  D.26600 = D.26598 >> D.26599;
  D.26601 = D.26600 & 1;
  if (D.26601 != 0) goto <D.26602>; else goto <D.26603>;
  <D.26602>:
  D.26604 = 0;
  return D.26604;
  <D.26603>:
  D.26596 = (long unsigned int) idx;
  D.26605 = D.26596 / 64;
  D.26606 = used_args->data[D.26605];
  D.26599 = idx & 63;
  D.26607 = 1 << D.26599;
  D.26608 = D.26606 | D.26607;
  used_args->data[D.26605] = D.26608;
  D.26609 = gc->type_params;
  D.26596 = (long unsigned int) idx;
  D.26610 = D.26596 * 56;
  D.26611 = D.26609 + D.26610;
  param_info = &D.26611->info;
  D.26612 = param_info->constraints;
  if (D.26612 == 0B) goto <D.26613>; else goto <D.26614>;
  <D.26613>:
  D.26604 = 1;
  return D.26604;
  <D.26614>:
  constraints = param_info->constraints;
  goto <D.19948>;
  <D.19947>:
  {
    struct MonoClass * ctr;
    struct MonoType * constraint_type;

    ctr = *constraints;
    constraint_type = &ctr->byval_arg;
    D.26615 = mono_type_is_generic_argument (constraint_type);
    if (D.26615 != 0) goto <D.26616>; else goto <D.26617>;
    <D.26616>:
    D.26618 = recursive_mark_constraint_args (used_args, gc, constraint_type);
    if (D.26618 == 0) goto <D.26619>; else goto <D.26620>;
    <D.26619>:
    D.26604 = 0;
    return D.26604;
    <D.26620>:
    <D.26617>:
  }
  constraints = constraints + 8;
  <D.19948>:
  D.26621 = *constraints;
  if (D.26621 != 0B) goto <D.19947>; else goto <D.19949>;
  <D.19949>:
  D.26604 = 1;
  return D.26604;
}


verify_class_for_overlapping_reference_fields (struct MonoClass * class)
{
  unsigned int D.26623;
  unsigned int D.26624;
  gboolean D.26627;
  struct MonoType * D.26628;
  int D.26629;
  _Bool D.26630;
  short unsigned int D.26634;
  int D.26635;
  int D.26636;
  int D.19866;
  int iftmp.125;
  int D.19865;
  const char[9] * D.26641;
  unsigned char D.26642;
  int D.26643;
  unsigned char D.26644;
  int D.26645;
  _Bool D.26646;
  _Bool D.26647;
  _Bool D.26648;
  const unsigned char * D.26651;
  unsigned char D.26652;
  int D.26653;
  const unsigned char * D.26654;
  unsigned char D.26655;
  int D.26656;
  _Bool D.26657;
  _Bool D.26658;
  const unsigned char * D.26661;
  unsigned char D.26662;
  int D.26663;
  const unsigned char * D.26664;
  unsigned char D.26665;
  int D.26666;
  _Bool D.26667;
  _Bool D.26668;
  const unsigned char * D.26671;
  unsigned char D.26672;
  int D.26673;
  const unsigned char * D.26674;
  unsigned char D.26675;
  int D.26676;
  const char * D.26678;
  int D.26679;
  struct MonoClassField * D.26680;
  long unsigned int D.26681;
  long unsigned int D.26682;
  struct MonoType * D.26687;
  short unsigned int D.26688;
  int D.26689;
  int D.26690;
  int D.19878;
  int iftmp.126;
  int D.19877;
  unsigned char D.26695;
  int D.26696;
  _Bool D.26697;
  _Bool D.26698;
  _Bool D.26699;
  const unsigned char * D.26702;
  unsigned char D.26703;
  int D.26704;
  _Bool D.26705;
  _Bool D.26706;
  const unsigned char * D.26709;
  unsigned char D.26710;
  int D.26711;
  _Bool D.26712;
  _Bool D.26713;
  const unsigned char * D.26716;
  unsigned char D.26717;
  int D.26718;
  const char * D.26720;
  int D.26722;
  int D.26723;
  int D.26726;
  int D.26729;
  int D.26730;
  unsigned int j.127;
  unsigned int D.26741;
  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.26623 = class->flags;
      D.26624 = D.26623 & 24;
      if (D.26624 != 16) goto <D.26625>; else goto <D.26626>;
      <D.26625>:
      D.26627 = 1;
      return D.26627;
      <D.26626>:
      goto <D.19867>;
      <D.19883>:
      {
        int fieldEnd;
        gboolean is_valuetype;

        fieldEnd = get_field_end (field);
        D.26628 = field->type;
        D.26629 = mono_type_is_reference (D.26628);
        D.26630 = D.26629 == 0;
        is_valuetype = (gboolean) D.26630;
        i = i + 1;
        D.26628 = field->type;
        D.26634 = D.26628->attrs;
        D.26635 = (int) D.26634;
        D.26636 = D.26635 & 1536;
        if (D.26636 != 0) goto <D.26637>; else goto <D.26631>;
        <D.26637>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.26641 = "_Deleted";
            D.26642 = MEM[(const unsigned char *)D.26641];
            D.26643 = (int) D.26642;
            D.26644 = *__s2;
            D.26645 = (int) D.26644;
            __result = D.26643 - D.26645;
            {
              D.26646 = __s2_len != 0;
              D.26647 = __result == 0;
              D.26648 = D.26646 & D.26647;
              if (D.26648 != 0) goto <D.26649>; else goto <D.26650>;
              <D.26649>:
              D.26651 = &MEM[(void *)"_Deleted" + 1B];
              D.26652 = *D.26651;
              D.26653 = (int) D.26652;
              D.26654 = __s2 + 1;
              D.26655 = *D.26654;
              D.26656 = (int) D.26655;
              __result = D.26653 - D.26656;
              D.26657 = __s2_len > 1;
              D.26647 = __result == 0;
              D.26658 = D.26657 & D.26647;
              if (D.26658 != 0) goto <D.26659>; else goto <D.26660>;
              <D.26659>:
              D.26661 = &MEM[(void *)"_Deleted" + 2B];
              D.26662 = *D.26661;
              D.26663 = (int) D.26662;
              D.26664 = __s2 + 2;
              D.26665 = *D.26664;
              D.26666 = (int) D.26665;
              __result = D.26663 - D.26666;
              D.26667 = __s2_len > 2;
              D.26647 = __result == 0;
              D.26668 = D.26667 & D.26647;
              if (D.26668 != 0) goto <D.26669>; else goto <D.26670>;
              <D.26669>:
              D.26671 = &MEM[(void *)"_Deleted" + 3B];
              D.26672 = *D.26671;
              D.26673 = (int) D.26672;
              D.26674 = __s2 + 3;
              D.26675 = *D.26674;
              D.26676 = (int) D.26675;
              __result = D.26673 - D.26676;
              <D.26670>:
              <D.26660>:
              <D.26650>:
            }
            D.19865 = __result;
          }
          iftmp.125 = -D.19865;
          goto <D.26677>;
          <D.26640>:
          D.26678 = mono_field_get_name (field);
          iftmp.125 = __builtin_strcmp (D.26678, "_Deleted");
          <D.26677>:
          D.19866 = iftmp.125;
        }
        if (D.19866 == 0) goto <D.26632>; else goto <D.26631>;
        <D.26631>:
        D.26628 = field->type;
        D.26634 = D.26628->attrs;
        D.26635 = (int) D.26634;
        D.26679 = D.26635 & 16;
        if (D.26679 != 0) goto <D.26632>; else goto <D.26633>;
        <D.26632>:
        // predicted unlikely by continue predictor.
        goto <D.19867>;
        <D.26633>:
        j = i;
        goto <D.19881>;
        <D.19880>:
        {
          struct MonoClassField * other;
          int otherEnd;

          D.26680 = class->fields;
          D.26681 = (long unsigned int) j;
          D.26682 = D.26681 * 32;
          other = D.26680 + D.26682;
          otherEnd = get_field_end (other);
          D.26687 = other->type;
          D.26688 = D.26687->attrs;
          D.26689 = (int) D.26688;
          D.26690 = D.26689 & 1536;
          if (D.26690 != 0) goto <D.26691>; else goto <D.26683>;
          <D.26691>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = mono_field_get_name (other);
              D.26641 = "_Deleted";
              D.26642 = MEM[(const unsigned char *)D.26641];
              D.26643 = (int) D.26642;
              D.26695 = *__s2;
              D.26696 = (int) D.26695;
              __result = D.26643 - D.26696;
              {
                D.26697 = __s2_len != 0;
                D.26698 = __result == 0;
                D.26699 = D.26697 & D.26698;
                if (D.26699 != 0) goto <D.26700>; else goto <D.26701>;
                <D.26700>:
                D.26651 = &MEM[(void *)"_Deleted" + 1B];
                D.26652 = *D.26651;
                D.26653 = (int) D.26652;
                D.26702 = __s2 + 1;
                D.26703 = *D.26702;
                D.26704 = (int) D.26703;
                __result = D.26653 - D.26704;
                D.26705 = __s2_len > 1;
                D.26698 = __result == 0;
                D.26706 = D.26705 & D.26698;
                if (D.26706 != 0) goto <D.26707>; else goto <D.26708>;
                <D.26707>:
                D.26661 = &MEM[(void *)"_Deleted" + 2B];
                D.26662 = *D.26661;
                D.26663 = (int) D.26662;
                D.26709 = __s2 + 2;
                D.26710 = *D.26709;
                D.26711 = (int) D.26710;
                __result = D.26663 - D.26711;
                D.26712 = __s2_len > 2;
                D.26698 = __result == 0;
                D.26713 = D.26712 & D.26698;
                if (D.26713 != 0) goto <D.26714>; else goto <D.26715>;
                <D.26714>:
                D.26671 = &MEM[(void *)"_Deleted" + 3B];
                D.26672 = *D.26671;
                D.26673 = (int) D.26672;
                D.26716 = __s2 + 3;
                D.26717 = *D.26716;
                D.26718 = (int) D.26717;
                __result = D.26673 - D.26718;
                <D.26715>:
                <D.26708>:
                <D.26701>:
              }
              D.19877 = __result;
            }
            iftmp.126 = -D.19877;
            goto <D.26719>;
            <D.26694>:
            D.26720 = mono_field_get_name (other);
            iftmp.126 = __builtin_strcmp (D.26720, "_Deleted");
            <D.26719>:
            D.19878 = iftmp.126;
          }
          if (D.19878 == 0) goto <D.26684>; else goto <D.26683>;
          <D.26683>:
          if (is_valuetype != 0) goto <D.26721>; else goto <D.26685>;
          <D.26721>:
          D.26687 = other->type;
          D.26722 = mono_type_is_reference (D.26687);
          if (D.26722 == 0) goto <D.26684>; else goto <D.26685>;
          <D.26685>:
          D.26687 = other->type;
          D.26688 = D.26687->attrs;
          D.26689 = (int) D.26688;
          D.26723 = D.26689 & 16;
          if (D.26723 != 0) goto <D.26684>; else goto <D.26686>;
          <D.26684>:
          // predicted unlikely by continue predictor.
          goto <D.19879>;
          <D.26686>:
          if (is_valuetype == 0) goto <D.26724>; else goto <D.26725>;
          <D.26724>:
          D.26687 = other->type;
          D.26726 = mono_type_is_reference (D.26687);
          if (D.26726 != 0) goto <D.26727>; else goto <D.26728>;
          <D.26727>:
          D.26729 = field->offset;
          D.26730 = other->offset;
          if (D.26729 == D.26730) goto <D.26731>; else goto <D.26732>;
          <D.26731>:
          if (is_fulltrust != 0) goto <D.26733>; else goto <D.26734>;
          <D.26733>:
          // predicted unlikely by continue predictor.
          goto <D.19879>;
          <D.26734>:
          <D.26732>:
          <D.26728>:
          <D.26725>:
          D.26729 = field->offset;
          if (D.26729 < otherEnd) goto <D.26738>; else goto <D.26735>;
          <D.26738>:
          if (otherEnd <= fieldEnd) goto <D.26736>; else goto <D.26735>;
          <D.26735>:
          D.26730 = other->offset;
          D.26729 = field->offset;
          if (D.26730 >= D.26729) goto <D.26739>; else goto <D.26737>;
          <D.26739>:
          D.26730 = other->offset;
          if (D.26730 < fieldEnd) goto <D.26736>; else goto <D.26737>;
          <D.26736>:
          D.26627 = 0;
          return D.26627;
          <D.26737>:
        }
        <D.19879>:
        j = j + 1;
        <D.19881>:
        j.127 = (unsigned int) j;
        D.26741 = class->field.count;
        if (j.127 < D.26741) goto <D.19880>; else goto <D.19882>;
        <D.19882>:
      }
      <D.19867>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.19883>; else goto <D.19884>;
      <D.19884>:
      D.26627 = 1;
      return D.26627;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


get_field_end (struct MonoClassField * field)
{
  struct MonoType * D.26744;
  int D.26747;
  int D.26748;
  int align;
  int size;

  try
    {
      D.26744 = field->type;
      size = mono_type_size (D.26744, &align);
      if (size == 0) goto <D.26745>; else goto <D.26746>;
      <D.26745>:
      size = 4;
      <D.26746>:
      D.26748 = field->offset;
      D.26747 = D.26748 + size;
      return D.26747;
    }
  finally
    {
      align = {CLOBBER};
    }
}


verify_class_fields (struct MonoClass * class)
{
  struct MonoGenericContainer * D.26751;
  struct MonoType * D.26754;
  int D.26755;
  gboolean D.26758;
  void * D.26759;
  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.26751 = class->generic_container;
      if (D.26751 != 0B) goto <D.26752>; else goto <D.26753>;
      <D.26752>:
      D.26751 = class->generic_container;
      context = &D.26751->context;
      <D.26753>:
      goto <D.19912>;
      <D.19911>:
      D.26754 = field->type;
      D.26755 = mono_type_is_valid_type_in_context (D.26754, context);
      if (D.26755 == 0) goto <D.26756>; else goto <D.26757>;
      <D.26756>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26758 = 0;
      return D.26758;
      <D.26757>:
      D.26759 = monoeg_g_hash_table_lookup (unique_fields, field);
      if (D.26759 != 0B) goto <D.26760>; else goto <D.26761>;
      <D.26760>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26758 = 0;
      return D.26758;
      <D.26761>:
      monoeg_g_hash_table_insert_replace (unique_fields, field, field, 0);
      <D.19912>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.19911>; else goto <D.19913>;
      <D.19913>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26758 = 1;
      return D.26758;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


field_equals (const void * _a, const void * _b)
{
  gboolean D.26764;
  int iftmp.128;
  int D.19903;
  const char * D.26768;
  const char * D.26769;
  struct MonoType * D.26771;
  struct MonoType * D.26772;
  int D.26773;
  const struct MonoClassField * a;
  const struct MonoClassField * b;

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

    D.26768 = b->name;
    D.26769 = a->name;
    D.19903 = __builtin_strcmp (D.26769, D.26768);
  }
  if (D.19903 == 0) goto <D.26770>; else goto <D.26766>;
  <D.26770>:
  D.26771 = b->type;
  D.26772 = a->type;
  D.26773 = mono_metadata_type_equal (D.26772, D.26771);
  if (D.26773 != 0) goto <D.26774>; else goto <D.26766>;
  <D.26774>:
  iftmp.128 = 1;
  goto <D.26767>;
  <D.26766>:
  iftmp.128 = 0;
  <D.26767>:
  D.26764 = iftmp.128;
  return D.26764;
}


field_hash (const void * key)
{
  guint D.26776;
  const char * D.26777;
  unsigned int D.26778;
  struct MonoType * D.26779;
  unsigned int D.26780;
  const struct MonoClassField * field;

  field = key;
  D.26777 = field->name;
  D.26778 = monoeg_g_str_hash (D.26777);
  D.26779 = field->type;
  D.26780 = mono_metadata_type_hash (D.26779);
  D.26776 = D.26778 ^ D.26780;
  return D.26776;
}


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

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


verify_valuetype_layout_with_target (struct MonoClass * class, struct MonoClass * target_class)
{
  unsigned char D.26784;
  unsigned char D.26785;
  gboolean D.26788;
  unsigned char D.26789;
  unsigned int type.129;
  unsigned int D.26791;
  _Bool D.26792;
  unsigned int D.26793;
  _Bool D.26794;
  _Bool D.26795;
  struct MonoType * D.26798;
  short unsigned int D.26801;
  int D.26802;
  int D.26803;
  struct MonoClass * D.26806;
  _Bool D.26809;
  _Bool D.26810;
  _Bool D.26811;
  int D.26813;
  int type;
  void * iter;
  struct MonoClassField * field;
  struct MonoClass * field_class;

  try
    {
      iter = 0B;
      D.26784 = BIT_FIELD_REF <*class, 8, 256>;
      D.26785 = D.26784 & 8;
      if (D.26785 == 0) goto <D.26786>; else goto <D.26787>;
      <D.26786>:
      D.26788 = 1;
      return D.26788;
      <D.26787>:
      D.26789 = class->byval_arg.type;
      type = (int) D.26789;
      type.129 = (unsigned int) type;
      D.26791 = type.129 + 4294967294;
      D.26792 = D.26791 <= 11;
      type.129 = (unsigned int) type;
      D.26793 = type.129 + 4294967272;
      D.26794 = D.26793 <= 1;
      D.26795 = D.26792 | D.26794;
      if (D.26795 != 0) goto <D.26796>; else goto <D.26797>;
      <D.26796>:
      D.26788 = 1;
      return D.26788;
      <D.26797>:
      goto <D.19930>;
      <D.19931>:
      D.26798 = field->type;
      if (D.26798 == 0B) goto <D.26799>; else goto <D.26800>;
      <D.26799>:
      D.26788 = 0;
      return D.26788;
      <D.26800>:
      D.26798 = field->type;
      D.26801 = D.26798->attrs;
      D.26802 = (int) D.26801;
      D.26803 = D.26802 & 272;
      if (D.26803 != 0) goto <D.26804>; else goto <D.26805>;
      <D.26804>:
      // predicted unlikely by continue predictor.
      goto <D.19930>;
      <D.26805>:
      D.26798 = field->type;
      D.26806 = mono_class_from_mono_type (D.26798);
      field_class = mono_class_get_generic_type_definition (D.26806);
      D.26809 = field_class == target_class;
      D.26810 = class == field_class;
      D.26811 = D.26809 | D.26810;
      if (D.26811 != 0) goto <D.26807>; else goto <D.26812>;
      <D.26812>:
      D.26813 = verify_valuetype_layout_with_target (field_class, target_class);
      if (D.26813 == 0) goto <D.26807>; else goto <D.26808>;
      <D.26807>:
      D.26788 = 0;
      return D.26788;
      <D.26808>:
      <D.19930>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.19931>; else goto <D.19932>;
      <D.19932>:
      D.26788 = 1;
      return D.26788;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


verify_interfaces (struct MonoClass * class)
{
  struct MonoClass * * D.26816;
  long unsigned int D.26817;
  long unsigned int D.26818;
  struct MonoClass * * D.26819;
  unsigned int D.26820;
  unsigned int D.26821;
  gboolean D.26824;
  short unsigned int D.26825;
  int D.26826;
  int i;

  i = 0;
  goto <D.19920>;
  <D.19919>:
  {
    struct MonoClass * iface;

    D.26816 = class->interfaces;
    D.26817 = (long unsigned int) i;
    D.26818 = D.26817 * 8;
    D.26819 = D.26816 + D.26818;
    iface = *D.26819;
    D.26820 = iface->flags;
    D.26821 = D.26820 & 32;
    if (D.26821 == 0) goto <D.26822>; else goto <D.26823>;
    <D.26822>:
    D.26824 = 0;
    return D.26824;
    <D.26823>:
  }
  i = i + 1;
  <D.19920>:
  D.26825 = class->interface_count;
  D.26826 = (int) D.26825;
  if (D.26826 > i) goto <D.19919>; else goto <D.19921>;
  <D.19921>:
  D.26824 = 1;
  return D.26824;
}


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

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


mono_verifier_is_method_valid_generic_instantiation (struct MonoMethod * method)
{
  unsigned char D.26830;
  unsigned char D.26831;
  gboolean D.26834;

  D.26830 = BIT_FIELD_REF <*method, 8, 264>;
  D.26831 = D.26830 & 16;
  if (D.26831 == 0) goto <D.26832>; else goto <D.26833>;
  <D.26832>:
  D.26834 = 1;
  return D.26834;
  <D.26833>:
  D.26834 = mono_method_is_valid_generic_instantiation (0B, method);
  return D.26834;
}


