mono_cominterop_is_supported ()
{
  int D.9221;

  D.9221 = 1;
  return D.9221;
  D.9221 = 0;
  return D.9221;
}


test_lpwstr_marshal (short unsigned int * chars, long int length)
{
  long int D.9223;
  long int D.9224;
  long unsigned int D.9225;
  long unsigned int D.9226;
  long unsigned int D.9227;
  short unsigned int * D.9228;
  short unsigned int * D.9229;
  short unsigned int D.9230;
  long int D.9231;
  short unsigned int * D.9232;
  int i;
  short unsigned int * res;

  i = 0;
  D.9223 = length + 1;
  D.9224 = D.9223 * 2;
  D.9225 = (long unsigned int) D.9224;
  res = marshal_alloc (D.9225);
  goto <D.6715>;
  <D.6714>:
  D.9226 = (long unsigned int) i;
  D.9227 = D.9226 * 2;
  D.9228 = res + D.9227;
  D.9226 = (long unsigned int) i;
  D.9227 = D.9226 * 2;
  D.9229 = chars + D.9227;
  D.9230 = *D.9229;
  *D.9228 = D.9230;
  i = i + 1;
  <D.6715>:
  D.9231 = (long int) i;
  if (D.9231 < length) goto <D.6714>; else goto <D.6716>;
  <D.6716>:
  D.9226 = (long unsigned int) i;
  D.9227 = D.9226 * 2;
  D.9228 = res + D.9227;
  *D.9228 = 0;
  D.9232 = res;
  return D.9232;
}


marshal_alloc (gsize size)
{
  void * D.9234;

  D.9234 = monoeg_malloc (size);
  return D.9234;
}


test_lpwstr_marshal_out (short unsigned int * * chars)
{
  long unsigned int D.9236;
  long int D.9237;
  long int D.9238;
  long unsigned int D.9239;
  void * D.9240;
  short unsigned int * D.9241;
  long unsigned int D.9242;
  long unsigned int D.9243;
  short unsigned int * D.9244;
  char D.9245;
  short unsigned int D.9246;
  long int D.9247;
  int i;
  const char abc[4];
  glong len;

  try
    {
      i = 0;
      abc = "ABC";
      D.9236 = strlen (&abc);
      len = (glong) D.9236;
      D.9237 = len + 1;
      D.9238 = D.9237 * 2;
      D.9239 = (long unsigned int) D.9238;
      D.9240 = marshal_alloc (D.9239);
      *chars = D.9240;
      goto <D.6724>;
      <D.6723>:
      D.9241 = *chars;
      D.9242 = (long unsigned int) i;
      D.9243 = D.9242 * 2;
      D.9244 = D.9241 + D.9243;
      D.9245 = abc[i];
      D.9246 = (short unsigned int) D.9245;
      *D.9244 = D.9246;
      i = i + 1;
      <D.6724>:
      D.9247 = (long int) i;
      if (D.9247 < len) goto <D.6723>; else goto <D.6725>;
      <D.6725>:
      D.9241 = *chars;
      D.9242 = (long unsigned int) i;
      D.9243 = D.9242 * 2;
      D.9244 = D.9241 + D.9243;
      *D.9244 = 0;
    }
  finally
    {
      abc = {CLOBBER};
    }
}


mono_union_test_1 (struct union_test_1_type u1)
{
  int D.9248;
  int D.9249;
  int D.9250;
  int D.9251;
  int D.9252;

  D.9249 = u1.a;
  D.9250 = u1.b;
  D.9251 = D.9249 + D.9250;
  D.9252 = u1.c;
  D.9248 = D.9251 + D.9252;
  return D.9248;
}


mono_return_int (int a)
{
  int D.9254;

  D.9254 = a;
  return D.9254;
}


mono_test_marshal_pass_return_float (float f)
{
  float D.9256;

  D.9256 = f + 1.0e+0;
  return D.9256;
}


mono_return_int_ss (struct ss a)
{
  int D.9258;

  D.9258 = a.i;
  return D.9258;
}


mono_return_ss (struct ss a)
{
  int D.9260;
  int D.9261;
  struct ss D.9262;

  D.9260 = a.i;
  D.9261 = D.9260 + 1;
  a.i = D.9261;
  D.9262 = a;
  return D.9262;
}


mono_return_sc1 (struct sc1 a)
{
  char D.9264;
  char D.9265;
  unsigned char D.9266;
  unsigned char D.9267;
  char D.9268;
  struct sc1 D.9269;

  D.9264 = a.c[0];
  D.9265 = D.9264;
  D.9266 = (unsigned char) D.9265;
  D.9267 = D.9266 + 1;
  D.9268 = (char) D.9267;
  a.c[0] = D.9268;
  D.9269 = a;
  return D.9269;
}


mono_return_sc3 (struct sc3 a)
{
  char D.9271;
  char D.9272;
  unsigned char D.9273;
  unsigned char D.9274;
  char D.9275;
  char D.9276;
  unsigned char D.9277;
  unsigned char D.9278;
  char D.9279;
  char D.9280;
  unsigned char D.9281;
  unsigned char D.9282;
  char D.9283;
  struct sc3 D.9284;

  D.9271 = a.c[0];
  D.9272 = D.9271;
  D.9273 = (unsigned char) D.9272;
  D.9274 = D.9273 + 1;
  D.9275 = (char) D.9274;
  a.c[0] = D.9275;
  D.9276 = a.c[1];
  D.9277 = (unsigned char) D.9276;
  D.9278 = D.9277 + 2;
  D.9279 = (char) D.9278;
  a.c[1] = D.9279;
  D.9280 = a.c[2];
  D.9281 = (unsigned char) D.9280;
  D.9282 = D.9281 + 3;
  D.9283 = (char) D.9282;
  a.c[2] = D.9283;
  D.9284 = a;
  return D.9284;
}


mono_return_sc5 (struct sc5 a)
{
  char D.9286;
  char D.9287;
  unsigned char D.9288;
  unsigned char D.9289;
  char D.9290;
  char D.9291;
  unsigned char D.9292;
  unsigned char D.9293;
  char D.9294;
  char D.9295;
  unsigned char D.9296;
  unsigned char D.9297;
  char D.9298;
  char D.9299;
  unsigned char D.9300;
  unsigned char D.9301;
  char D.9302;
  char D.9303;
  unsigned char D.9304;
  unsigned char D.9305;
  char D.9306;
  struct sc5 D.9307;

  D.9286 = a.c[0];
  D.9287 = D.9286;
  D.9288 = (unsigned char) D.9287;
  D.9289 = D.9288 + 1;
  D.9290 = (char) D.9289;
  a.c[0] = D.9290;
  D.9291 = a.c[1];
  D.9292 = (unsigned char) D.9291;
  D.9293 = D.9292 + 2;
  D.9294 = (char) D.9293;
  a.c[1] = D.9294;
  D.9295 = a.c[2];
  D.9296 = (unsigned char) D.9295;
  D.9297 = D.9296 + 3;
  D.9298 = (char) D.9297;
  a.c[2] = D.9298;
  D.9299 = a.c[3];
  D.9300 = (unsigned char) D.9299;
  D.9301 = D.9300 + 4;
  D.9302 = (char) D.9301;
  a.c[3] = D.9302;
  D.9303 = a.c[4];
  D.9304 = (unsigned char) D.9303;
  D.9305 = D.9304 + 5;
  D.9306 = (char) D.9305;
  a.c[4] = D.9306;
  D.9307 = a;
  return D.9307;
}


mono_return_int_su (union su a)
{
  int D.9309;

  D.9309 = a.i1;
  return D.9309;
}


mono_test_many_int_arguments (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j)
{
  int D.9311;
  int D.9312;
  int D.9313;
  int D.9314;
  int D.9315;
  int D.9316;
  int D.9317;
  int D.9318;
  int D.9319;

  D.9312 = a + b;
  D.9313 = D.9312 + c;
  D.9314 = D.9313 + d;
  D.9315 = D.9314 + e;
  D.9316 = D.9315 + f;
  D.9317 = D.9316 + g;
  D.9318 = D.9317 + h;
  D.9319 = D.9318 + i;
  D.9311 = D.9319 + j;
  return D.9311;
}


mono_test_many_short_arguments (short int a, short int b, short int c, short int d, short int e, short int f, short int g, short int h, short int i, short int j)
{
  short int D.9321;
  unsigned short a.0;
  unsigned short b.1;
  unsigned short D.9324;
  unsigned short c.2;
  unsigned short D.9326;
  unsigned short d.3;
  unsigned short D.9328;
  unsigned short e.4;
  unsigned short D.9330;
  unsigned short f.5;
  unsigned short D.9332;
  unsigned short g.6;
  unsigned short D.9334;
  unsigned short h.7;
  unsigned short D.9336;
  unsigned short i.8;
  unsigned short D.9338;
  unsigned short j.9;
  unsigned short D.9340;

  a.0 = (unsigned short) a;
  b.1 = (unsigned short) b;
  D.9324 = a.0 + b.1;
  c.2 = (unsigned short) c;
  D.9326 = D.9324 + c.2;
  d.3 = (unsigned short) d;
  D.9328 = D.9326 + d.3;
  e.4 = (unsigned short) e;
  D.9330 = D.9328 + e.4;
  f.5 = (unsigned short) f;
  D.9332 = D.9330 + f.5;
  g.6 = (unsigned short) g;
  D.9334 = D.9332 + g.6;
  h.7 = (unsigned short) h;
  D.9336 = D.9334 + h.7;
  i.8 = (unsigned short) i;
  D.9338 = D.9336 + i.8;
  j.9 = (unsigned short) j;
  D.9340 = D.9338 + j.9;
  D.9321 = (short int) D.9340;
  return D.9321;
}


mono_test_many_byte_arguments (char a, char b, char c, char d, char e, char f, char g, char h, char i, char j)
{
  char D.9342;
  unsigned char a.10;
  unsigned char b.11;
  unsigned char D.9345;
  unsigned char c.12;
  unsigned char D.9347;
  unsigned char d.13;
  unsigned char D.9349;
  unsigned char e.14;
  unsigned char D.9351;
  unsigned char f.15;
  unsigned char D.9353;
  unsigned char g.16;
  unsigned char D.9355;
  unsigned char h.17;
  unsigned char D.9357;
  unsigned char i.18;
  unsigned char D.9359;
  unsigned char j.19;
  unsigned char D.9361;

  a.10 = (unsigned char) a;
  b.11 = (unsigned char) b;
  D.9345 = a.10 + b.11;
  c.12 = (unsigned char) c;
  D.9347 = D.9345 + c.12;
  d.13 = (unsigned char) d;
  D.9349 = D.9347 + d.13;
  e.14 = (unsigned char) e;
  D.9351 = D.9349 + e.14;
  f.15 = (unsigned char) f;
  D.9353 = D.9351 + f.15;
  g.16 = (unsigned char) g;
  D.9355 = D.9353 + g.16;
  h.17 = (unsigned char) h;
  D.9357 = D.9355 + h.17;
  i.18 = (unsigned char) i;
  D.9359 = D.9357 + i.18;
  j.19 = (unsigned char) j;
  D.9361 = D.9359 + j.19;
  D.9342 = (char) D.9361;
  return D.9342;
}


mono_test_many_float_arguments (float a, float b, float c, float d, float e, float f, float g, float h, float i, float j)
{
  float D.9363;
  float D.9364;
  float D.9365;
  float D.9366;
  float D.9367;
  float D.9368;
  float D.9369;
  float D.9370;
  float D.9371;

  D.9364 = a + b;
  D.9365 = D.9364 + c;
  D.9366 = D.9365 + d;
  D.9367 = D.9366 + e;
  D.9368 = D.9367 + f;
  D.9369 = D.9368 + g;
  D.9370 = D.9369 + h;
  D.9371 = D.9370 + i;
  D.9363 = D.9371 + j;
  return D.9363;
}


mono_test_many_double_arguments (double a, double b, double c, double d, double e, double f, double g, double h, double i, double j)
{
  double D.9373;
  double D.9374;
  double D.9375;
  double D.9376;
  double D.9377;
  double D.9378;
  double D.9379;
  double D.9380;
  double D.9381;

  D.9374 = a + b;
  D.9375 = D.9374 + c;
  D.9376 = D.9375 + d;
  D.9377 = D.9376 + e;
  D.9378 = D.9377 + f;
  D.9379 = D.9378 + g;
  D.9380 = D.9379 + h;
  D.9381 = D.9380 + i;
  D.9373 = D.9381 + j;
  return D.9373;
}


mono_test_split_double_arguments (double a, double b, float c, double d, double e)
{
  double D.9383;
  double D.9384;
  double D.9385;
  double D.9386;
  double D.9387;

  D.9384 = a + b;
  D.9385 = (double) c;
  D.9386 = D.9384 + D.9385;
  D.9387 = D.9386 + d;
  D.9383 = D.9387 + e;
  return D.9383;
}


mono_test_puts_static (char * s)
{
  int D.9389;

  D.9389 = 1;
  return D.9389;
}


mono_invoke_delegate (int (*SimpleDelegate3) (int, int) delegate)
{
  int D.9391;
  int res;

  res = delegate (2, 3);
  D.9391 = res;
  return D.9391;
}


mono_invoke_simple_delegate (int (*SimpleDelegate) (int) d)
{
  int D.9393;

  D.9393 = d (4);
  return D.9393;
}


mono_test_marshal_char (short int a1)
{
  int D.9397;

  if (a1 == 97) goto <D.9395>; else goto <D.9396>;
  <D.9395>:
  D.9397 = 0;
  return D.9397;
  <D.9396>:
  D.9397 = 1;
  return D.9397;
}


mono_test_marshal_char_array (gunichar2 * s)
{
  long int len.20;
  long int D.9400;
  long int len.21;
  long unsigned int len.22;
  const char m[7];
  gunichar2 * s2;
  glong len;

  try
    {
      m = "abcdef";
      s2 = monoeg_g_utf8_to_utf16 (&m, -1, 0B, &len, 0B);
      len.20 = len;
      D.9400 = len.20 + 1;
      len.21 = D.9400 * 2;
      len = len.21;
      len.20 = len;
      len.22 = (long unsigned int) len.20;
      memcpy (s, s2, len.22);
      monoeg_g_free (s2);
    }
  finally
    {
      m = {CLOBBER};
      len = {CLOBBER};
    }
}


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

  D.9404 = __builtin_object_size (__dest, 0);
  D.9403 = __builtin___memcpy_chk (__dest, __src, __len, D.9404);
  return D.9403;
}


mono_test_marshal_ansi_char_array (char * s)
{
  int D.9406;
  int D.9409;
  const char m[7];

  try
    {
      m = "abcdef";
      D.9406 = strncmp ("qwer", s, 4);
      if (D.9406 != 0) goto <D.9407>; else goto <D.9408>;
      <D.9407>:
      D.9409 = 1;
      return D.9409;
      <D.9408>:
      memcpy (s, &m, 7);
      D.9409 = 0;
      return D.9409;
    }
  finally
    {
      m = {CLOBBER};
    }
}


mono_test_marshal_unicode_char_array (gunichar2 * s)
{
  long int len1.23;
  long int len1.24;
  long int len2.25;
  long int len2.26;
  long unsigned int len2.27;
  int D.9417;
  int D.9420;
  long unsigned int len1.28;
  const char m[7];
  const char expected[5];
  gunichar2 * s1;
  gunichar2 * s2;
  glong len1;
  glong len2;

  try
    {
      m = "abcdef";
      expected = "qwer";
      s1 = monoeg_g_utf8_to_utf16 (&m, -1, 0B, &len1, 0B);
      s2 = monoeg_g_utf8_to_utf16 (&expected, -1, 0B, &len2, 0B);
      len1.23 = len1;
      len1.24 = len1.23 * 2;
      len1 = len1.24;
      len2.25 = len2;
      len2.26 = len2.25 * 2;
      len2 = len2.26;
      len2.25 = len2;
      len2.27 = (long unsigned int) len2.25;
      D.9417 = memcmp (s, s2, len2.27);
      if (D.9417 != 0) goto <D.9418>; else goto <D.9419>;
      <D.9418>:
      D.9420 = 1;
      return D.9420;
      <D.9419>:
      len1.23 = len1;
      len1.28 = (long unsigned int) len1.23;
      memcpy (s, s1, len1.28);
      D.9420 = 0;
      return D.9420;
    }
  finally
    {
      m = {CLOBBER};
      expected = {CLOBBER};
      len1 = {CLOBBER};
      len2 = {CLOBBER};
    }
}


mono_test_empty_pinvoke (int i)
{
  int D.9424;

  D.9424 = i;
  return D.9424;
}


mono_test_marshal_bool_byref (int a, int * b, int c)
{
  int D.9426;
  int res;

  res = *b;
  *b = 1;
  D.9426 = res;
  return D.9426;
}


mono_test_marshal_bool_in_as_I1_U1 (char bTrue, char bFalse)
{
  int D.9430;

  if (bTrue == 0) goto <D.9428>; else goto <D.9429>;
  <D.9428>:
  D.9430 = 1;
  return D.9430;
  <D.9429>:
  if (bFalse != 0) goto <D.9431>; else goto <D.9432>;
  <D.9431>:
  D.9430 = 2;
  return D.9430;
  <D.9432>:
  D.9430 = 0;
  return D.9430;
}


mono_test_marshal_bool_out_as_I1_U1 (char * bTrue, char * bFalse)
{
  _Bool D.9434;
  _Bool D.9435;
  _Bool D.9436;
  int D.9439;

  D.9434 = bTrue == 0B;
  D.9435 = bFalse == 0B;
  D.9436 = D.9434 | D.9435;
  if (D.9436 != 0) goto <D.9437>; else goto <D.9438>;
  <D.9437>:
  D.9439 = 3;
  return D.9439;
  <D.9438>:
  *bTrue = 1;
  *bFalse = 0;
  D.9439 = 0;
  return D.9439;
}


mono_test_marshal_bool_ref_as_I1_U1 (char * bTrue, char * bFalse)
{
  _Bool D.9441;
  _Bool D.9442;
  _Bool D.9443;
  int D.9446;
  char D.9447;
  char D.9450;

  D.9441 = bTrue == 0B;
  D.9442 = bFalse == 0B;
  D.9443 = D.9441 | D.9442;
  if (D.9443 != 0) goto <D.9444>; else goto <D.9445>;
  <D.9444>:
  D.9446 = 4;
  return D.9446;
  <D.9445>:
  D.9447 = *bTrue;
  if (D.9447 == 0) goto <D.9448>; else goto <D.9449>;
  <D.9448>:
  D.9446 = 5;
  return D.9446;
  <D.9449>:
  D.9450 = *bFalse;
  if (D.9450 != 0) goto <D.9451>; else goto <D.9452>;
  <D.9451>:
  D.9446 = 6;
  return D.9446;
  <D.9452>:
  *bFalse = 1;
  *bTrue = 0;
  D.9446 = 0;
  return D.9446;
}


mono_test_marshal_array (int * a1)
{
  long unsigned int D.9454;
  long unsigned int D.9455;
  int * D.9456;
  int D.9457;
  int D.9458;
  int i;
  int sum;

  sum = 0;
  i = 0;
  goto <D.6940>;
  <D.6939>:
  D.9454 = (long unsigned int) i;
  D.9455 = D.9454 * 4;
  D.9456 = a1 + D.9455;
  D.9457 = *D.9456;
  sum = D.9457 + sum;
  i = i + 1;
  <D.6940>:
  if (i <= 49) goto <D.6939>; else goto <D.6941>;
  <D.6941>:
  D.9458 = sum;
  return D.9458;
}


mono_test_marshal_inout_array (int * a1)
{
  long unsigned int D.9460;
  long unsigned int D.9461;
  int * D.9462;
  int D.9463;
  int D.9464;
  int D.9465;
  int i;
  int sum;

  sum = 0;
  i = 0;
  goto <D.6948>;
  <D.6947>:
  D.9460 = (long unsigned int) i;
  D.9461 = D.9460 * 4;
  D.9462 = a1 + D.9461;
  D.9463 = *D.9462;
  sum = D.9463 + sum;
  D.9460 = (long unsigned int) i;
  D.9461 = D.9460 * 4;
  D.9462 = a1 + D.9461;
  D.9460 = (long unsigned int) i;
  D.9461 = D.9460 * 4;
  D.9462 = a1 + D.9461;
  D.9463 = *D.9462;
  D.9464 = 50 - D.9463;
  *D.9462 = D.9464;
  i = i + 1;
  <D.6948>:
  if (i <= 49) goto <D.6947>; else goto <D.6949>;
  <D.6949>:
  D.9465 = sum;
  return D.9465;
}


mono_test_marshal_inout_array_cdecl (int * a1)
{
  int D.9467;

  D.9467 = mono_test_marshal_inout_array (a1);
  return D.9467;
}


mono_test_marshal_out_array (int * a1)
{
  long unsigned int D.9469;
  long unsigned int D.9470;
  int * D.9471;
  int D.9472;
  int i;

  i = 0;
  goto <D.6958>;
  <D.6957>:
  D.9469 = (long unsigned int) i;
  D.9470 = D.9469 * 4;
  D.9471 = a1 + D.9470;
  *D.9471 = i;
  i = i + 1;
  <D.6958>:
  if (i <= 49) goto <D.6957>; else goto <D.6959>;
  <D.6959>:
  D.9472 = 0;
  return D.9472;
}


mono_test_marshal_inout_nonblittable_array (gunichar2 * a1)
{
  long unsigned int D.9474;
  long unsigned int D.9475;
  gunichar2 * D.9476;
  int D.9477;
  int i;
  int sum;

  sum = 0;
  i = 0;
  goto <D.6966>;
  <D.6965>:
  D.9474 = (long unsigned int) i;
  D.9475 = D.9474 * 2;
  D.9476 = a1 + D.9475;
  *D.9476 = 70;
  i = i + 1;
  <D.6966>:
  if (i <= 9) goto <D.6965>; else goto <D.6967>;
  <D.6967>:
  D.9477 = sum;
  return D.9477;
}


mono_test_return_vtype (int i)
{
  struct simplestruct res;
  static gunichar2 test2[6] = {84, 69, 83, 84, 50, 0};

  try
    {
      res.a = 0;
      res.b = 1;
      res.c = 0;
      res.d = "TEST";
      res.d2 = &test2;
      <retval> = res;
      return <retval>;
    }
  finally
    {
      res = {CLOBBER};
    }
}


mono_test_delegate_struct ()
{

}


mono_test_return_string (char * (*ReturnStringDelegate) (const char *) func)
{
  char * D.9482;
  char * res;

  res = func ("TEST");
  marshal_free (res);
  D.9482 = marshal_strdup ("12345");
  return D.9482;
}


marshal_free (void * ptr)
{
  monoeg_g_free (ptr);
}


marshal_strdup (const char * str)
{
  char * D.9484;

  D.9484 = monoeg_strdup (str);
  return D.9484;
}


monoeg_strdup (const gchar * str)
{
  gchar * D.9488;

  if (str != 0B) goto <D.9486>; else goto <D.9487>;
  <D.9486>:
  D.9488 = __strdup (str);
  return D.9488;
  <D.9487>:
  D.9488 = 0B;
  return D.9488;
}


mono_test_ref_vtype (int a, struct simplestruct * ss, int b, int (*RefVTypeDelegate) (int, struct simplestruct *, int) func)
{
  _Bool D.9490;
  _Bool D.9491;
  _Bool D.9492;
  signed long D.9495;
  long unsigned int D.9496;
  long unsigned int D.9497;
  int D.9500;
  int D.7011;
  int iftmp.29;
  int D.7010;
  const char[6] * D.9506;
  unsigned char D.9507;
  int D.9508;
  unsigned char D.9509;
  int D.9510;
  _Bool D.9511;
  _Bool D.9512;
  _Bool D.9513;
  const unsigned char * D.9516;
  unsigned char D.9517;
  int D.9518;
  const unsigned char * D.9519;
  unsigned char D.9520;
  int D.9521;
  _Bool D.9522;
  _Bool D.9523;
  const unsigned char * D.9526;
  unsigned char D.9527;
  int D.9528;
  const unsigned char * D.9529;
  unsigned char D.9530;
  int D.9531;
  _Bool D.9532;
  _Bool D.9533;
  const unsigned char * D.9536;
  unsigned char D.9537;
  int D.9538;
  const unsigned char * D.9539;
  unsigned char D.9540;
  int D.9541;
  const char * D.9543;
  int D.9546;

  D.9490 = a == 1;
  D.9491 = b == 2;
  D.9492 = D.9490 & D.9491;
  if (D.9492 != 0) goto <D.9493>; else goto <D.9494>;
  <D.9493>:
  D.9495 = BIT_FIELD_REF <*ss, 64, 0>;
  D.9496 = (long unsigned int) D.9495;
  D.9497 = D.9496;
  if (D.9497 == 4294967296) goto <D.9498>; else goto <D.9499>;
  <D.9498>:
  D.9500 = ss->c;
  if (D.9500 == 0) goto <D.9501>; else goto <D.9502>;
  <D.9501>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 5;
    if (__s2_len <= 3) goto <D.9504>; else goto <D.9505>;
    <D.9504>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = ss->d;
      D.9506 = "TEST1";
      D.9507 = MEM[(const unsigned char *)D.9506];
      D.9508 = (int) D.9507;
      D.9509 = *__s2;
      D.9510 = (int) D.9509;
      __result = D.9508 - D.9510;
      {
        D.9511 = __s2_len != 0;
        D.9512 = __result == 0;
        D.9513 = D.9511 & D.9512;
        if (D.9513 != 0) goto <D.9514>; else goto <D.9515>;
        <D.9514>:
        D.9516 = &MEM[(void *)"TEST1" + 1B];
        D.9517 = *D.9516;
        D.9518 = (int) D.9517;
        D.9519 = __s2 + 1;
        D.9520 = *D.9519;
        D.9521 = (int) D.9520;
        __result = D.9518 - D.9521;
        D.9522 = __s2_len > 1;
        D.9512 = __result == 0;
        D.9523 = D.9522 & D.9512;
        if (D.9523 != 0) goto <D.9524>; else goto <D.9525>;
        <D.9524>:
        D.9526 = &MEM[(void *)"TEST1" + 2B];
        D.9527 = *D.9526;
        D.9528 = (int) D.9527;
        D.9529 = __s2 + 2;
        D.9530 = *D.9529;
        D.9531 = (int) D.9530;
        __result = D.9528 - D.9531;
        D.9532 = __s2_len > 2;
        D.9512 = __result == 0;
        D.9533 = D.9532 & D.9512;
        if (D.9533 != 0) goto <D.9534>; else goto <D.9535>;
        <D.9534>:
        D.9536 = &MEM[(void *)"TEST1" + 3B];
        D.9537 = *D.9536;
        D.9538 = (int) D.9537;
        D.9539 = __s2 + 3;
        D.9540 = *D.9539;
        D.9541 = (int) D.9540;
        __result = D.9538 - D.9541;
        <D.9535>:
        <D.9525>:
        <D.9515>:
      }
      D.7010 = __result;
    }
    iftmp.29 = -D.7010;
    goto <D.9542>;
    <D.9505>:
    D.9543 = ss->d;
    iftmp.29 = __builtin_strcmp (D.9543, "TEST1");
    <D.9542>:
    D.7011 = iftmp.29;
  }
  if (D.7011 == 0) goto <D.9544>; else goto <D.9545>;
  <D.9544>:
  ss->a = 1;
  ss->b = 0;
  ss->c = 1;
  ss->d = "TEST2";
  D.9546 = func (a, ss, b);
  return D.9546;
  <D.9545>:
  <D.9502>:
  <D.9499>:
  <D.9494>:
  D.9546 = 1;
  return D.9546;
}


mono_test_marshal_out_struct (int a, struct simplestruct * ss, int b, int (*OutVTypeDelegate) (int, struct simplestruct *, int) func)
{
  int D.9549;
  int D.9551;
  int D.9553;
  int D.7030;
  int iftmp.30;
  int D.7029;
  const char[6] * D.9558;
  unsigned char D.9559;
  int D.9560;
  unsigned char D.9561;
  int D.9562;
  _Bool D.9563;
  _Bool D.9564;
  _Bool D.9565;
  const unsigned char * D.9568;
  unsigned char D.9569;
  int D.9570;
  const unsigned char * D.9571;
  unsigned char D.9572;
  int D.9573;
  _Bool D.9574;
  _Bool D.9575;
  const unsigned char * D.9578;
  unsigned char D.9579;
  int D.9580;
  const unsigned char * D.9581;
  unsigned char D.9582;
  int D.9583;
  _Bool D.9584;
  _Bool D.9585;
  const unsigned char * D.9588;
  unsigned char D.9589;
  int D.9590;
  const unsigned char * D.9591;
  unsigned char D.9592;
  int D.9593;
  const char * D.9595;
  int D.9597;

  ss->d = 305419896B;
  func (a, ss, b);
  D.9549 = ss->a;
  if (D.9549 != 0) goto <D.9550>; else goto <D.9548>;
  <D.9550>:
  D.9551 = ss->b;
  if (D.9551 != 0) goto <D.9552>; else goto <D.9548>;
  <D.9552>:
  D.9553 = ss->c;
  if (D.9553 != 0) goto <D.9554>; else goto <D.9548>;
  <D.9554>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 5;
    if (__s2_len <= 3) goto <D.9556>; else goto <D.9557>;
    <D.9556>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = ss->d;
      D.9558 = "TEST3";
      D.9559 = MEM[(const unsigned char *)D.9558];
      D.9560 = (int) D.9559;
      D.9561 = *__s2;
      D.9562 = (int) D.9561;
      __result = D.9560 - D.9562;
      {
        D.9563 = __s2_len != 0;
        D.9564 = __result == 0;
        D.9565 = D.9563 & D.9564;
        if (D.9565 != 0) goto <D.9566>; else goto <D.9567>;
        <D.9566>:
        D.9568 = &MEM[(void *)"TEST3" + 1B];
        D.9569 = *D.9568;
        D.9570 = (int) D.9569;
        D.9571 = __s2 + 1;
        D.9572 = *D.9571;
        D.9573 = (int) D.9572;
        __result = D.9570 - D.9573;
        D.9574 = __s2_len > 1;
        D.9564 = __result == 0;
        D.9575 = D.9574 & D.9564;
        if (D.9575 != 0) goto <D.9576>; else goto <D.9577>;
        <D.9576>:
        D.9578 = &MEM[(void *)"TEST3" + 2B];
        D.9579 = *D.9578;
        D.9580 = (int) D.9579;
        D.9581 = __s2 + 2;
        D.9582 = *D.9581;
        D.9583 = (int) D.9582;
        __result = D.9580 - D.9583;
        D.9584 = __s2_len > 2;
        D.9564 = __result == 0;
        D.9585 = D.9584 & D.9564;
        if (D.9585 != 0) goto <D.9586>; else goto <D.9587>;
        <D.9586>:
        D.9588 = &MEM[(void *)"TEST3" + 3B];
        D.9589 = *D.9588;
        D.9590 = (int) D.9589;
        D.9591 = __s2 + 3;
        D.9592 = *D.9591;
        D.9593 = (int) D.9592;
        __result = D.9590 - D.9593;
        <D.9587>:
        <D.9577>:
        <D.9567>:
      }
      D.7029 = __result;
    }
    iftmp.30 = -D.7029;
    goto <D.9594>;
    <D.9557>:
    D.9595 = ss->d;
    iftmp.30 = __builtin_strcmp (D.9595, "TEST3");
    <D.9594>:
    D.7030 = iftmp.30;
  }
  if (D.7030 == 0) goto <D.9596>; else goto <D.9548>;
  <D.9596>:
  D.9597 = 0;
  return D.9597;
  <D.9548>:
  D.9597 = 1;
  return D.9597;
}


mono_test_marshal_in_struct (int a, struct simplestruct * ss, int b, int (*InVTypeDelegate) (int, struct simplestruct *, int) func)
{
  int D.9601;
  signed long D.9603;
  long unsigned int D.9604;
  long unsigned int D.9605;
  signed long D.9606;
  long unsigned int D.9607;
  long unsigned int D.9608;
  int D.9610;
  int D.9611;
  const char * D.9613;
  const char * D.9614;
  struct simplestruct ss2;
  int res;

  try
    {
      memcpy (&ss2, ss, 32);
      res = func (a, ss, b);
      if (res != 0) goto <D.9599>; else goto <D.9600>;
      <D.9599>:
      printf ("mono_test_marshal_in_struct () failed: %d\n", res);
      D.9601 = 1;
      return D.9601;
      <D.9600>:
      D.9603 = BIT_FIELD_REF <ss2, 64, 0>;
      D.9604 = (long unsigned int) D.9603;
      D.9605 = D.9604;
      D.9606 = BIT_FIELD_REF <*ss, 64, 0>;
      D.9607 = (long unsigned int) D.9606;
      D.9608 = D.9607;
      if (D.9605 == D.9608) goto <D.9609>; else goto <D.9602>;
      <D.9609>:
      D.9610 = ss2.c;
      D.9611 = ss->c;
      if (D.9610 == D.9611) goto <D.9612>; else goto <D.9602>;
      <D.9612>:
      D.9613 = ss2.d;
      D.9614 = ss->d;
      if (D.9613 == D.9614) goto <D.9615>; else goto <D.9602>;
      <D.9615>:
      D.9601 = 0;
      return D.9601;
      <D.9602>:
      D.9601 = 1;
      return D.9601;
    }
  finally
    {
      ss2 = {CLOBBER};
    }
}


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

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


mono_test_marshal_delegate_struct (struct DelegateStruct ds)
{
  int (*<T12e3>) (int) D.9621;
  int D.9622;
  int D.9623;
  int (*<T12e3>) (int) D.9624;
  int D.9625;
  int D.9626;
  int (*<T12e3>) (int) D.9627;
  _Bool D.9628;
  int D.9629;
  int D.9630;
  struct DelegateStruct res;

  try
    {
      D.9621 = ds.func;
      D.9622 = ds.a;
      D.9623 = D.9621 (D.9622);
      D.9624 = ds.func2;
      D.9622 = ds.a;
      D.9625 = D.9624 (D.9622);
      D.9626 = D.9623 + D.9625;
      D.9627 = ds.func3;
      D.9628 = D.9627 != 0B;
      D.9629 = (int) D.9628;
      D.9630 = D.9626 + D.9629;
      res.a = D.9630;
      D.9621 = ds.func;
      res.func = D.9621;
      D.9624 = ds.func2;
      res.func2 = D.9624;
      res.func3 = 0B;
      <retval> = res;
      return <retval>;
    }
  finally
    {
      res = {CLOBBER};
    }
}


mono_test_marshal_struct (struct simplestruct ss)
{
  signed long D.9633;
  long unsigned int D.9634;
  long unsigned int D.9635;
  int D.9638;
  int D.7064;
  int iftmp.31;
  int D.7063;
  const char[5] * D.9644;
  unsigned char D.9645;
  int D.9646;
  unsigned char D.9647;
  int D.9648;
  _Bool D.9649;
  _Bool D.9650;
  _Bool D.9651;
  const unsigned char * D.9654;
  unsigned char D.9655;
  int D.9656;
  const unsigned char * D.9657;
  unsigned char D.9658;
  int D.9659;
  _Bool D.9660;
  _Bool D.9661;
  const unsigned char * D.9664;
  unsigned char D.9665;
  int D.9666;
  const unsigned char * D.9667;
  unsigned char D.9668;
  int D.9669;
  _Bool D.9670;
  _Bool D.9671;
  const unsigned char * D.9674;
  unsigned char D.9675;
  int D.9676;
  const unsigned char * D.9677;
  unsigned char D.9678;
  int D.9679;
  const char * D.9681;
  int D.9684;

  D.9633 = BIT_FIELD_REF <ss, 64, 0>;
  D.9634 = (long unsigned int) D.9633;
  D.9635 = D.9634;
  if (D.9635 == 4294967296) goto <D.9636>; else goto <D.9637>;
  <D.9636>:
  D.9638 = ss.c;
  if (D.9638 == 0) goto <D.9639>; else goto <D.9640>;
  <D.9639>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.9642>; else goto <D.9643>;
    <D.9642>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = ss.d;
      D.9644 = "TEST";
      D.9645 = MEM[(const unsigned char *)D.9644];
      D.9646 = (int) D.9645;
      D.9647 = *__s2;
      D.9648 = (int) D.9647;
      __result = D.9646 - D.9648;
      {
        D.9649 = __s2_len != 0;
        D.9650 = __result == 0;
        D.9651 = D.9649 & D.9650;
        if (D.9651 != 0) goto <D.9652>; else goto <D.9653>;
        <D.9652>:
        D.9654 = &MEM[(void *)"TEST" + 1B];
        D.9655 = *D.9654;
        D.9656 = (int) D.9655;
        D.9657 = __s2 + 1;
        D.9658 = *D.9657;
        D.9659 = (int) D.9658;
        __result = D.9656 - D.9659;
        D.9660 = __s2_len > 1;
        D.9650 = __result == 0;
        D.9661 = D.9660 & D.9650;
        if (D.9661 != 0) goto <D.9662>; else goto <D.9663>;
        <D.9662>:
        D.9664 = &MEM[(void *)"TEST" + 2B];
        D.9665 = *D.9664;
        D.9666 = (int) D.9665;
        D.9667 = __s2 + 2;
        D.9668 = *D.9667;
        D.9669 = (int) D.9668;
        __result = D.9666 - D.9669;
        D.9670 = __s2_len > 2;
        D.9650 = __result == 0;
        D.9671 = D.9670 & D.9650;
        if (D.9671 != 0) goto <D.9672>; else goto <D.9673>;
        <D.9672>:
        D.9674 = &MEM[(void *)"TEST" + 3B];
        D.9675 = *D.9674;
        D.9676 = (int) D.9675;
        D.9677 = __s2 + 3;
        D.9678 = *D.9677;
        D.9679 = (int) D.9678;
        __result = D.9676 - D.9679;
        <D.9673>:
        <D.9663>:
        <D.9653>:
      }
      D.7063 = __result;
    }
    iftmp.31 = -D.7063;
    goto <D.9680>;
    <D.9643>:
    D.9681 = ss.d;
    iftmp.31 = __builtin_strcmp (D.9681, "TEST");
    <D.9680>:
    D.7064 = iftmp.31;
  }
  if (D.7064 == 0) goto <D.9682>; else goto <D.9683>;
  <D.9682>:
  D.9684 = 0;
  return D.9684;
  <D.9683>:
  <D.9640>:
  <D.9637>:
  D.9684 = 1;
  return D.9684;
}


mono_test_marshal_byref_struct (struct simplestruct * ss, int a, int b, int c, char * d)
{
  int iftmp.32;
  int D.9689;
  int D.9691;
  int D.9693;
  int D.7081;
  const char * D.9695;
  _Bool D.9697;
  int D.9698;
  _Bool D.9699;
  int D.9700;
  _Bool D.9701;
  int D.9702;
  char * D.9703;
  int D.9704;
  _Bool D.9705;
  gboolean res;

  D.9689 = ss->a;
  if (D.9689 == a) goto <D.9690>; else goto <D.9687>;
  <D.9690>:
  D.9691 = ss->b;
  if (D.9691 == b) goto <D.9692>; else goto <D.9687>;
  <D.9692>:
  D.9693 = ss->c;
  if (D.9693 == c) goto <D.9694>; else goto <D.9687>;
  <D.9694>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.9695 = ss->d;
    D.7081 = __builtin_strcmp (D.9695, d);
  }
  if (D.7081 == 0) goto <D.9696>; else goto <D.9687>;
  <D.9696>:
  iftmp.32 = 1;
  goto <D.9688>;
  <D.9687>:
  iftmp.32 = 0;
  <D.9688>:
  res = iftmp.32;
  D.9695 = ss->d;
  marshal_free (D.9695);
  D.9689 = ss->a;
  D.9697 = D.9689 == 0;
  D.9698 = (int) D.9697;
  ss->a = D.9698;
  D.9691 = ss->b;
  D.9699 = D.9691 == 0;
  D.9700 = (int) D.9699;
  ss->b = D.9700;
  D.9693 = ss->c;
  D.9701 = D.9693 == 0;
  D.9702 = (int) D.9701;
  ss->c = D.9702;
  D.9703 = marshal_strdup ("DEF");
  ss->d = D.9703;
  D.9705 = res == 0;
  D.9704 = (int) D.9705;
  return D.9704;
}


mono_test_marshal_struct2 (struct simplestruct2 ss)
{
  signed long D.9707;
  long unsigned int D.9708;
  long unsigned int D.9709;
  int D.9712;
  int D.7103;
  int iftmp.33;
  int D.7102;
  const char[5] * D.9718;
  unsigned char D.9719;
  int D.9720;
  unsigned char D.9721;
  int D.9722;
  _Bool D.9723;
  _Bool D.9724;
  _Bool D.9725;
  const unsigned char * D.9728;
  unsigned char D.9729;
  int D.9730;
  const unsigned char * D.9731;
  unsigned char D.9732;
  int D.9733;
  _Bool D.9734;
  _Bool D.9735;
  const unsigned char * D.9738;
  unsigned char D.9739;
  int D.9740;
  const unsigned char * D.9741;
  unsigned char D.9742;
  int D.9743;
  _Bool D.9744;
  _Bool D.9745;
  const unsigned char * D.9748;
  unsigned char D.9749;
  int D.9750;
  const unsigned char * D.9751;
  unsigned char D.9752;
  int D.9753;
  char * D.9755;
  unsigned char D.9758;
  double D.9761;
  unsigned char D.9764;
  long unsigned int D.9767;
  int D.9770;

  D.9707 = BIT_FIELD_REF <ss, 64, 0>;
  D.9708 = (long unsigned int) D.9707;
  D.9709 = D.9708;
  if (D.9709 == 4294967296) goto <D.9710>; else goto <D.9711>;
  <D.9710>:
  D.9712 = ss.c;
  if (D.9712 == 0) goto <D.9713>; else goto <D.9714>;
  <D.9713>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.9716>; else goto <D.9717>;
    <D.9716>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = ss.d;
      D.9718 = "TEST";
      D.9719 = MEM[(const unsigned char *)D.9718];
      D.9720 = (int) D.9719;
      D.9721 = *__s2;
      D.9722 = (int) D.9721;
      __result = D.9720 - D.9722;
      {
        D.9723 = __s2_len != 0;
        D.9724 = __result == 0;
        D.9725 = D.9723 & D.9724;
        if (D.9725 != 0) goto <D.9726>; else goto <D.9727>;
        <D.9726>:
        D.9728 = &MEM[(void *)"TEST" + 1B];
        D.9729 = *D.9728;
        D.9730 = (int) D.9729;
        D.9731 = __s2 + 1;
        D.9732 = *D.9731;
        D.9733 = (int) D.9732;
        __result = D.9730 - D.9733;
        D.9734 = __s2_len > 1;
        D.9724 = __result == 0;
        D.9735 = D.9734 & D.9724;
        if (D.9735 != 0) goto <D.9736>; else goto <D.9737>;
        <D.9736>:
        D.9738 = &MEM[(void *)"TEST" + 2B];
        D.9739 = *D.9738;
        D.9740 = (int) D.9739;
        D.9741 = __s2 + 2;
        D.9742 = *D.9741;
        D.9743 = (int) D.9742;
        __result = D.9740 - D.9743;
        D.9744 = __s2_len > 2;
        D.9724 = __result == 0;
        D.9745 = D.9744 & D.9724;
        if (D.9745 != 0) goto <D.9746>; else goto <D.9747>;
        <D.9746>:
        D.9748 = &MEM[(void *)"TEST" + 3B];
        D.9749 = *D.9748;
        D.9750 = (int) D.9749;
        D.9751 = __s2 + 3;
        D.9752 = *D.9751;
        D.9753 = (int) D.9752;
        __result = D.9750 - D.9753;
        <D.9747>:
        <D.9737>:
        <D.9727>:
      }
      D.7102 = __result;
    }
    iftmp.33 = -D.7102;
    goto <D.9754>;
    <D.9717>:
    D.9755 = ss.d;
    iftmp.33 = __builtin_strcmp (D.9755, "TEST");
    <D.9754>:
    D.7103 = iftmp.33;
  }
  if (D.7103 == 0) goto <D.9756>; else goto <D.9757>;
  <D.9756>:
  D.9758 = ss.e;
  if (D.9758 == 99) goto <D.9759>; else goto <D.9760>;
  <D.9759>:
  D.9761 = ss.f;
  if (D.9761 == 1.5e+0) goto <D.9762>; else goto <D.9763>;
  <D.9762>:
  D.9764 = ss.g;
  if (D.9764 == 42) goto <D.9765>; else goto <D.9766>;
  <D.9765>:
  D.9767 = ss.h;
  if (D.9767 == 123) goto <D.9768>; else goto <D.9769>;
  <D.9768>:
  D.9770 = 0;
  return D.9770;
  <D.9769>:
  <D.9766>:
  <D.9763>:
  <D.9760>:
  <D.9757>:
  <D.9714>:
  <D.9711>:
  D.9770 = 1;
  return D.9770;
}


mono_test_marshal_struct2_2 (int i, int j, int k, struct simplestruct2 ss)
{
  _Bool D.9774;
  _Bool D.9775;
  _Bool D.9776;
  int D.9778;
  signed long D.9779;
  long unsigned int D.9780;
  long unsigned int D.9781;
  int D.9784;
  int D.7118;
  int iftmp.34;
  int D.7117;
  const char[5] * D.9790;
  unsigned char D.9791;
  int D.9792;
  unsigned char D.9793;
  int D.9794;
  _Bool D.9795;
  _Bool D.9796;
  _Bool D.9797;
  const unsigned char * D.9800;
  unsigned char D.9801;
  int D.9802;
  const unsigned char * D.9803;
  unsigned char D.9804;
  int D.9805;
  _Bool D.9806;
  _Bool D.9807;
  const unsigned char * D.9810;
  unsigned char D.9811;
  int D.9812;
  const unsigned char * D.9813;
  unsigned char D.9814;
  int D.9815;
  _Bool D.9816;
  _Bool D.9817;
  const unsigned char * D.9820;
  unsigned char D.9821;
  int D.9822;
  const unsigned char * D.9823;
  unsigned char D.9824;
  int D.9825;
  char * D.9827;
  unsigned char D.9830;
  double D.9833;
  unsigned char D.9836;
  long unsigned int D.9839;

  D.9774 = i != 10;
  D.9775 = j != 11;
  D.9776 = D.9774 | D.9775;
  if (D.9776 != 0) goto <D.9772>; else goto <D.9777>;
  <D.9777>:
  if (k != 12) goto <D.9772>; else goto <D.9773>;
  <D.9772>:
  D.9778 = 1;
  return D.9778;
  <D.9773>:
  D.9779 = BIT_FIELD_REF <ss, 64, 0>;
  D.9780 = (long unsigned int) D.9779;
  D.9781 = D.9780;
  if (D.9781 == 4294967296) goto <D.9782>; else goto <D.9783>;
  <D.9782>:
  D.9784 = ss.c;
  if (D.9784 == 0) goto <D.9785>; else goto <D.9786>;
  <D.9785>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.9788>; else goto <D.9789>;
    <D.9788>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = ss.d;
      D.9790 = "TEST";
      D.9791 = MEM[(const unsigned char *)D.9790];
      D.9792 = (int) D.9791;
      D.9793 = *__s2;
      D.9794 = (int) D.9793;
      __result = D.9792 - D.9794;
      {
        D.9795 = __s2_len != 0;
        D.9796 = __result == 0;
        D.9797 = D.9795 & D.9796;
        if (D.9797 != 0) goto <D.9798>; else goto <D.9799>;
        <D.9798>:
        D.9800 = &MEM[(void *)"TEST" + 1B];
        D.9801 = *D.9800;
        D.9802 = (int) D.9801;
        D.9803 = __s2 + 1;
        D.9804 = *D.9803;
        D.9805 = (int) D.9804;
        __result = D.9802 - D.9805;
        D.9806 = __s2_len > 1;
        D.9796 = __result == 0;
        D.9807 = D.9806 & D.9796;
        if (D.9807 != 0) goto <D.9808>; else goto <D.9809>;
        <D.9808>:
        D.9810 = &MEM[(void *)"TEST" + 2B];
        D.9811 = *D.9810;
        D.9812 = (int) D.9811;
        D.9813 = __s2 + 2;
        D.9814 = *D.9813;
        D.9815 = (int) D.9814;
        __result = D.9812 - D.9815;
        D.9816 = __s2_len > 2;
        D.9796 = __result == 0;
        D.9817 = D.9816 & D.9796;
        if (D.9817 != 0) goto <D.9818>; else goto <D.9819>;
        <D.9818>:
        D.9820 = &MEM[(void *)"TEST" + 3B];
        D.9821 = *D.9820;
        D.9822 = (int) D.9821;
        D.9823 = __s2 + 3;
        D.9824 = *D.9823;
        D.9825 = (int) D.9824;
        __result = D.9822 - D.9825;
        <D.9819>:
        <D.9809>:
        <D.9799>:
      }
      D.7117 = __result;
    }
    iftmp.34 = -D.7117;
    goto <D.9826>;
    <D.9789>:
    D.9827 = ss.d;
    iftmp.34 = __builtin_strcmp (D.9827, "TEST");
    <D.9826>:
    D.7118 = iftmp.34;
  }
  if (D.7118 == 0) goto <D.9828>; else goto <D.9829>;
  <D.9828>:
  D.9830 = ss.e;
  if (D.9830 == 99) goto <D.9831>; else goto <D.9832>;
  <D.9831>:
  D.9833 = ss.f;
  if (D.9833 == 1.5e+0) goto <D.9834>; else goto <D.9835>;
  <D.9834>:
  D.9836 = ss.g;
  if (D.9836 == 42) goto <D.9837>; else goto <D.9838>;
  <D.9837>:
  D.9839 = ss.h;
  if (D.9839 == 123) goto <D.9840>; else goto <D.9841>;
  <D.9840>:
  D.9778 = 0;
  return D.9778;
  <D.9841>:
  <D.9838>:
  <D.9835>:
  <D.9832>:
  <D.9829>:
  <D.9786>:
  <D.9783>:
  D.9778 = 1;
  return D.9778;
}


mono_test_marshal_lpstruct (struct simplestruct * ss)
{
  signed long D.9843;
  long unsigned int D.9844;
  long unsigned int D.9845;
  int D.9848;
  int D.7130;
  int iftmp.35;
  int D.7129;
  const char[5] * D.9854;
  unsigned char D.9855;
  int D.9856;
  unsigned char D.9857;
  int D.9858;
  _Bool D.9859;
  _Bool D.9860;
  _Bool D.9861;
  const unsigned char * D.9864;
  unsigned char D.9865;
  int D.9866;
  const unsigned char * D.9867;
  unsigned char D.9868;
  int D.9869;
  _Bool D.9870;
  _Bool D.9871;
  const unsigned char * D.9874;
  unsigned char D.9875;
  int D.9876;
  const unsigned char * D.9877;
  unsigned char D.9878;
  int D.9879;
  _Bool D.9880;
  _Bool D.9881;
  const unsigned char * D.9884;
  unsigned char D.9885;
  int D.9886;
  const unsigned char * D.9887;
  unsigned char D.9888;
  int D.9889;
  const char * D.9891;
  int D.9894;

  D.9843 = BIT_FIELD_REF <*ss, 64, 0>;
  D.9844 = (long unsigned int) D.9843;
  D.9845 = D.9844;
  if (D.9845 == 4294967296) goto <D.9846>; else goto <D.9847>;
  <D.9846>:
  D.9848 = ss->c;
  if (D.9848 == 0) goto <D.9849>; else goto <D.9850>;
  <D.9849>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.9852>; else goto <D.9853>;
    <D.9852>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = ss->d;
      D.9854 = "TEST";
      D.9855 = MEM[(const unsigned char *)D.9854];
      D.9856 = (int) D.9855;
      D.9857 = *__s2;
      D.9858 = (int) D.9857;
      __result = D.9856 - D.9858;
      {
        D.9859 = __s2_len != 0;
        D.9860 = __result == 0;
        D.9861 = D.9859 & D.9860;
        if (D.9861 != 0) goto <D.9862>; else goto <D.9863>;
        <D.9862>:
        D.9864 = &MEM[(void *)"TEST" + 1B];
        D.9865 = *D.9864;
        D.9866 = (int) D.9865;
        D.9867 = __s2 + 1;
        D.9868 = *D.9867;
        D.9869 = (int) D.9868;
        __result = D.9866 - D.9869;
        D.9870 = __s2_len > 1;
        D.9860 = __result == 0;
        D.9871 = D.9870 & D.9860;
        if (D.9871 != 0) goto <D.9872>; else goto <D.9873>;
        <D.9872>:
        D.9874 = &MEM[(void *)"TEST" + 2B];
        D.9875 = *D.9874;
        D.9876 = (int) D.9875;
        D.9877 = __s2 + 2;
        D.9878 = *D.9877;
        D.9879 = (int) D.9878;
        __result = D.9876 - D.9879;
        D.9880 = __s2_len > 2;
        D.9860 = __result == 0;
        D.9881 = D.9880 & D.9860;
        if (D.9881 != 0) goto <D.9882>; else goto <D.9883>;
        <D.9882>:
        D.9884 = &MEM[(void *)"TEST" + 3B];
        D.9885 = *D.9884;
        D.9886 = (int) D.9885;
        D.9887 = __s2 + 3;
        D.9888 = *D.9887;
        D.9889 = (int) D.9888;
        __result = D.9886 - D.9889;
        <D.9883>:
        <D.9873>:
        <D.9863>:
      }
      D.7129 = __result;
    }
    iftmp.35 = -D.7129;
    goto <D.9890>;
    <D.9853>:
    D.9891 = ss->d;
    iftmp.35 = __builtin_strcmp (D.9891, "TEST");
    <D.9890>:
    D.7130 = iftmp.35;
  }
  if (D.7130 == 0) goto <D.9892>; else goto <D.9893>;
  <D.9892>:
  D.9894 = 0;
  return D.9894;
  <D.9893>:
  <D.9850>:
  <D.9847>:
  D.9894 = 1;
  return D.9894;
}


mono_test_marshal_lpstruct_blittable (struct point * p)
{
  double D.9897;
  double D.9899;
  int D.9901;

  D.9897 = p->x;
  if (D.9897 == 1.0e+0) goto <D.9898>; else goto <D.9896>;
  <D.9898>:
  D.9899 = p->y;
  if (D.9899 == 2.0e+0) goto <D.9900>; else goto <D.9896>;
  <D.9900>:
  D.9901 = 0;
  return D.9901;
  <D.9896>:
  D.9901 = 1;
  return D.9901;
}


mono_test_marshal_struct_array (struct simplestruct2 * ss)
{
  signed long D.9905;
  long unsigned int D.9906;
  long unsigned int D.9907;
  int D.9909;
  int D.7145;
  int iftmp.36;
  int D.7144;
  const char[5] * D.9914;
  unsigned char D.9915;
  int D.9916;
  unsigned char D.9917;
  int D.9918;
  _Bool D.9919;
  _Bool D.9920;
  _Bool D.9921;
  const unsigned char * D.9924;
  unsigned char D.9925;
  int D.9926;
  const unsigned char * D.9927;
  unsigned char D.9928;
  int D.9929;
  _Bool D.9930;
  _Bool D.9931;
  const unsigned char * D.9934;
  unsigned char D.9935;
  int D.9936;
  const unsigned char * D.9937;
  unsigned char D.9938;
  int D.9939;
  _Bool D.9940;
  _Bool D.9941;
  const unsigned char * D.9944;
  unsigned char D.9945;
  int D.9946;
  const unsigned char * D.9947;
  unsigned char D.9948;
  int D.9949;
  char * D.9951;
  unsigned char D.9953;
  double D.9955;
  unsigned char D.9957;
  long unsigned int D.9959;
  int D.9960;
  struct simplestruct2 * D.9963;
  signed long D.9964;
  long unsigned int D.9965;
  long unsigned int D.9966;
  int D.9968;
  int D.7154;
  int iftmp.37;
  int D.7153;
  const char[6] * D.9973;
  unsigned char D.9974;
  int D.9975;
  unsigned char D.9976;
  int D.9977;
  _Bool D.9978;
  _Bool D.9979;
  _Bool D.9980;
  const unsigned char * D.9983;
  unsigned char D.9984;
  int D.9985;
  const unsigned char * D.9986;
  unsigned char D.9987;
  int D.9988;
  _Bool D.9989;
  _Bool D.9990;
  const unsigned char * D.9993;
  unsigned char D.9994;
  int D.9995;
  const unsigned char * D.9996;
  unsigned char D.9997;
  int D.9998;
  _Bool D.9999;
  _Bool D.10000;
  const unsigned char * D.10003;
  unsigned char D.10004;
  int D.10005;
  const unsigned char * D.10006;
  unsigned char D.10007;
  int D.10008;
  char * D.10010;
  unsigned char D.10012;
  double D.10014;
  unsigned char D.10016;
  long unsigned int D.10018;

  D.9905 = BIT_FIELD_REF <*ss, 64, 0>;
  D.9906 = (long unsigned int) D.9905;
  D.9907 = D.9906;
  if (D.9907 != 4294967296) goto <D.9903>; else goto <D.9908>;
  <D.9908>:
  D.9909 = ss->c;
  if (D.9909 != 0) goto <D.9903>; else goto <D.9910>;
  <D.9910>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.9912>; else goto <D.9913>;
    <D.9912>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = ss->d;
      D.9914 = "TEST";
      D.9915 = MEM[(const unsigned char *)D.9914];
      D.9916 = (int) D.9915;
      D.9917 = *__s2;
      D.9918 = (int) D.9917;
      __result = D.9916 - D.9918;
      {
        D.9919 = __s2_len != 0;
        D.9920 = __result == 0;
        D.9921 = D.9919 & D.9920;
        if (D.9921 != 0) goto <D.9922>; else goto <D.9923>;
        <D.9922>:
        D.9924 = &MEM[(void *)"TEST" + 1B];
        D.9925 = *D.9924;
        D.9926 = (int) D.9925;
        D.9927 = __s2 + 1;
        D.9928 = *D.9927;
        D.9929 = (int) D.9928;
        __result = D.9926 - D.9929;
        D.9930 = __s2_len > 1;
        D.9920 = __result == 0;
        D.9931 = D.9930 & D.9920;
        if (D.9931 != 0) goto <D.9932>; else goto <D.9933>;
        <D.9932>:
        D.9934 = &MEM[(void *)"TEST" + 2B];
        D.9935 = *D.9934;
        D.9936 = (int) D.9935;
        D.9937 = __s2 + 2;
        D.9938 = *D.9937;
        D.9939 = (int) D.9938;
        __result = D.9936 - D.9939;
        D.9940 = __s2_len > 2;
        D.9920 = __result == 0;
        D.9941 = D.9940 & D.9920;
        if (D.9941 != 0) goto <D.9942>; else goto <D.9943>;
        <D.9942>:
        D.9944 = &MEM[(void *)"TEST" + 3B];
        D.9945 = *D.9944;
        D.9946 = (int) D.9945;
        D.9947 = __s2 + 3;
        D.9948 = *D.9947;
        D.9949 = (int) D.9948;
        __result = D.9946 - D.9949;
        <D.9943>:
        <D.9933>:
        <D.9923>:
      }
      D.7144 = __result;
    }
    iftmp.36 = -D.7144;
    goto <D.9950>;
    <D.9913>:
    D.9951 = ss->d;
    iftmp.36 = __builtin_strcmp (D.9951, "TEST");
    <D.9950>:
    D.7145 = iftmp.36;
  }
  if (D.7145 != 0) goto <D.9903>; else goto <D.9952>;
  <D.9952>:
  D.9953 = ss->e;
  if (D.9953 != 99) goto <D.9903>; else goto <D.9954>;
  <D.9954>:
  D.9955 = ss->f;
  if (D.9955 != 1.5e+0) goto <D.9903>; else goto <D.9956>;
  <D.9956>:
  D.9957 = ss->g;
  if (D.9957 != 42) goto <D.9903>; else goto <D.9958>;
  <D.9958>:
  D.9959 = ss->h;
  if (D.9959 != 123) goto <D.9903>; else goto <D.9904>;
  <D.9903>:
  D.9960 = 1;
  return D.9960;
  <D.9904>:
  D.9963 = ss + 56;
  D.9964 = BIT_FIELD_REF <*D.9963, 64, 0>;
  D.9965 = (long unsigned int) D.9964;
  D.9966 = D.9965;
  if (D.9966 != 0) goto <D.9961>; else goto <D.9967>;
  <D.9967>:
  D.9963 = ss + 56;
  D.9968 = D.9963->c;
  if (D.9968 != 0) goto <D.9961>; else goto <D.9969>;
  <D.9969>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 5;
    if (__s2_len <= 3) goto <D.9971>; else goto <D.9972>;
    <D.9971>:
    {
      const unsigned char * __s2;
      int __result;

      D.9963 = ss + 56;
      __s2 = D.9963->d;
      D.9973 = "TEST2";
      D.9974 = MEM[(const unsigned char *)D.9973];
      D.9975 = (int) D.9974;
      D.9976 = *__s2;
      D.9977 = (int) D.9976;
      __result = D.9975 - D.9977;
      {
        D.9978 = __s2_len != 0;
        D.9979 = __result == 0;
        D.9980 = D.9978 & D.9979;
        if (D.9980 != 0) goto <D.9981>; else goto <D.9982>;
        <D.9981>:
        D.9983 = &MEM[(void *)"TEST2" + 1B];
        D.9984 = *D.9983;
        D.9985 = (int) D.9984;
        D.9986 = __s2 + 1;
        D.9987 = *D.9986;
        D.9988 = (int) D.9987;
        __result = D.9985 - D.9988;
        D.9989 = __s2_len > 1;
        D.9979 = __result == 0;
        D.9990 = D.9989 & D.9979;
        if (D.9990 != 0) goto <D.9991>; else goto <D.9992>;
        <D.9991>:
        D.9993 = &MEM[(void *)"TEST2" + 2B];
        D.9994 = *D.9993;
        D.9995 = (int) D.9994;
        D.9996 = __s2 + 2;
        D.9997 = *D.9996;
        D.9998 = (int) D.9997;
        __result = D.9995 - D.9998;
        D.9999 = __s2_len > 2;
        D.9979 = __result == 0;
        D.10000 = D.9999 & D.9979;
        if (D.10000 != 0) goto <D.10001>; else goto <D.10002>;
        <D.10001>:
        D.10003 = &MEM[(void *)"TEST2" + 3B];
        D.10004 = *D.10003;
        D.10005 = (int) D.10004;
        D.10006 = __s2 + 3;
        D.10007 = *D.10006;
        D.10008 = (int) D.10007;
        __result = D.10005 - D.10008;
        <D.10002>:
        <D.9992>:
        <D.9982>:
      }
      D.7153 = __result;
    }
    iftmp.37 = -D.7153;
    goto <D.10009>;
    <D.9972>:
    D.9963 = ss + 56;
    D.10010 = D.9963->d;
    iftmp.37 = __builtin_strcmp (D.10010, "TEST2");
    <D.10009>:
    D.7154 = iftmp.37;
  }
  if (D.7154 != 0) goto <D.9961>; else goto <D.10011>;
  <D.10011>:
  D.9963 = ss + 56;
  D.10012 = D.9963->e;
  if (D.10012 != 100) goto <D.9961>; else goto <D.10013>;
  <D.10013>:
  D.9963 = ss + 56;
  D.10014 = D.9963->f;
  if (D.10014 != 2.5e+0) goto <D.9961>; else goto <D.10015>;
  <D.10015>:
  D.9963 = ss + 56;
  D.10016 = D.9963->g;
  if (D.10016 != 43) goto <D.9961>; else goto <D.10017>;
  <D.10017>:
  D.9963 = ss + 56;
  D.10018 = D.9963->h;
  if (D.10018 != 124) goto <D.9961>; else goto <D.9962>;
  <D.9961>:
  D.9960 = 1;
  return D.9960;
  <D.9962>:
  D.9960 = 0;
  return D.9960;
}


mono_test_marshal_long_align_struct_array (struct long_align_struct * ss)
{
  int D.10020;
  int D.10021;
  unsigned int D.10022;
  long int D.10023;
  unsigned int D.10024;
  unsigned int D.10025;
  long int D.10026;
  unsigned int D.10027;
  unsigned int D.10028;
  struct long_align_struct * D.10029;
  int D.10030;
  unsigned int D.10031;
  unsigned int D.10032;
  long int D.10033;
  unsigned int D.10034;
  unsigned int D.10035;
  long int D.10036;
  unsigned int D.10037;
  unsigned int D.10038;

  D.10021 = ss->a;
  D.10022 = (unsigned int) D.10021;
  D.10023 = ss->b;
  D.10024 = (unsigned int) D.10023;
  D.10025 = D.10022 + D.10024;
  D.10026 = ss->c;
  D.10027 = (unsigned int) D.10026;
  D.10028 = D.10025 + D.10027;
  D.10029 = ss + 24;
  D.10030 = D.10029->a;
  D.10031 = (unsigned int) D.10030;
  D.10032 = D.10028 + D.10031;
  D.10029 = ss + 24;
  D.10033 = D.10029->b;
  D.10034 = (unsigned int) D.10033;
  D.10035 = D.10032 + D.10034;
  D.10029 = ss + 24;
  D.10036 = D.10029->c;
  D.10037 = (unsigned int) D.10036;
  D.10038 = D.10035 + D.10037;
  D.10020 = (int) D.10038;
  return D.10020;
}


mono_test_marshal_class (int i, int j, int k, struct simplestruct2 * ss, int l)
{
  struct simplestruct2 * D.10042;
  _Bool D.10045;
  _Bool D.10046;
  _Bool D.10047;
  _Bool D.10049;
  _Bool D.10050;
  _Bool D.10051;
  signed long D.10054;
  long unsigned int D.10055;
  long unsigned int D.10056;
  int D.10058;
  int D.7179;
  int iftmp.38;
  int D.7178;
  const char[5] * D.10063;
  unsigned char D.10064;
  int D.10065;
  unsigned char D.10066;
  int D.10067;
  _Bool D.10068;
  _Bool D.10069;
  _Bool D.10070;
  const unsigned char * D.10073;
  unsigned char D.10074;
  int D.10075;
  const unsigned char * D.10076;
  unsigned char D.10077;
  int D.10078;
  _Bool D.10079;
  _Bool D.10080;
  const unsigned char * D.10083;
  unsigned char D.10084;
  int D.10085;
  const unsigned char * D.10086;
  unsigned char D.10087;
  int D.10088;
  _Bool D.10089;
  _Bool D.10090;
  const unsigned char * D.10093;
  unsigned char D.10094;
  int D.10095;
  const unsigned char * D.10096;
  unsigned char D.10097;
  int D.10098;
  char * D.10100;
  unsigned char D.10102;
  double D.10104;
  unsigned char D.10106;
  long unsigned int D.10108;
  char * D.10109;
  struct simplestruct2 * res;

  if (ss == 0B) goto <D.10040>; else goto <D.10041>;
  <D.10040>:
  D.10042 = 0B;
  return D.10042;
  <D.10041>:
  D.10045 = i != 10;
  D.10046 = j != 11;
  D.10047 = D.10045 | D.10046;
  if (D.10047 != 0) goto <D.10043>; else goto <D.10048>;
  <D.10048>:
  D.10049 = k != 12;
  D.10050 = l != 14;
  D.10051 = D.10049 | D.10050;
  if (D.10051 != 0) goto <D.10043>; else goto <D.10044>;
  <D.10043>:
  D.10042 = 0B;
  return D.10042;
  <D.10044>:
  D.10054 = BIT_FIELD_REF <*ss, 64, 0>;
  D.10055 = (long unsigned int) D.10054;
  D.10056 = D.10055;
  if (D.10056 != 4294967296) goto <D.10052>; else goto <D.10057>;
  <D.10057>:
  D.10058 = ss->c;
  if (D.10058 != 0) goto <D.10052>; else goto <D.10059>;
  <D.10059>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.10061>; else goto <D.10062>;
    <D.10061>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = ss->d;
      D.10063 = "TEST";
      D.10064 = MEM[(const unsigned char *)D.10063];
      D.10065 = (int) D.10064;
      D.10066 = *__s2;
      D.10067 = (int) D.10066;
      __result = D.10065 - D.10067;
      {
        D.10068 = __s2_len != 0;
        D.10069 = __result == 0;
        D.10070 = D.10068 & D.10069;
        if (D.10070 != 0) goto <D.10071>; else goto <D.10072>;
        <D.10071>:
        D.10073 = &MEM[(void *)"TEST" + 1B];
        D.10074 = *D.10073;
        D.10075 = (int) D.10074;
        D.10076 = __s2 + 1;
        D.10077 = *D.10076;
        D.10078 = (int) D.10077;
        __result = D.10075 - D.10078;
        D.10079 = __s2_len > 1;
        D.10069 = __result == 0;
        D.10080 = D.10079 & D.10069;
        if (D.10080 != 0) goto <D.10081>; else goto <D.10082>;
        <D.10081>:
        D.10083 = &MEM[(void *)"TEST" + 2B];
        D.10084 = *D.10083;
        D.10085 = (int) D.10084;
        D.10086 = __s2 + 2;
        D.10087 = *D.10086;
        D.10088 = (int) D.10087;
        __result = D.10085 - D.10088;
        D.10089 = __s2_len > 2;
        D.10069 = __result == 0;
        D.10090 = D.10089 & D.10069;
        if (D.10090 != 0) goto <D.10091>; else goto <D.10092>;
        <D.10091>:
        D.10093 = &MEM[(void *)"TEST" + 3B];
        D.10094 = *D.10093;
        D.10095 = (int) D.10094;
        D.10096 = __s2 + 3;
        D.10097 = *D.10096;
        D.10098 = (int) D.10097;
        __result = D.10095 - D.10098;
        <D.10092>:
        <D.10082>:
        <D.10072>:
      }
      D.7178 = __result;
    }
    iftmp.38 = -D.7178;
    goto <D.10099>;
    <D.10062>:
    D.10100 = ss->d;
    iftmp.38 = __builtin_strcmp (D.10100, "TEST");
    <D.10099>:
    D.7179 = iftmp.38;
  }
  if (D.7179 != 0) goto <D.10052>; else goto <D.10101>;
  <D.10101>:
  D.10102 = ss->e;
  if (D.10102 != 99) goto <D.10052>; else goto <D.10103>;
  <D.10103>:
  D.10104 = ss->f;
  if (D.10104 != 1.5e+0) goto <D.10052>; else goto <D.10105>;
  <D.10105>:
  D.10106 = ss->g;
  if (D.10106 != 42) goto <D.10052>; else goto <D.10107>;
  <D.10107>:
  D.10108 = ss->h;
  if (D.10108 != 123) goto <D.10052>; else goto <D.10053>;
  <D.10052>:
  D.10042 = 0B;
  return D.10042;
  <D.10053>:
  res = marshal_alloc0 (56);
  memcpy (res, ss, 56);
  D.10109 = marshal_strdup ("TEST");
  res->d = D.10109;
  D.10042 = res;
  return D.10042;
}


marshal_alloc0 (gsize size)
{
  void * D.10111;

  D.10111 = monoeg_malloc0 (size);
  return D.10111;
}


mono_test_marshal_byref_class (struct simplestruct2 * * ssp)
{
  signed long D.10115;
  long unsigned int D.10116;
  long unsigned int D.10117;
  int D.10119;
  int D.7193;
  int iftmp.39;
  int D.7192;
  const char[5] * D.10124;
  unsigned char D.10125;
  int D.10126;
  unsigned char D.10127;
  int D.10128;
  _Bool D.10129;
  _Bool D.10130;
  _Bool D.10131;
  const unsigned char * D.10134;
  unsigned char D.10135;
  int D.10136;
  const unsigned char * D.10137;
  unsigned char D.10138;
  int D.10139;
  _Bool D.10140;
  _Bool D.10141;
  const unsigned char * D.10144;
  unsigned char D.10145;
  int D.10146;
  const unsigned char * D.10147;
  unsigned char D.10148;
  int D.10149;
  _Bool D.10150;
  _Bool D.10151;
  const unsigned char * D.10154;
  unsigned char D.10155;
  int D.10156;
  const unsigned char * D.10157;
  unsigned char D.10158;
  int D.10159;
  char * D.10161;
  unsigned char D.10163;
  double D.10165;
  unsigned char D.10167;
  long unsigned int D.10169;
  int D.10170;
  char * D.10171;
  struct simplestruct2 * ss;
  struct simplestruct2 * res;

  ss = *ssp;
  D.10115 = BIT_FIELD_REF <*ss, 64, 0>;
  D.10116 = (long unsigned int) D.10115;
  D.10117 = D.10116;
  if (D.10117 != 4294967296) goto <D.10113>; else goto <D.10118>;
  <D.10118>:
  D.10119 = ss->c;
  if (D.10119 != 0) goto <D.10113>; else goto <D.10120>;
  <D.10120>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.10122>; else goto <D.10123>;
    <D.10122>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = ss->d;
      D.10124 = "TEST";
      D.10125 = MEM[(const unsigned char *)D.10124];
      D.10126 = (int) D.10125;
      D.10127 = *__s2;
      D.10128 = (int) D.10127;
      __result = D.10126 - D.10128;
      {
        D.10129 = __s2_len != 0;
        D.10130 = __result == 0;
        D.10131 = D.10129 & D.10130;
        if (D.10131 != 0) goto <D.10132>; else goto <D.10133>;
        <D.10132>:
        D.10134 = &MEM[(void *)"TEST" + 1B];
        D.10135 = *D.10134;
        D.10136 = (int) D.10135;
        D.10137 = __s2 + 1;
        D.10138 = *D.10137;
        D.10139 = (int) D.10138;
        __result = D.10136 - D.10139;
        D.10140 = __s2_len > 1;
        D.10130 = __result == 0;
        D.10141 = D.10140 & D.10130;
        if (D.10141 != 0) goto <D.10142>; else goto <D.10143>;
        <D.10142>:
        D.10144 = &MEM[(void *)"TEST" + 2B];
        D.10145 = *D.10144;
        D.10146 = (int) D.10145;
        D.10147 = __s2 + 2;
        D.10148 = *D.10147;
        D.10149 = (int) D.10148;
        __result = D.10146 - D.10149;
        D.10150 = __s2_len > 2;
        D.10130 = __result == 0;
        D.10151 = D.10150 & D.10130;
        if (D.10151 != 0) goto <D.10152>; else goto <D.10153>;
        <D.10152>:
        D.10154 = &MEM[(void *)"TEST" + 3B];
        D.10155 = *D.10154;
        D.10156 = (int) D.10155;
        D.10157 = __s2 + 3;
        D.10158 = *D.10157;
        D.10159 = (int) D.10158;
        __result = D.10156 - D.10159;
        <D.10153>:
        <D.10143>:
        <D.10133>:
      }
      D.7192 = __result;
    }
    iftmp.39 = -D.7192;
    goto <D.10160>;
    <D.10123>:
    D.10161 = ss->d;
    iftmp.39 = __builtin_strcmp (D.10161, "TEST");
    <D.10160>:
    D.7193 = iftmp.39;
  }
  if (D.7193 != 0) goto <D.10113>; else goto <D.10162>;
  <D.10162>:
  D.10163 = ss->e;
  if (D.10163 != 99) goto <D.10113>; else goto <D.10164>;
  <D.10164>:
  D.10165 = ss->f;
  if (D.10165 != 1.5e+0) goto <D.10113>; else goto <D.10166>;
  <D.10166>:
  D.10167 = ss->g;
  if (D.10167 != 42) goto <D.10113>; else goto <D.10168>;
  <D.10168>:
  D.10169 = ss->h;
  if (D.10169 != 123) goto <D.10113>; else goto <D.10114>;
  <D.10113>:
  D.10170 = 1;
  return D.10170;
  <D.10114>:
  res = marshal_alloc0 (56);
  memcpy (res, ss, 56);
  D.10171 = marshal_strdup ("TEST-RES");
  res->d = D.10171;
  *ssp = res;
  D.10170 = 0;
  return D.10170;
}


reliable_delegate (int a)
{
  int D.10173;

  D.10173 = a;
  return D.10173;
}


mono_test_marshal_delegate (int (*SimpleDelegate) (int) delegate)
{
  int D.10175;
  _Bool D.10178;
  long int D.10179;
  long int D.10180;
  int D.10183;
  void * sp1;
  void * sp2;

  delegate (2);
  sp1 = get_sp ();
  delegate (2);
  sp2 = get_sp ();
  D.10175 = is_get_sp_reliable ();
  if (D.10175 != 0) goto <D.10176>; else goto <D.10177>;
  <D.10176>:
  D.10178 = sp1 != sp2;
  D.10179 = (long int) D.10178;
  D.10180 = __builtin_expect (D.10179, 0);
  if (D.10180 != 0) goto <D.10181>; else goto <D.10182>;
  <D.10181>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "libtest.c", 816, "sp1 == sp2");
  <D.10182>:
  <D.10177>:
  D.10183 = delegate (2);
  return D.10183;
}


get_sp ()
{
  void * D.10185;
  int i;
  void * p;

  try
    {
      p = &i;
      D.10185 = p;
      return D.10185;
    }
  finally
    {
      i = {CLOBBER};
    }
}


is_get_sp_reliable ()
{
  gboolean D.10188;
  _Bool D.10189;
  void * sp1;
  void * sp2;

  reliable_delegate (1);
  sp1 = get_sp ();
  reliable_delegate (1);
  sp2 = get_sp ();
  D.10189 = sp1 == sp2;
  D.10188 = (gboolean) D.10189;
  return D.10188;
}


mono_test_marshal_out_delegate (int (*SimpleDelegate) (int) * delegate)
{
  int D.10191;

  *delegate = inc_cb;
  D.10191 = 0;
  return D.10191;
}


inc_cb (int i)
{
  int D.10193;

  D.10193 = i + 1;
  return D.10193;
}


mono_test_marshal_return_delegate (int (*SimpleDelegate) (int) delegate)
{
  int (*SimpleDelegate) (int) D.10195;

  D.10195 = delegate;
  return D.10195;
}


mono_test_marshal_return_delegate_2 ()
{
  int (*SimpleDelegate) (int) D.10197;

  D.10197 = return_plus_one;
  return D.10197;
}


return_plus_one (int i)
{
  int D.10199;

  D.10199 = i + 1;
  return D.10199;
}


mono_test_marshal_delegate2 (struct simplestruct (*SimpleDelegate2) (struct simplestruct) delegate)
{
  gunichar2 * D.10201;
  int D.10204;
  int D.10206;
  int D.10208;
  int D.7257;
  int iftmp.40;
  int D.7256;
  const char[9] * D.10213;
  unsigned char D.10214;
  int D.10215;
  unsigned char D.10216;
  int D.10217;
  _Bool D.10218;
  _Bool D.10219;
  _Bool D.10220;
  const unsigned char * D.10223;
  unsigned char D.10224;
  int D.10225;
  const unsigned char * D.10226;
  unsigned char D.10227;
  int D.10228;
  _Bool D.10229;
  _Bool D.10230;
  const unsigned char * D.10233;
  unsigned char D.10234;
  int D.10235;
  const unsigned char * D.10236;
  unsigned char D.10237;
  int D.10238;
  _Bool D.10239;
  _Bool D.10240;
  const unsigned char * D.10243;
  unsigned char D.10244;
  int D.10245;
  const unsigned char * D.10246;
  unsigned char D.10247;
  int D.10248;
  const char * D.10250;
  gunichar2 * D.10252;
  int D.10253;
  int D.10254;
  struct simplestruct ss;
  struct simplestruct res;

  try
    {
      ss.a = 0;
      ss.b = 1;
      ss.c = 0;
      ss.d = "TEST";
      D.10201 = monoeg_g_utf8_to_utf16 ("TEST2", -1, 0B, 0B, 0B);
      ss.d2 = D.10201;
      res = delegate (ss); [return slot optimization]
      D.10204 = res.a;
      if (D.10204 == 0) goto <D.10202>; else goto <D.10205>;
      <D.10205>:
      D.10206 = res.b;
      if (D.10206 != 0) goto <D.10202>; else goto <D.10207>;
      <D.10207>:
      D.10208 = res.c;
      if (D.10208 == 0) goto <D.10202>; else goto <D.10209>;
      <D.10209>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = res.d;
          D.10213 = "TEST-RES";
          D.10214 = MEM[(const unsigned char *)D.10213];
          D.10215 = (int) D.10214;
          D.10216 = *__s2;
          D.10217 = (int) D.10216;
          __result = D.10215 - D.10217;
          {
            D.10218 = __s2_len != 0;
            D.10219 = __result == 0;
            D.10220 = D.10218 & D.10219;
            if (D.10220 != 0) goto <D.10221>; else goto <D.10222>;
            <D.10221>:
            D.10223 = &MEM[(void *)"TEST-RES" + 1B];
            D.10224 = *D.10223;
            D.10225 = (int) D.10224;
            D.10226 = __s2 + 1;
            D.10227 = *D.10226;
            D.10228 = (int) D.10227;
            __result = D.10225 - D.10228;
            D.10229 = __s2_len > 1;
            D.10219 = __result == 0;
            D.10230 = D.10229 & D.10219;
            if (D.10230 != 0) goto <D.10231>; else goto <D.10232>;
            <D.10231>:
            D.10233 = &MEM[(void *)"TEST-RES" + 2B];
            D.10234 = *D.10233;
            D.10235 = (int) D.10234;
            D.10236 = __s2 + 2;
            D.10237 = *D.10236;
            D.10238 = (int) D.10237;
            __result = D.10235 - D.10238;
            D.10239 = __s2_len > 2;
            D.10219 = __result == 0;
            D.10240 = D.10239 & D.10219;
            if (D.10240 != 0) goto <D.10241>; else goto <D.10242>;
            <D.10241>:
            D.10243 = &MEM[(void *)"TEST-RES" + 3B];
            D.10244 = *D.10243;
            D.10245 = (int) D.10244;
            D.10246 = __s2 + 3;
            D.10247 = *D.10246;
            D.10248 = (int) D.10247;
            __result = D.10245 - D.10248;
            <D.10242>:
            <D.10232>:
            <D.10222>:
          }
          D.7256 = __result;
        }
        iftmp.40 = -D.7256;
        goto <D.10249>;
        <D.10212>:
        D.10250 = res.d;
        iftmp.40 = __builtin_strcmp (D.10250, "TEST-RES");
        <D.10249>:
        D.7257 = iftmp.40;
      }
      if (D.7257 != 0) goto <D.10202>; else goto <D.10251>;
      <D.10251>:
      D.10252 = res.d2;
      D.10253 = is_utf16_equals (D.10252, "TEST2-RES");
      if (D.10253 == 0) goto <D.10202>; else goto <D.10203>;
      <D.10202>:
      D.10254 = 1;
      return D.10254;
      <D.10203>:
      D.10254 = 0;
      return D.10254;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


is_utf16_equals (gunichar2 * s1, const char * s2)
{
  int res.41;
  gboolean D.10257;
  _Bool D.10258;
  char * s;
  int res;

  s = monoeg_g_utf16_to_utf8 (s1, -1, 0B, 0B, 0B);
  {
    size_t __s1_len;
    size_t __s2_len;

    res.41 = __builtin_strcmp (s, s2);
  }
  res = res.41;
  monoeg_g_free (s);
  D.10258 = res == 0;
  D.10257 = (gboolean) D.10258;
  return D.10257;
}


mono_test_marshal_delegate4 (struct simplestruct * (*SimpleDelegate4) (struct simplestruct *) delegate)
{
  int D.10262;
  int D.10265;
  int D.10267;
  int D.10269;
  int D.7273;
  int iftmp.42;
  int D.7272;
  const char[5] * D.10274;
  unsigned char D.10275;
  int D.10276;
  unsigned char D.10277;
  int D.10278;
  _Bool D.10279;
  _Bool D.10280;
  _Bool D.10281;
  const unsigned char * D.10284;
  unsigned char D.10285;
  int D.10286;
  const unsigned char * D.10287;
  unsigned char D.10288;
  int D.10289;
  _Bool D.10290;
  _Bool D.10291;
  const unsigned char * D.10294;
  unsigned char D.10295;
  int D.10296;
  const unsigned char * D.10297;
  unsigned char D.10298;
  int D.10299;
  _Bool D.10300;
  _Bool D.10301;
  const unsigned char * D.10304;
  unsigned char D.10305;
  int D.10306;
  const unsigned char * D.10307;
  unsigned char D.10308;
  int D.10309;
  const char * D.10311;
  struct simplestruct ss;
  struct simplestruct * res;

  try
    {
      ss.a = 0;
      ss.b = 1;
      ss.c = 0;
      ss.d = "TEST";
      res = delegate (&ss);
      if (res == 0B) goto <D.10260>; else goto <D.10261>;
      <D.10260>:
      D.10262 = 1;
      return D.10262;
      <D.10261>:
      D.10265 = res->a;
      if (D.10265 != 0) goto <D.10263>; else goto <D.10266>;
      <D.10266>:
      D.10267 = res->b;
      if (D.10267 == 0) goto <D.10263>; else goto <D.10268>;
      <D.10268>:
      D.10269 = res->c;
      if (D.10269 != 0) goto <D.10263>; else goto <D.10270>;
      <D.10270>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 4;
        if (__s2_len <= 3) goto <D.10272>; else goto <D.10273>;
        <D.10272>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = res->d;
          D.10274 = "TEST";
          D.10275 = MEM[(const unsigned char *)D.10274];
          D.10276 = (int) D.10275;
          D.10277 = *__s2;
          D.10278 = (int) D.10277;
          __result = D.10276 - D.10278;
          {
            D.10279 = __s2_len != 0;
            D.10280 = __result == 0;
            D.10281 = D.10279 & D.10280;
            if (D.10281 != 0) goto <D.10282>; else goto <D.10283>;
            <D.10282>:
            D.10284 = &MEM[(void *)"TEST" + 1B];
            D.10285 = *D.10284;
            D.10286 = (int) D.10285;
            D.10287 = __s2 + 1;
            D.10288 = *D.10287;
            D.10289 = (int) D.10288;
            __result = D.10286 - D.10289;
            D.10290 = __s2_len > 1;
            D.10280 = __result == 0;
            D.10291 = D.10290 & D.10280;
            if (D.10291 != 0) goto <D.10292>; else goto <D.10293>;
            <D.10292>:
            D.10294 = &MEM[(void *)"TEST" + 2B];
            D.10295 = *D.10294;
            D.10296 = (int) D.10295;
            D.10297 = __s2 + 2;
            D.10298 = *D.10297;
            D.10299 = (int) D.10298;
            __result = D.10296 - D.10299;
            D.10300 = __s2_len > 2;
            D.10280 = __result == 0;
            D.10301 = D.10300 & D.10280;
            if (D.10301 != 0) goto <D.10302>; else goto <D.10303>;
            <D.10302>:
            D.10304 = &MEM[(void *)"TEST" + 3B];
            D.10305 = *D.10304;
            D.10306 = (int) D.10305;
            D.10307 = __s2 + 3;
            D.10308 = *D.10307;
            D.10309 = (int) D.10308;
            __result = D.10306 - D.10309;
            <D.10303>:
            <D.10293>:
            <D.10283>:
          }
          D.7272 = __result;
        }
        iftmp.42 = -D.7272;
        goto <D.10310>;
        <D.10273>:
        D.10311 = res->d;
        iftmp.42 = __builtin_strcmp (D.10311, "TEST");
        <D.10310>:
        D.7273 = iftmp.42;
      }
      if (D.7273 != 0) goto <D.10263>; else goto <D.10264>;
      <D.10263>:
      D.10262 = 2;
      return D.10262;
      <D.10264>:
      res = delegate (0B);
      if (res != 0B) goto <D.10312>; else goto <D.10313>;
      <D.10312>:
      D.10262 = 3;
      return D.10262;
      <D.10313>:
      D.10262 = 0;
      return D.10262;
    }
  finally
    {
      ss = {CLOBBER};
    }
}


mono_test_marshal_delegate5 (int (*SimpleDelegate5) (struct simplestruct * *) delegate)
{
  int D.10318;
  struct simplestruct * ptr.43;
  int D.10322;
  int D.10324;
  int D.10326;
  int D.7290;
  int iftmp.44;
  int D.7289;
  const char[4] * D.10331;
  unsigned char D.10332;
  int D.10333;
  unsigned char D.10334;
  int D.10335;
  _Bool D.10336;
  _Bool D.10337;
  _Bool D.10338;
  const unsigned char * D.10341;
  unsigned char D.10342;
  int D.10343;
  const unsigned char * D.10344;
  unsigned char D.10345;
  int D.10346;
  _Bool D.10347;
  _Bool D.10348;
  const unsigned char * D.10351;
  unsigned char D.10352;
  int D.10353;
  const unsigned char * D.10354;
  unsigned char D.10355;
  int D.10356;
  _Bool D.10357;
  _Bool D.10358;
  const unsigned char * D.10361;
  unsigned char D.10362;
  int D.10363;
  const unsigned char * D.10364;
  unsigned char D.10365;
  int D.10366;
  const char * D.10368;
  struct simplestruct ss;
  int res;
  struct simplestruct * ptr;

  try
    {
      ss.a = 0;
      ss.b = 1;
      ss.c = 0;
      ss.d = "TEST";
      ptr = &ss;
      res = delegate (&ptr);
      if (res != 0) goto <D.10316>; else goto <D.10317>;
      <D.10316>:
      D.10318 = 1;
      return D.10318;
      <D.10317>:
      ptr.43 = ptr;
      D.10322 = ptr.43->a;
      if (D.10322 == 0) goto <D.10319>; else goto <D.10323>;
      <D.10323>:
      ptr.43 = ptr;
      D.10324 = ptr.43->b;
      if (D.10324 != 0) goto <D.10319>; else goto <D.10325>;
      <D.10325>:
      ptr.43 = ptr;
      D.10326 = ptr.43->c;
      if (D.10326 == 0) goto <D.10319>; else goto <D.10327>;
      <D.10327>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          ptr.43 = ptr;
          __s2 = ptr.43->d;
          D.10331 = "RES";
          D.10332 = MEM[(const unsigned char *)D.10331];
          D.10333 = (int) D.10332;
          D.10334 = *__s2;
          D.10335 = (int) D.10334;
          __result = D.10333 - D.10335;
          {
            D.10336 = __s2_len != 0;
            D.10337 = __result == 0;
            D.10338 = D.10336 & D.10337;
            if (D.10338 != 0) goto <D.10339>; else goto <D.10340>;
            <D.10339>:
            D.10341 = &MEM[(void *)"RES" + 1B];
            D.10342 = *D.10341;
            D.10343 = (int) D.10342;
            D.10344 = __s2 + 1;
            D.10345 = *D.10344;
            D.10346 = (int) D.10345;
            __result = D.10343 - D.10346;
            D.10347 = __s2_len > 1;
            D.10337 = __result == 0;
            D.10348 = D.10347 & D.10337;
            if (D.10348 != 0) goto <D.10349>; else goto <D.10350>;
            <D.10349>:
            D.10351 = &MEM[(void *)"RES" + 2B];
            D.10352 = *D.10351;
            D.10353 = (int) D.10352;
            D.10354 = __s2 + 2;
            D.10355 = *D.10354;
            D.10356 = (int) D.10355;
            __result = D.10353 - D.10356;
            D.10357 = __s2_len > 2;
            D.10337 = __result == 0;
            D.10358 = D.10357 & D.10337;
            if (D.10358 != 0) goto <D.10359>; else goto <D.10360>;
            <D.10359>:
            D.10361 = &MEM[(void *)"RES" + 3B];
            D.10362 = *D.10361;
            D.10363 = (int) D.10362;
            D.10364 = __s2 + 3;
            D.10365 = *D.10364;
            D.10366 = (int) D.10365;
            __result = D.10363 - D.10366;
            <D.10360>:
            <D.10350>:
            <D.10340>:
          }
          D.7289 = __result;
        }
        iftmp.44 = -D.7289;
        goto <D.10367>;
        <D.10330>:
        ptr.43 = ptr;
        D.10368 = ptr.43->d;
        iftmp.44 = __builtin_strcmp (D.10368, "RES");
        <D.10367>:
        D.7290 = iftmp.44;
      }
      if (D.7290 != 0) goto <D.10319>; else goto <D.10320>;
      <D.10319>:
      D.10318 = 2;
      return D.10318;
      <D.10320>:
      D.10318 = 0;
      return D.10318;
    }
  finally
    {
      ss = {CLOBBER};
      ptr = {CLOBBER};
    }
}


mono_test_marshal_delegate6 (int (*SimpleDelegate5) (struct simplestruct * *) delegate)
{
  int D.10371;
  int res;

  res = delegate (0B);
  D.10371 = 0;
  return D.10371;
}


mono_test_marshal_delegate7 (int (*SimpleDelegate7) (struct simplestruct * *) delegate)
{
  int D.10375;
  struct simplestruct * ptr.45;
  int D.10379;
  int D.10381;
  int D.10383;
  int D.7310;
  int iftmp.46;
  int D.7309;
  const char[4] * D.10388;
  unsigned char D.10389;
  int D.10390;
  unsigned char D.10391;
  int D.10392;
  _Bool D.10393;
  _Bool D.10394;
  _Bool D.10395;
  const unsigned char * D.10398;
  unsigned char D.10399;
  int D.10400;
  const unsigned char * D.10401;
  unsigned char D.10402;
  int D.10403;
  _Bool D.10404;
  _Bool D.10405;
  const unsigned char * D.10408;
  unsigned char D.10409;
  int D.10410;
  const unsigned char * D.10411;
  unsigned char D.10412;
  int D.10413;
  _Bool D.10414;
  _Bool D.10415;
  const unsigned char * D.10418;
  unsigned char D.10419;
  int D.10420;
  const unsigned char * D.10421;
  unsigned char D.10422;
  int D.10423;
  const char * D.10425;
  int res;
  struct simplestruct * ptr;

  try
    {
      ptr = 305419896B;
      res = delegate (&ptr);
      if (res != 0) goto <D.10373>; else goto <D.10374>;
      <D.10373>:
      D.10375 = 1;
      return D.10375;
      <D.10374>:
      ptr.45 = ptr;
      D.10379 = ptr.45->a;
      if (D.10379 == 0) goto <D.10376>; else goto <D.10380>;
      <D.10380>:
      ptr.45 = ptr;
      D.10381 = ptr.45->b;
      if (D.10381 != 0) goto <D.10376>; else goto <D.10382>;
      <D.10382>:
      ptr.45 = ptr;
      D.10383 = ptr.45->c;
      if (D.10383 == 0) goto <D.10376>; else goto <D.10384>;
      <D.10384>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          ptr.45 = ptr;
          __s2 = ptr.45->d;
          D.10388 = "RES";
          D.10389 = MEM[(const unsigned char *)D.10388];
          D.10390 = (int) D.10389;
          D.10391 = *__s2;
          D.10392 = (int) D.10391;
          __result = D.10390 - D.10392;
          {
            D.10393 = __s2_len != 0;
            D.10394 = __result == 0;
            D.10395 = D.10393 & D.10394;
            if (D.10395 != 0) goto <D.10396>; else goto <D.10397>;
            <D.10396>:
            D.10398 = &MEM[(void *)"RES" + 1B];
            D.10399 = *D.10398;
            D.10400 = (int) D.10399;
            D.10401 = __s2 + 1;
            D.10402 = *D.10401;
            D.10403 = (int) D.10402;
            __result = D.10400 - D.10403;
            D.10404 = __s2_len > 1;
            D.10394 = __result == 0;
            D.10405 = D.10404 & D.10394;
            if (D.10405 != 0) goto <D.10406>; else goto <D.10407>;
            <D.10406>:
            D.10408 = &MEM[(void *)"RES" + 2B];
            D.10409 = *D.10408;
            D.10410 = (int) D.10409;
            D.10411 = __s2 + 2;
            D.10412 = *D.10411;
            D.10413 = (int) D.10412;
            __result = D.10410 - D.10413;
            D.10414 = __s2_len > 2;
            D.10394 = __result == 0;
            D.10415 = D.10414 & D.10394;
            if (D.10415 != 0) goto <D.10416>; else goto <D.10417>;
            <D.10416>:
            D.10418 = &MEM[(void *)"RES" + 3B];
            D.10419 = *D.10418;
            D.10420 = (int) D.10419;
            D.10421 = __s2 + 3;
            D.10422 = *D.10421;
            D.10423 = (int) D.10422;
            __result = D.10420 - D.10423;
            <D.10417>:
            <D.10407>:
            <D.10397>:
          }
          D.7309 = __result;
        }
        iftmp.46 = -D.7309;
        goto <D.10424>;
        <D.10387>:
        ptr.45 = ptr;
        D.10425 = ptr.45->d;
        iftmp.46 = __builtin_strcmp (D.10425, "RES");
        <D.10424>:
        D.7310 = iftmp.46;
      }
      if (D.7310 != 0) goto <D.10376>; else goto <D.10377>;
      <D.10376>:
      D.10375 = 2;
      return D.10375;
      <D.10377>:
      D.10375 = 0;
      return D.10375;
    }
  finally
    {
      ptr = {CLOBBER};
    }
}


mono_test_marshal_inout_byval_class_delegate (int (*InOutByvalClassDelegate) (struct simplestruct *) delegate)
{
  gchar * D.10428;
  int D.10431;
  int D.10434;
  int D.10436;
  int D.10438;
  int D.7326;
  int iftmp.47;
  int D.7325;
  const char[4] * D.10443;
  unsigned char D.10444;
  int D.10445;
  unsigned char D.10446;
  int D.10447;
  _Bool D.10448;
  _Bool D.10449;
  _Bool D.10450;
  const unsigned char * D.10453;
  unsigned char D.10454;
  int D.10455;
  const unsigned char * D.10456;
  unsigned char D.10457;
  int D.10458;
  _Bool D.10459;
  _Bool D.10460;
  const unsigned char * D.10463;
  unsigned char D.10464;
  int D.10465;
  const unsigned char * D.10466;
  unsigned char D.10467;
  int D.10468;
  _Bool D.10469;
  _Bool D.10470;
  const unsigned char * D.10473;
  unsigned char D.10474;
  int D.10475;
  const unsigned char * D.10476;
  unsigned char D.10477;
  int D.10478;
  const char * D.10480;
  int res;
  struct simplestruct ss;

  try
    {
      ss.a = 0;
      ss.b = 1;
      ss.c = 0;
      D.10428 = monoeg_g_strdup_printf ("%s", "FOO");
      ss.d = D.10428;
      res = delegate (&ss);
      if (res != 0) goto <D.10429>; else goto <D.10430>;
      <D.10429>:
      D.10431 = 1;
      return D.10431;
      <D.10430>:
      D.10434 = ss.a;
      if (D.10434 == 0) goto <D.10432>; else goto <D.10435>;
      <D.10435>:
      D.10436 = ss.b;
      if (D.10436 != 0) goto <D.10432>; else goto <D.10437>;
      <D.10437>:
      D.10438 = ss.c;
      if (D.10438 == 0) goto <D.10432>; else goto <D.10439>;
      <D.10439>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = ss.d;
          D.10443 = "RES";
          D.10444 = MEM[(const unsigned char *)D.10443];
          D.10445 = (int) D.10444;
          D.10446 = *__s2;
          D.10447 = (int) D.10446;
          __result = D.10445 - D.10447;
          {
            D.10448 = __s2_len != 0;
            D.10449 = __result == 0;
            D.10450 = D.10448 & D.10449;
            if (D.10450 != 0) goto <D.10451>; else goto <D.10452>;
            <D.10451>:
            D.10453 = &MEM[(void *)"RES" + 1B];
            D.10454 = *D.10453;
            D.10455 = (int) D.10454;
            D.10456 = __s2 + 1;
            D.10457 = *D.10456;
            D.10458 = (int) D.10457;
            __result = D.10455 - D.10458;
            D.10459 = __s2_len > 1;
            D.10449 = __result == 0;
            D.10460 = D.10459 & D.10449;
            if (D.10460 != 0) goto <D.10461>; else goto <D.10462>;
            <D.10461>:
            D.10463 = &MEM[(void *)"RES" + 2B];
            D.10464 = *D.10463;
            D.10465 = (int) D.10464;
            D.10466 = __s2 + 2;
            D.10467 = *D.10466;
            D.10468 = (int) D.10467;
            __result = D.10465 - D.10468;
            D.10469 = __s2_len > 2;
            D.10449 = __result == 0;
            D.10470 = D.10469 & D.10449;
            if (D.10470 != 0) goto <D.10471>; else goto <D.10472>;
            <D.10471>:
            D.10473 = &MEM[(void *)"RES" + 3B];
            D.10474 = *D.10473;
            D.10475 = (int) D.10474;
            D.10476 = __s2 + 3;
            D.10477 = *D.10476;
            D.10478 = (int) D.10477;
            __result = D.10475 - D.10478;
            <D.10472>:
            <D.10462>:
            <D.10452>:
          }
          D.7325 = __result;
        }
        iftmp.47 = -D.7325;
        goto <D.10479>;
        <D.10442>:
        D.10480 = ss.d;
        iftmp.47 = __builtin_strcmp (D.10480, "RES");
        <D.10479>:
        D.7326 = iftmp.47;
      }
      if (D.7326 != 0) goto <D.10432>; else goto <D.10433>;
      <D.10432>:
      D.10431 = 2;
      return D.10431;
      <D.10433>:
      D.10431 = 0;
      return D.10431;
    }
  finally
    {
      ss = {CLOBBER};
    }
}


mono_test_marshal_delegate8 (int (*SimpleDelegate8) (gunichar2 *) delegate, gunichar2 * s)
{
  int D.10483;

  D.10483 = delegate (s);
  return D.10483;
}


mono_test_marshal_delegate9 (int (*SimpleDelegate9) (int (*return_int_fnt) (int)) delegate, void * ftn)
{
  int D.10485;
  int (*<T12e3>) (int) ftn.48;

  ftn.48 = (int (*<T12e3>) (int)) ftn;
  D.10485 = delegate (ftn.48);
  return D.10485;
}


mono_test_marshal_delegate10 (int (*SimpleDelegate9) (int (*return_int_fnt) (int)) delegate)
{
  int D.10488;

  D.10488 = delegate (return_self);
  return D.10488;
}


return_self (int i)
{
  int D.10490;

  D.10490 = i;
  return D.10490;
}


mono_test_marshal_primitive_byref_delegate (int (*PrimitiveByrefDelegate) (int *) delegate)
{
  int D.10494;
  int i.49;
  int i;
  int res;

  try
    {
      i = 1;
      res = delegate (&i);
      if (res != 0) goto <D.10492>; else goto <D.10493>;
      <D.10492>:
      D.10494 = res;
      return D.10494;
      <D.10493>:
      i.49 = i;
      if (i.49 != 2) goto <D.10496>; else goto <D.10497>;
      <D.10496>:
      D.10494 = 2;
      return D.10494;
      <D.10497>:
      D.10494 = 0;
      return D.10494;
    }
  finally
    {
      i = {CLOBBER};
    }
}


mono_test_marshal_return_delegate_delegate (int (*return_int_delegate) (int) (*ReturnDelegateDelegate) (void) d)
{
  int D.10500;
  int (*<T12e3>) (int) D.10501;

  D.10501 = d ();
  D.10500 = D.10501 (55);
  return D.10500;
}


mono_test_marshal_stringbuilder (char * s, int n)
{
  int D.7374;
  int iftmp.50;
  int D.7373;
  const char[5] * D.10506;
  unsigned char D.10507;
  int D.10508;
  unsigned char D.10509;
  int D.10510;
  _Bool D.10511;
  _Bool D.10512;
  _Bool D.10513;
  const unsigned char * D.10516;
  unsigned char D.10517;
  int D.10518;
  const unsigned char * D.10519;
  unsigned char D.10520;
  int D.10521;
  _Bool D.10522;
  _Bool D.10523;
  const unsigned char * D.10526;
  unsigned char D.10527;
  int D.10528;
  const unsigned char * D.10529;
  unsigned char D.10530;
  int D.10531;
  _Bool D.10532;
  _Bool D.10533;
  const unsigned char * D.10536;
  unsigned char D.10537;
  int D.10538;
  const unsigned char * D.10539;
  unsigned char D.10540;
  int D.10541;
  int D.10545;
  long unsigned int D.10546;
  sizetype D.10547;
  char * D.10548;
  const char m[36];

  try
    {
      m = "This is my message.  Isn\'t it nice?";
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 4;
        if (__s2_len <= 3) goto <D.10504>; else goto <D.10505>;
        <D.10504>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = s;
          D.10506 = "ABCD";
          D.10507 = MEM[(const unsigned char *)D.10506];
          D.10508 = (int) D.10507;
          D.10509 = *__s2;
          D.10510 = (int) D.10509;
          __result = D.10508 - D.10510;
          {
            D.10511 = __s2_len != 0;
            D.10512 = __result == 0;
            D.10513 = D.10511 & D.10512;
            if (D.10513 != 0) goto <D.10514>; else goto <D.10515>;
            <D.10514>:
            D.10516 = &MEM[(void *)"ABCD" + 1B];
            D.10517 = *D.10516;
            D.10518 = (int) D.10517;
            D.10519 = __s2 + 1;
            D.10520 = *D.10519;
            D.10521 = (int) D.10520;
            __result = D.10518 - D.10521;
            D.10522 = __s2_len > 1;
            D.10512 = __result == 0;
            D.10523 = D.10522 & D.10512;
            if (D.10523 != 0) goto <D.10524>; else goto <D.10525>;
            <D.10524>:
            D.10526 = &MEM[(void *)"ABCD" + 2B];
            D.10527 = *D.10526;
            D.10528 = (int) D.10527;
            D.10529 = __s2 + 2;
            D.10530 = *D.10529;
            D.10531 = (int) D.10530;
            __result = D.10528 - D.10531;
            D.10532 = __s2_len > 2;
            D.10512 = __result == 0;
            D.10533 = D.10532 & D.10512;
            if (D.10533 != 0) goto <D.10534>; else goto <D.10535>;
            <D.10534>:
            D.10536 = &MEM[(void *)"ABCD" + 3B];
            D.10537 = *D.10536;
            D.10538 = (int) D.10537;
            D.10539 = __s2 + 3;
            D.10540 = *D.10539;
            D.10541 = (int) D.10540;
            __result = D.10538 - D.10541;
            <D.10535>:
            <D.10525>:
            <D.10515>:
          }
          D.7373 = __result;
        }
        iftmp.50 = -D.7373;
        goto <D.10542>;
        <D.10505>:
        iftmp.50 = __builtin_strcmp (s, "ABCD");
        <D.10542>:
        D.7374 = iftmp.50;
      }
      if (D.7374 != 0) goto <D.10543>; else goto <D.10544>;
      <D.10543>:
      D.10545 = 1;
      return D.10545;
      <D.10544>:
      D.10546 = (long unsigned int) n;
      strncpy (s, &m, D.10546);
      D.10547 = (sizetype) n;
      D.10548 = s + D.10547;
      *D.10548 = 0;
      D.10545 = 0;
      return D.10545;
    }
  finally
    {
      m = {CLOBBER};
    }
}


strncpy (char * restrict __dest, const char * restrict __src, size_t __len)
{
  char * D.10551;
  long unsigned int D.10552;

  D.10552 = __builtin_object_size (__dest, 1);
  D.10551 = __builtin___strncpy_chk (__dest, __src, __len, D.10552);
  return D.10551;
}


mono_test_marshal_stringbuilder2 (char * s, int n)
{
  long unsigned int D.10554;
  sizetype D.10555;
  char * D.10556;
  int D.10557;
  const char m[5];

  try
    {
      m = "EFGH";
      D.10554 = (long unsigned int) n;
      strncpy (s, &m, D.10554);
      D.10555 = (sizetype) n;
      D.10556 = s + D.10555;
      *D.10556 = 0;
      D.10557 = 0;
      return D.10557;
    }
  finally
    {
      m = {CLOBBER};
    }
}


mono_test_marshal_stringbuilder_default (char * s, int n)
{
  long unsigned int D.10560;
  sizetype D.10561;
  char * D.10562;
  int D.10563;
  const char m[36];

  try
    {
      m = "This is my message.  Isn\'t it nice?";
      D.10560 = (long unsigned int) n;
      strncpy (s, &m, D.10560);
      D.10561 = (sizetype) n;
      D.10562 = s + D.10561;
      *D.10562 = 0;
      D.10563 = 0;
      return D.10563;
    }
  finally
    {
      m = {CLOBBER};
    }
}


mono_test_marshal_stringbuilder_unicode (gunichar2 * s, int n)
{
  long int len.51;
  long int D.10567;
  long int len.52;
  int D.10569;
  long int len.53;
  long unsigned int len.54;
  int D.10574;
  const char m[36];
  gunichar2 * s2;
  glong len;

  try
    {
      m = "This is my message.  Isn\'t it nice?";
      s2 = monoeg_g_utf8_to_utf16 (&m, -1, 0B, &len, 0B);
      len.51 = len;
      D.10567 = len.51 + 1;
      len.52 = D.10567 * 2;
      len = len.52;
      D.10569 = n * 2;
      len.53 = (long int) D.10569;
      len.51 = len;
      if (len.53 < len.51) goto <D.10571>; else goto <D.10572>;
      <D.10571>:
      D.10569 = n * 2;
      len.53 = (long int) D.10569;
      len = len.53;
      <D.10572>:
      len.51 = len;
      len.54 = (long unsigned int) len.51;
      memcpy (s, s2, len.54);
      monoeg_g_free (s2);
      D.10574 = 0;
      return D.10574;
    }
  finally
    {
      m = {CLOBBER};
      len = {CLOBBER};
    }
}


mono_test_marshal_stringbuilder_out (char * * s)
{
  long unsigned int D.10577;
  long unsigned int D.10578;
  long unsigned int D.10579;
  long unsigned int D.10580;
  const char m[36];
  char * str;

  try
    {
      m = "This is my message.  Isn\'t it nice?";
      D.10577 = strlen (&m);
      D.10578 = D.10577 + 1;
      str = marshal_alloc (D.10578);
      D.10579 = strlen (&m);
      D.10580 = D.10579 + 1;
      memcpy (str, &m, D.10580);
      *s = str;
    }
  finally
    {
      m = {CLOBBER};
    }
}


mono_test_marshal_stringbuilder_out_unicode (gunichar2 * * s)
{
  long int len.55;
  long int D.10582;
  long int len.56;
  long unsigned int len.57;
  void * D.10585;
  long unsigned int len.58;
  gunichar2 * D.10587;
  int D.10588;
  const char m[36];
  gunichar2 * s2;
  glong len;

  try
    {
      m = "This is my message.  Isn\'t it nice?";
      s2 = monoeg_g_utf8_to_utf16 (&m, -1, 0B, &len, 0B);
      len.55 = len;
      D.10582 = len.55 + 1;
      len.56 = D.10582 * 2;
      len = len.56;
      len.55 = len;
      len.57 = (long unsigned int) len.55;
      D.10585 = marshal_alloc (len.57);
      *s = D.10585;
      len.55 = len;
      len.58 = (long unsigned int) len.55;
      D.10587 = *s;
      memcpy (D.10587, s2, len.58);
      monoeg_g_free (s2);
      D.10588 = 0;
      return D.10588;
    }
  finally
    {
      m = {CLOBBER};
      len = {CLOBBER};
    }
}


mono_test_marshal_stringbuilder_ref (char * * s)
{
  int D.7416;
  int iftmp.59;
  int D.7415;
  const char[4] * D.10594;
  unsigned char D.10595;
  int D.10596;
  unsigned char D.10597;
  int D.10598;
  _Bool D.10599;
  _Bool D.10600;
  _Bool D.10601;
  const unsigned char * D.10604;
  unsigned char D.10605;
  int D.10606;
  const unsigned char * D.10607;
  unsigned char D.10608;
  int D.10609;
  _Bool D.10610;
  _Bool D.10611;
  const unsigned char * D.10614;
  unsigned char D.10615;
  int D.10616;
  const unsigned char * D.10617;
  unsigned char D.10618;
  int D.10619;
  _Bool D.10620;
  _Bool D.10621;
  const unsigned char * D.10624;
  unsigned char D.10625;
  int D.10626;
  const unsigned char * D.10627;
  unsigned char D.10628;
  int D.10629;
  char * D.10631;
  int D.10634;
  long unsigned int D.10635;
  long unsigned int D.10636;
  long unsigned int D.10637;
  long unsigned int D.10638;
  const char m[36];
  char * str;

  try
    {
      m = "This is my message.  Isn\'t it nice?";
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = *s;
          D.10594 = "ABC";
          D.10595 = MEM[(const unsigned char *)D.10594];
          D.10596 = (int) D.10595;
          D.10597 = *__s2;
          D.10598 = (int) D.10597;
          __result = D.10596 - D.10598;
          {
            D.10599 = __s2_len != 0;
            D.10600 = __result == 0;
            D.10601 = D.10599 & D.10600;
            if (D.10601 != 0) goto <D.10602>; else goto <D.10603>;
            <D.10602>:
            D.10604 = &MEM[(void *)"ABC" + 1B];
            D.10605 = *D.10604;
            D.10606 = (int) D.10605;
            D.10607 = __s2 + 1;
            D.10608 = *D.10607;
            D.10609 = (int) D.10608;
            __result = D.10606 - D.10609;
            D.10610 = __s2_len > 1;
            D.10600 = __result == 0;
            D.10611 = D.10610 & D.10600;
            if (D.10611 != 0) goto <D.10612>; else goto <D.10613>;
            <D.10612>:
            D.10614 = &MEM[(void *)"ABC" + 2B];
            D.10615 = *D.10614;
            D.10616 = (int) D.10615;
            D.10617 = __s2 + 2;
            D.10618 = *D.10617;
            D.10619 = (int) D.10618;
            __result = D.10616 - D.10619;
            D.10620 = __s2_len > 2;
            D.10600 = __result == 0;
            D.10621 = D.10620 & D.10600;
            if (D.10621 != 0) goto <D.10622>; else goto <D.10623>;
            <D.10622>:
            D.10624 = &MEM[(void *)"ABC" + 3B];
            D.10625 = *D.10624;
            D.10626 = (int) D.10625;
            D.10627 = __s2 + 3;
            D.10628 = *D.10627;
            D.10629 = (int) D.10628;
            __result = D.10626 - D.10629;
            <D.10623>:
            <D.10613>:
            <D.10603>:
          }
          D.7415 = __result;
        }
        iftmp.59 = -D.7415;
        goto <D.10630>;
        <D.10593>:
        D.10631 = *s;
        iftmp.59 = __builtin_strcmp (D.10631, "ABC");
        <D.10630>:
        D.7416 = iftmp.59;
      }
      if (D.7416 != 0) goto <D.10632>; else goto <D.10633>;
      <D.10632>:
      D.10634 = 1;
      return D.10634;
      <D.10633>:
      D.10635 = strlen (&m);
      D.10636 = D.10635 + 1;
      str = marshal_alloc (D.10636);
      D.10637 = strlen (&m);
      D.10638 = D.10637 + 1;
      memcpy (str, &m, D.10638);
      *s = str;
      D.10634 = 0;
      return D.10634;
    }
  finally
    {
      m = {CLOBBER};
    }
}


mono_test_marshal_empty_string_array (char * * array)
{
  int D.10641;
  _Bool D.10642;

  D.10642 = array != 0B;
  D.10641 = (int) D.10642;
  return D.10641;
}


mono_test_marshal_string_array (char * * array)
{
  int D.7433;
  int iftmp.60;
  int D.7432;
  const char[4] * D.10647;
  unsigned char D.10648;
  int D.10649;
  unsigned char D.10650;
  int D.10651;
  _Bool D.10652;
  _Bool D.10653;
  _Bool D.10654;
  const unsigned char * D.10657;
  unsigned char D.10658;
  int D.10659;
  const unsigned char * D.10660;
  unsigned char D.10661;
  int D.10662;
  _Bool D.10663;
  _Bool D.10664;
  const unsigned char * D.10667;
  unsigned char D.10668;
  int D.10669;
  const unsigned char * D.10670;
  unsigned char D.10671;
  int D.10672;
  _Bool D.10673;
  _Bool D.10674;
  const unsigned char * D.10677;
  unsigned char D.10678;
  int D.10679;
  const unsigned char * D.10680;
  unsigned char D.10681;
  int D.10682;
  char * D.10684;
  int D.10687;
  int D.7442;
  int iftmp.61;
  int D.7441;
  const char[4] * D.10691;
  unsigned char D.10692;
  int D.10693;
  unsigned char D.10694;
  int D.10695;
  _Bool D.10696;
  _Bool D.10697;
  _Bool D.10698;
  const unsigned char * D.10701;
  unsigned char D.10702;
  int D.10703;
  const unsigned char * D.10704;
  unsigned char D.10705;
  int D.10706;
  _Bool D.10707;
  _Bool D.10708;
  const unsigned char * D.10711;
  unsigned char D.10712;
  int D.10713;
  const unsigned char * D.10714;
  unsigned char D.10715;
  int D.10716;
  _Bool D.10717;
  _Bool D.10718;
  const unsigned char * D.10721;
  unsigned char D.10722;
  int D.10723;
  const unsigned char * D.10724;
  unsigned char D.10725;
  int D.10726;
  char * * D.10728;
  char * D.10729;
  char * * D.10732;
  char * D.10733;

  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = *array;
      D.10647 = "ABC";
      D.10648 = MEM[(const unsigned char *)D.10647];
      D.10649 = (int) D.10648;
      D.10650 = *__s2;
      D.10651 = (int) D.10650;
      __result = D.10649 - D.10651;
      {
        D.10652 = __s2_len != 0;
        D.10653 = __result == 0;
        D.10654 = D.10652 & D.10653;
        if (D.10654 != 0) goto <D.10655>; else goto <D.10656>;
        <D.10655>:
        D.10657 = &MEM[(void *)"ABC" + 1B];
        D.10658 = *D.10657;
        D.10659 = (int) D.10658;
        D.10660 = __s2 + 1;
        D.10661 = *D.10660;
        D.10662 = (int) D.10661;
        __result = D.10659 - D.10662;
        D.10663 = __s2_len > 1;
        D.10653 = __result == 0;
        D.10664 = D.10663 & D.10653;
        if (D.10664 != 0) goto <D.10665>; else goto <D.10666>;
        <D.10665>:
        D.10667 = &MEM[(void *)"ABC" + 2B];
        D.10668 = *D.10667;
        D.10669 = (int) D.10668;
        D.10670 = __s2 + 2;
        D.10671 = *D.10670;
        D.10672 = (int) D.10671;
        __result = D.10669 - D.10672;
        D.10673 = __s2_len > 2;
        D.10653 = __result == 0;
        D.10674 = D.10673 & D.10653;
        if (D.10674 != 0) goto <D.10675>; else goto <D.10676>;
        <D.10675>:
        D.10677 = &MEM[(void *)"ABC" + 3B];
        D.10678 = *D.10677;
        D.10679 = (int) D.10678;
        D.10680 = __s2 + 3;
        D.10681 = *D.10680;
        D.10682 = (int) D.10681;
        __result = D.10679 - D.10682;
        <D.10676>:
        <D.10666>:
        <D.10656>:
      }
      D.7432 = __result;
    }
    iftmp.60 = -D.7432;
    goto <D.10683>;
    <D.10646>:
    D.10684 = *array;
    iftmp.60 = __builtin_strcmp (D.10684, "ABC");
    <D.10683>:
    D.7433 = iftmp.60;
  }
  if (D.7433 != 0) goto <D.10685>; else goto <D.10686>;
  <D.10685>:
  D.10687 = 1;
  return D.10687;
  <D.10686>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = MEM[(char * *)array + 8B];
      D.10691 = "DEF";
      D.10692 = MEM[(const unsigned char *)D.10691];
      D.10693 = (int) D.10692;
      D.10694 = *__s2;
      D.10695 = (int) D.10694;
      __result = D.10693 - D.10695;
      {
        D.10696 = __s2_len != 0;
        D.10697 = __result == 0;
        D.10698 = D.10696 & D.10697;
        if (D.10698 != 0) goto <D.10699>; else goto <D.10700>;
        <D.10699>:
        D.10701 = &MEM[(void *)"DEF" + 1B];
        D.10702 = *D.10701;
        D.10703 = (int) D.10702;
        D.10704 = __s2 + 1;
        D.10705 = *D.10704;
        D.10706 = (int) D.10705;
        __result = D.10703 - D.10706;
        D.10707 = __s2_len > 1;
        D.10697 = __result == 0;
        D.10708 = D.10707 & D.10697;
        if (D.10708 != 0) goto <D.10709>; else goto <D.10710>;
        <D.10709>:
        D.10711 = &MEM[(void *)"DEF" + 2B];
        D.10712 = *D.10711;
        D.10713 = (int) D.10712;
        D.10714 = __s2 + 2;
        D.10715 = *D.10714;
        D.10716 = (int) D.10715;
        __result = D.10713 - D.10716;
        D.10717 = __s2_len > 2;
        D.10697 = __result == 0;
        D.10718 = D.10717 & D.10697;
        if (D.10718 != 0) goto <D.10719>; else goto <D.10720>;
        <D.10719>:
        D.10721 = &MEM[(void *)"DEF" + 3B];
        D.10722 = *D.10721;
        D.10723 = (int) D.10722;
        D.10724 = __s2 + 3;
        D.10725 = *D.10724;
        D.10726 = (int) D.10725;
        __result = D.10723 - D.10726;
        <D.10720>:
        <D.10710>:
        <D.10700>:
      }
      D.7441 = __result;
    }
    iftmp.61 = -D.7441;
    goto <D.10727>;
    <D.10690>:
    D.10728 = array + 8;
    D.10729 = *D.10728;
    iftmp.61 = __builtin_strcmp (D.10729, "DEF");
    <D.10727>:
    D.7442 = iftmp.61;
  }
  if (D.7442 != 0) goto <D.10730>; else goto <D.10731>;
  <D.10730>:
  D.10687 = 2;
  return D.10687;
  <D.10731>:
  D.10732 = array + 16;
  D.10733 = *D.10732;
  if (D.10733 != 0B) goto <D.10734>; else goto <D.10735>;
  <D.10734>:
  D.10687 = 3;
  return D.10687;
  <D.10735>:
  D.10687 = 0;
  return D.10687;
}


mono_test_marshal_byref_string_array (char * * * array)
{
  char * * D.10737;
  int D.10740;
  int D.7454;
  int iftmp.62;
  int D.7453;
  const char[6] * D.10744;
  unsigned char D.10745;
  int D.10746;
  unsigned char D.10747;
  int D.10748;
  _Bool D.10749;
  _Bool D.10750;
  _Bool D.10751;
  const unsigned char * D.10754;
  unsigned char D.10755;
  int D.10756;
  const unsigned char * D.10757;
  unsigned char D.10758;
  int D.10759;
  _Bool D.10760;
  _Bool D.10761;
  const unsigned char * D.10764;
  unsigned char D.10765;
  int D.10766;
  const unsigned char * D.10767;
  unsigned char D.10768;
  int D.10769;
  _Bool D.10770;
  _Bool D.10771;
  const unsigned char * D.10774;
  unsigned char D.10775;
  int D.10776;
  const unsigned char * D.10777;
  unsigned char D.10778;
  int D.10779;
  char * D.10781;
  int D.7463;
  int iftmp.63;
  int D.7462;
  const char[5] * D.10787;
  unsigned char D.10788;
  int D.10789;
  unsigned char D.10790;
  int D.10791;
  _Bool D.10792;
  _Bool D.10793;
  _Bool D.10794;
  const unsigned char * D.10797;
  unsigned char D.10798;
  int D.10799;
  const unsigned char * D.10800;
  unsigned char D.10801;
  int D.10802;
  _Bool D.10803;
  _Bool D.10804;
  const unsigned char * D.10807;
  unsigned char D.10808;
  int D.10809;
  const unsigned char * D.10810;
  unsigned char D.10811;
  int D.10812;
  _Bool D.10813;
  _Bool D.10814;
  const unsigned char * D.10817;
  unsigned char D.10818;
  int D.10819;
  const unsigned char * D.10820;
  unsigned char D.10821;
  int D.10822;
  char * * D.10824;
  char * D.10825;
  int D.7472;
  int iftmp.64;
  int D.7471;
  const char[6] * D.10831;
  unsigned char D.10832;
  int D.10833;
  unsigned char D.10834;
  int D.10835;
  _Bool D.10836;
  _Bool D.10837;
  _Bool D.10838;
  const unsigned char * D.10841;
  unsigned char D.10842;
  int D.10843;
  const unsigned char * D.10844;
  unsigned char D.10845;
  int D.10846;
  _Bool D.10847;
  _Bool D.10848;
  const unsigned char * D.10851;
  unsigned char D.10852;
  int D.10853;
  const unsigned char * D.10854;
  unsigned char D.10855;
  int D.10856;
  _Bool D.10857;
  _Bool D.10858;
  const unsigned char * D.10861;
  unsigned char D.10862;
  int D.10863;
  const unsigned char * D.10864;
  unsigned char D.10865;
  int D.10866;
  char * * D.10868;
  char * D.10869;

  D.10737 = *array;
  if (D.10737 == 0B) goto <D.10738>; else goto <D.10739>;
  <D.10738>:
  D.10740 = 0;
  return D.10740;
  <D.10739>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 5;
    if (__s2_len <= 3) goto <D.10742>; else goto <D.10743>;
    <D.10742>:
    {
      const unsigned char * __s2;
      int __result;

      D.10737 = *array;
      __s2 = *D.10737;
      D.10744 = "Alpha";
      D.10745 = MEM[(const unsigned char *)D.10744];
      D.10746 = (int) D.10745;
      D.10747 = *__s2;
      D.10748 = (int) D.10747;
      __result = D.10746 - D.10748;
      {
        D.10749 = __s2_len != 0;
        D.10750 = __result == 0;
        D.10751 = D.10749 & D.10750;
        if (D.10751 != 0) goto <D.10752>; else goto <D.10753>;
        <D.10752>:
        D.10754 = &MEM[(void *)"Alpha" + 1B];
        D.10755 = *D.10754;
        D.10756 = (int) D.10755;
        D.10757 = __s2 + 1;
        D.10758 = *D.10757;
        D.10759 = (int) D.10758;
        __result = D.10756 - D.10759;
        D.10760 = __s2_len > 1;
        D.10750 = __result == 0;
        D.10761 = D.10760 & D.10750;
        if (D.10761 != 0) goto <D.10762>; else goto <D.10763>;
        <D.10762>:
        D.10764 = &MEM[(void *)"Alpha" + 2B];
        D.10765 = *D.10764;
        D.10766 = (int) D.10765;
        D.10767 = __s2 + 2;
        D.10768 = *D.10767;
        D.10769 = (int) D.10768;
        __result = D.10766 - D.10769;
        D.10770 = __s2_len > 2;
        D.10750 = __result == 0;
        D.10771 = D.10770 & D.10750;
        if (D.10771 != 0) goto <D.10772>; else goto <D.10773>;
        <D.10772>:
        D.10774 = &MEM[(void *)"Alpha" + 3B];
        D.10775 = *D.10774;
        D.10776 = (int) D.10775;
        D.10777 = __s2 + 3;
        D.10778 = *D.10777;
        D.10779 = (int) D.10778;
        __result = D.10776 - D.10779;
        <D.10773>:
        <D.10763>:
        <D.10753>:
      }
      D.7453 = __result;
    }
    iftmp.62 = -D.7453;
    goto <D.10780>;
    <D.10743>:
    D.10737 = *array;
    D.10781 = *D.10737;
    iftmp.62 = __builtin_strcmp (D.10781, "Alpha");
    <D.10780>:
    D.7454 = iftmp.62;
  }
  if (D.7454 != 0) goto <D.10782>; else goto <D.10783>;
  <D.10782>:
  D.10740 = 2;
  return D.10740;
  <D.10783>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.10785>; else goto <D.10786>;
    <D.10785>:
    {
      const unsigned char * __s2;
      int __result;

      D.10737 = *array;
      __s2 = MEM[(char * *)D.10737 + 8B];
      D.10787 = "Beta";
      D.10788 = MEM[(const unsigned char *)D.10787];
      D.10789 = (int) D.10788;
      D.10790 = *__s2;
      D.10791 = (int) D.10790;
      __result = D.10789 - D.10791;
      {
        D.10792 = __s2_len != 0;
        D.10793 = __result == 0;
        D.10794 = D.10792 & D.10793;
        if (D.10794 != 0) goto <D.10795>; else goto <D.10796>;
        <D.10795>:
        D.10797 = &MEM[(void *)"Beta" + 1B];
        D.10798 = *D.10797;
        D.10799 = (int) D.10798;
        D.10800 = __s2 + 1;
        D.10801 = *D.10800;
        D.10802 = (int) D.10801;
        __result = D.10799 - D.10802;
        D.10803 = __s2_len > 1;
        D.10793 = __result == 0;
        D.10804 = D.10803 & D.10793;
        if (D.10804 != 0) goto <D.10805>; else goto <D.10806>;
        <D.10805>:
        D.10807 = &MEM[(void *)"Beta" + 2B];
        D.10808 = *D.10807;
        D.10809 = (int) D.10808;
        D.10810 = __s2 + 2;
        D.10811 = *D.10810;
        D.10812 = (int) D.10811;
        __result = D.10809 - D.10812;
        D.10813 = __s2_len > 2;
        D.10793 = __result == 0;
        D.10814 = D.10813 & D.10793;
        if (D.10814 != 0) goto <D.10815>; else goto <D.10816>;
        <D.10815>:
        D.10817 = &MEM[(void *)"Beta" + 3B];
        D.10818 = *D.10817;
        D.10819 = (int) D.10818;
        D.10820 = __s2 + 3;
        D.10821 = *D.10820;
        D.10822 = (int) D.10821;
        __result = D.10819 - D.10822;
        <D.10816>:
        <D.10806>:
        <D.10796>:
      }
      D.7462 = __result;
    }
    iftmp.63 = -D.7462;
    goto <D.10823>;
    <D.10786>:
    D.10737 = *array;
    D.10824 = D.10737 + 8;
    D.10825 = *D.10824;
    iftmp.63 = __builtin_strcmp (D.10825, "Beta");
    <D.10823>:
    D.7463 = iftmp.63;
  }
  if (D.7463 != 0) goto <D.10826>; else goto <D.10827>;
  <D.10826>:
  D.10740 = 2;
  return D.10740;
  <D.10827>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 5;
    if (__s2_len <= 3) goto <D.10829>; else goto <D.10830>;
    <D.10829>:
    {
      const unsigned char * __s2;
      int __result;

      D.10737 = *array;
      __s2 = MEM[(char * *)D.10737 + 16B];
      D.10831 = "Gamma";
      D.10832 = MEM[(const unsigned char *)D.10831];
      D.10833 = (int) D.10832;
      D.10834 = *__s2;
      D.10835 = (int) D.10834;
      __result = D.10833 - D.10835;
      {
        D.10836 = __s2_len != 0;
        D.10837 = __result == 0;
        D.10838 = D.10836 & D.10837;
        if (D.10838 != 0) goto <D.10839>; else goto <D.10840>;
        <D.10839>:
        D.10841 = &MEM[(void *)"Gamma" + 1B];
        D.10842 = *D.10841;
        D.10843 = (int) D.10842;
        D.10844 = __s2 + 1;
        D.10845 = *D.10844;
        D.10846 = (int) D.10845;
        __result = D.10843 - D.10846;
        D.10847 = __s2_len > 1;
        D.10837 = __result == 0;
        D.10848 = D.10847 & D.10837;
        if (D.10848 != 0) goto <D.10849>; else goto <D.10850>;
        <D.10849>:
        D.10851 = &MEM[(void *)"Gamma" + 2B];
        D.10852 = *D.10851;
        D.10853 = (int) D.10852;
        D.10854 = __s2 + 2;
        D.10855 = *D.10854;
        D.10856 = (int) D.10855;
        __result = D.10853 - D.10856;
        D.10857 = __s2_len > 2;
        D.10837 = __result == 0;
        D.10858 = D.10857 & D.10837;
        if (D.10858 != 0) goto <D.10859>; else goto <D.10860>;
        <D.10859>:
        D.10861 = &MEM[(void *)"Gamma" + 3B];
        D.10862 = *D.10861;
        D.10863 = (int) D.10862;
        D.10864 = __s2 + 3;
        D.10865 = *D.10864;
        D.10866 = (int) D.10865;
        __result = D.10863 - D.10866;
        <D.10860>:
        <D.10850>:
        <D.10840>:
      }
      D.7471 = __result;
    }
    iftmp.64 = -D.7471;
    goto <D.10867>;
    <D.10830>:
    D.10737 = *array;
    D.10868 = D.10737 + 16;
    D.10869 = *D.10868;
    iftmp.64 = __builtin_strcmp (D.10869, "Gamma");
    <D.10867>:
    D.7472 = iftmp.64;
  }
  if (D.7472 != 0) goto <D.10870>; else goto <D.10871>;
  <D.10870>:
  D.10740 = 2;
  return D.10740;
  <D.10871>:
  D.10740 = 1;
  return D.10740;
}


mono_test_marshal_stringbuilder_array (char * * array)
{
  int D.7484;
  int iftmp.65;
  int D.7483;
  const char[4] * D.10876;
  unsigned char D.10877;
  int D.10878;
  unsigned char D.10879;
  int D.10880;
  _Bool D.10881;
  _Bool D.10882;
  _Bool D.10883;
  const unsigned char * D.10886;
  unsigned char D.10887;
  int D.10888;
  const unsigned char * D.10889;
  unsigned char D.10890;
  int D.10891;
  _Bool D.10892;
  _Bool D.10893;
  const unsigned char * D.10896;
  unsigned char D.10897;
  int D.10898;
  const unsigned char * D.10899;
  unsigned char D.10900;
  int D.10901;
  _Bool D.10902;
  _Bool D.10903;
  const unsigned char * D.10906;
  unsigned char D.10907;
  int D.10908;
  const unsigned char * D.10909;
  unsigned char D.10910;
  int D.10911;
  char * D.10913;
  int D.10916;
  int D.7493;
  int iftmp.66;
  int D.7492;
  const char[4] * D.10920;
  unsigned char D.10921;
  int D.10922;
  unsigned char D.10923;
  int D.10924;
  _Bool D.10925;
  _Bool D.10926;
  _Bool D.10927;
  const unsigned char * D.10930;
  unsigned char D.10931;
  int D.10932;
  const unsigned char * D.10933;
  unsigned char D.10934;
  int D.10935;
  _Bool D.10936;
  _Bool D.10937;
  const unsigned char * D.10940;
  unsigned char D.10941;
  int D.10942;
  const unsigned char * D.10943;
  unsigned char D.10944;
  int D.10945;
  _Bool D.10946;
  _Bool D.10947;
  const unsigned char * D.10950;
  unsigned char D.10951;
  int D.10952;
  const unsigned char * D.10953;
  unsigned char D.10954;
  int D.10955;
  char * * D.10957;
  char * D.10958;

  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = *array;
      D.10876 = "ABC";
      D.10877 = MEM[(const unsigned char *)D.10876];
      D.10878 = (int) D.10877;
      D.10879 = *__s2;
      D.10880 = (int) D.10879;
      __result = D.10878 - D.10880;
      {
        D.10881 = __s2_len != 0;
        D.10882 = __result == 0;
        D.10883 = D.10881 & D.10882;
        if (D.10883 != 0) goto <D.10884>; else goto <D.10885>;
        <D.10884>:
        D.10886 = &MEM[(void *)"ABC" + 1B];
        D.10887 = *D.10886;
        D.10888 = (int) D.10887;
        D.10889 = __s2 + 1;
        D.10890 = *D.10889;
        D.10891 = (int) D.10890;
        __result = D.10888 - D.10891;
        D.10892 = __s2_len > 1;
        D.10882 = __result == 0;
        D.10893 = D.10892 & D.10882;
        if (D.10893 != 0) goto <D.10894>; else goto <D.10895>;
        <D.10894>:
        D.10896 = &MEM[(void *)"ABC" + 2B];
        D.10897 = *D.10896;
        D.10898 = (int) D.10897;
        D.10899 = __s2 + 2;
        D.10900 = *D.10899;
        D.10901 = (int) D.10900;
        __result = D.10898 - D.10901;
        D.10902 = __s2_len > 2;
        D.10882 = __result == 0;
        D.10903 = D.10902 & D.10882;
        if (D.10903 != 0) goto <D.10904>; else goto <D.10905>;
        <D.10904>:
        D.10906 = &MEM[(void *)"ABC" + 3B];
        D.10907 = *D.10906;
        D.10908 = (int) D.10907;
        D.10909 = __s2 + 3;
        D.10910 = *D.10909;
        D.10911 = (int) D.10910;
        __result = D.10908 - D.10911;
        <D.10905>:
        <D.10895>:
        <D.10885>:
      }
      D.7483 = __result;
    }
    iftmp.65 = -D.7483;
    goto <D.10912>;
    <D.10875>:
    D.10913 = *array;
    iftmp.65 = __builtin_strcmp (D.10913, "ABC");
    <D.10912>:
    D.7484 = iftmp.65;
  }
  if (D.7484 != 0) goto <D.10914>; else goto <D.10915>;
  <D.10914>:
  D.10916 = 1;
  return D.10916;
  <D.10915>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = MEM[(char * *)array + 8B];
      D.10920 = "DEF";
      D.10921 = MEM[(const unsigned char *)D.10920];
      D.10922 = (int) D.10921;
      D.10923 = *__s2;
      D.10924 = (int) D.10923;
      __result = D.10922 - D.10924;
      {
        D.10925 = __s2_len != 0;
        D.10926 = __result == 0;
        D.10927 = D.10925 & D.10926;
        if (D.10927 != 0) goto <D.10928>; else goto <D.10929>;
        <D.10928>:
        D.10930 = &MEM[(void *)"DEF" + 1B];
        D.10931 = *D.10930;
        D.10932 = (int) D.10931;
        D.10933 = __s2 + 1;
        D.10934 = *D.10933;
        D.10935 = (int) D.10934;
        __result = D.10932 - D.10935;
        D.10936 = __s2_len > 1;
        D.10926 = __result == 0;
        D.10937 = D.10936 & D.10926;
        if (D.10937 != 0) goto <D.10938>; else goto <D.10939>;
        <D.10938>:
        D.10940 = &MEM[(void *)"DEF" + 2B];
        D.10941 = *D.10940;
        D.10942 = (int) D.10941;
        D.10943 = __s2 + 2;
        D.10944 = *D.10943;
        D.10945 = (int) D.10944;
        __result = D.10942 - D.10945;
        D.10946 = __s2_len > 2;
        D.10926 = __result == 0;
        D.10947 = D.10946 & D.10926;
        if (D.10947 != 0) goto <D.10948>; else goto <D.10949>;
        <D.10948>:
        D.10950 = &MEM[(void *)"DEF" + 3B];
        D.10951 = *D.10950;
        D.10952 = (int) D.10951;
        D.10953 = __s2 + 3;
        D.10954 = *D.10953;
        D.10955 = (int) D.10954;
        __result = D.10952 - D.10955;
        <D.10949>:
        <D.10939>:
        <D.10929>:
      }
      D.7492 = __result;
    }
    iftmp.66 = -D.7492;
    goto <D.10956>;
    <D.10919>:
    D.10957 = array + 8;
    D.10958 = *D.10957;
    iftmp.66 = __builtin_strcmp (D.10958, "DEF");
    <D.10956>:
    D.7493 = iftmp.66;
  }
  if (D.7493 != 0) goto <D.10959>; else goto <D.10960>;
  <D.10959>:
  D.10916 = 2;
  return D.10916;
  <D.10960>:
  D.10913 = *array;
  strcpy (D.10913, "DEF");
  D.10957 = array + 8;
  D.10958 = *D.10957;
  strcpy (D.10958, "ABC");
  D.10916 = 0;
  return D.10916;
}


strcpy (char * restrict __dest, const char * restrict __src)
{
  char * D.10962;
  long unsigned int D.10963;

  D.10963 = __builtin_object_size (__dest, 1);
  D.10962 = __builtin___strcpy_chk (__dest, __src, D.10963);
  return D.10962;
}


mono_test_marshal_unicode_string_array (gunichar2 * * array, char * * array2)
{
  gunichar2 * D.10965;
  int D.7508;
  int iftmp.67;
  int D.7507;
  const char[4] * D.10969;
  unsigned char D.10970;
  int D.10971;
  unsigned char D.10972;
  int D.10973;
  _Bool D.10974;
  _Bool D.10975;
  _Bool D.10976;
  const unsigned char * D.10979;
  unsigned char D.10980;
  int D.10981;
  const unsigned char * D.10982;
  unsigned char D.10983;
  int D.10984;
  _Bool D.10985;
  _Bool D.10986;
  const unsigned char * D.10989;
  unsigned char D.10990;
  int D.10991;
  const unsigned char * D.10992;
  unsigned char D.10993;
  int D.10994;
  _Bool D.10995;
  _Bool D.10996;
  const unsigned char * D.10999;
  unsigned char D.11000;
  int D.11001;
  const unsigned char * D.11002;
  unsigned char D.11003;
  int D.11004;
  int D.11008;
  gunichar2 * * D.11009;
  gunichar2 * D.11010;
  int D.7517;
  int iftmp.68;
  int D.7516;
  const char[4] * D.11014;
  unsigned char D.11015;
  int D.11016;
  unsigned char D.11017;
  int D.11018;
  _Bool D.11019;
  _Bool D.11020;
  _Bool D.11021;
  const unsigned char * D.11024;
  unsigned char D.11025;
  int D.11026;
  const unsigned char * D.11027;
  unsigned char D.11028;
  int D.11029;
  _Bool D.11030;
  _Bool D.11031;
  const unsigned char * D.11034;
  unsigned char D.11035;
  int D.11036;
  const unsigned char * D.11037;
  unsigned char D.11038;
  int D.11039;
  _Bool D.11040;
  _Bool D.11041;
  const unsigned char * D.11044;
  unsigned char D.11045;
  int D.11046;
  const unsigned char * D.11047;
  unsigned char D.11048;
  int D.11049;
  int D.7526;
  int iftmp.69;
  int D.7525;
  unsigned char D.11056;
  int D.11057;
  _Bool D.11058;
  _Bool D.11059;
  _Bool D.11060;
  const unsigned char * D.11063;
  unsigned char D.11064;
  int D.11065;
  _Bool D.11066;
  _Bool D.11067;
  const unsigned char * D.11070;
  unsigned char D.11071;
  int D.11072;
  _Bool D.11073;
  _Bool D.11074;
  const unsigned char * D.11077;
  unsigned char D.11078;
  int D.11079;
  char * D.11081;
  int D.7535;
  int iftmp.70;
  int D.7534;
  unsigned char D.11087;
  int D.11088;
  _Bool D.11089;
  _Bool D.11090;
  _Bool D.11091;
  const unsigned char * D.11094;
  unsigned char D.11095;
  int D.11096;
  _Bool D.11097;
  _Bool D.11098;
  const unsigned char * D.11101;
  unsigned char D.11102;
  int D.11103;
  _Bool D.11104;
  _Bool D.11105;
  const unsigned char * D.11108;
  unsigned char D.11109;
  int D.11110;
  char * * D.11112;
  char * D.11113;
  struct GError * error;
  char * s;

  try
    {
      error = 0B;
      D.10965 = *array;
      s = monoeg_g_utf16_to_utf8 (D.10965, -1, 0B, 0B, &error);
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = s;
          D.10969 = "ABC";
          D.10970 = MEM[(const unsigned char *)D.10969];
          D.10971 = (int) D.10970;
          D.10972 = *__s2;
          D.10973 = (int) D.10972;
          __result = D.10971 - D.10973;
          {
            D.10974 = __s2_len != 0;
            D.10975 = __result == 0;
            D.10976 = D.10974 & D.10975;
            if (D.10976 != 0) goto <D.10977>; else goto <D.10978>;
            <D.10977>:
            D.10979 = &MEM[(void *)"ABC" + 1B];
            D.10980 = *D.10979;
            D.10981 = (int) D.10980;
            D.10982 = __s2 + 1;
            D.10983 = *D.10982;
            D.10984 = (int) D.10983;
            __result = D.10981 - D.10984;
            D.10985 = __s2_len > 1;
            D.10975 = __result == 0;
            D.10986 = D.10985 & D.10975;
            if (D.10986 != 0) goto <D.10987>; else goto <D.10988>;
            <D.10987>:
            D.10989 = &MEM[(void *)"ABC" + 2B];
            D.10990 = *D.10989;
            D.10991 = (int) D.10990;
            D.10992 = __s2 + 2;
            D.10993 = *D.10992;
            D.10994 = (int) D.10993;
            __result = D.10991 - D.10994;
            D.10995 = __s2_len > 2;
            D.10975 = __result == 0;
            D.10996 = D.10995 & D.10975;
            if (D.10996 != 0) goto <D.10997>; else goto <D.10998>;
            <D.10997>:
            D.10999 = &MEM[(void *)"ABC" + 3B];
            D.11000 = *D.10999;
            D.11001 = (int) D.11000;
            D.11002 = __s2 + 3;
            D.11003 = *D.11002;
            D.11004 = (int) D.11003;
            __result = D.11001 - D.11004;
            <D.10998>:
            <D.10988>:
            <D.10978>:
          }
          D.7507 = __result;
        }
        iftmp.67 = -D.7507;
        goto <D.11005>;
        <D.10968>:
        iftmp.67 = __builtin_strcmp (s, "ABC");
        <D.11005>:
        D.7508 = iftmp.67;
      }
      if (D.7508 != 0) goto <D.11006>; else goto <D.11007>;
      <D.11006>:
      monoeg_g_free (s);
      D.11008 = 1;
      return D.11008;
      <D.11007>:
      monoeg_g_free (s);
      D.11009 = array + 8;
      D.11010 = *D.11009;
      s = monoeg_g_utf16_to_utf8 (D.11010, -1, 0B, 0B, &error);
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = s;
          D.11014 = "DEF";
          D.11015 = MEM[(const unsigned char *)D.11014];
          D.11016 = (int) D.11015;
          D.11017 = *__s2;
          D.11018 = (int) D.11017;
          __result = D.11016 - D.11018;
          {
            D.11019 = __s2_len != 0;
            D.11020 = __result == 0;
            D.11021 = D.11019 & D.11020;
            if (D.11021 != 0) goto <D.11022>; else goto <D.11023>;
            <D.11022>:
            D.11024 = &MEM[(void *)"DEF" + 1B];
            D.11025 = *D.11024;
            D.11026 = (int) D.11025;
            D.11027 = __s2 + 1;
            D.11028 = *D.11027;
            D.11029 = (int) D.11028;
            __result = D.11026 - D.11029;
            D.11030 = __s2_len > 1;
            D.11020 = __result == 0;
            D.11031 = D.11030 & D.11020;
            if (D.11031 != 0) goto <D.11032>; else goto <D.11033>;
            <D.11032>:
            D.11034 = &MEM[(void *)"DEF" + 2B];
            D.11035 = *D.11034;
            D.11036 = (int) D.11035;
            D.11037 = __s2 + 2;
            D.11038 = *D.11037;
            D.11039 = (int) D.11038;
            __result = D.11036 - D.11039;
            D.11040 = __s2_len > 2;
            D.11020 = __result == 0;
            D.11041 = D.11040 & D.11020;
            if (D.11041 != 0) goto <D.11042>; else goto <D.11043>;
            <D.11042>:
            D.11044 = &MEM[(void *)"DEF" + 3B];
            D.11045 = *D.11044;
            D.11046 = (int) D.11045;
            D.11047 = __s2 + 3;
            D.11048 = *D.11047;
            D.11049 = (int) D.11048;
            __result = D.11046 - D.11049;
            <D.11043>:
            <D.11033>:
            <D.11023>:
          }
          D.7516 = __result;
        }
        iftmp.68 = -D.7516;
        goto <D.11050>;
        <D.11013>:
        iftmp.68 = __builtin_strcmp (s, "DEF");
        <D.11050>:
        D.7517 = iftmp.68;
      }
      if (D.7517 != 0) goto <D.11051>; else goto <D.11052>;
      <D.11051>:
      monoeg_g_free (s);
      D.11008 = 2;
      return D.11008;
      <D.11052>:
      monoeg_g_free (s);
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = *array2;
          D.10969 = "ABC";
          D.10970 = MEM[(const unsigned char *)D.10969];
          D.10971 = (int) D.10970;
          D.11056 = *__s2;
          D.11057 = (int) D.11056;
          __result = D.10971 - D.11057;
          {
            D.11058 = __s2_len != 0;
            D.11059 = __result == 0;
            D.11060 = D.11058 & D.11059;
            if (D.11060 != 0) goto <D.11061>; else goto <D.11062>;
            <D.11061>:
            D.10979 = &MEM[(void *)"ABC" + 1B];
            D.10980 = *D.10979;
            D.10981 = (int) D.10980;
            D.11063 = __s2 + 1;
            D.11064 = *D.11063;
            D.11065 = (int) D.11064;
            __result = D.10981 - D.11065;
            D.11066 = __s2_len > 1;
            D.11059 = __result == 0;
            D.11067 = D.11066 & D.11059;
            if (D.11067 != 0) goto <D.11068>; else goto <D.11069>;
            <D.11068>:
            D.10989 = &MEM[(void *)"ABC" + 2B];
            D.10990 = *D.10989;
            D.10991 = (int) D.10990;
            D.11070 = __s2 + 2;
            D.11071 = *D.11070;
            D.11072 = (int) D.11071;
            __result = D.10991 - D.11072;
            D.11073 = __s2_len > 2;
            D.11059 = __result == 0;
            D.11074 = D.11073 & D.11059;
            if (D.11074 != 0) goto <D.11075>; else goto <D.11076>;
            <D.11075>:
            D.10999 = &MEM[(void *)"ABC" + 3B];
            D.11000 = *D.10999;
            D.11001 = (int) D.11000;
            D.11077 = __s2 + 3;
            D.11078 = *D.11077;
            D.11079 = (int) D.11078;
            __result = D.11001 - D.11079;
            <D.11076>:
            <D.11069>:
            <D.11062>:
          }
          D.7525 = __result;
        }
        iftmp.69 = -D.7525;
        goto <D.11080>;
        <D.11055>:
        D.11081 = *array2;
        iftmp.69 = __builtin_strcmp (D.11081, "ABC");
        <D.11080>:
        D.7526 = iftmp.69;
      }
      if (D.7526 != 0) goto <D.11082>; else goto <D.11083>;
      <D.11082>:
      D.11008 = 3;
      return D.11008;
      <D.11083>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = MEM[(char * *)array2 + 8B];
          D.11014 = "DEF";
          D.11015 = MEM[(const unsigned char *)D.11014];
          D.11016 = (int) D.11015;
          D.11087 = *__s2;
          D.11088 = (int) D.11087;
          __result = D.11016 - D.11088;
          {
            D.11089 = __s2_len != 0;
            D.11090 = __result == 0;
            D.11091 = D.11089 & D.11090;
            if (D.11091 != 0) goto <D.11092>; else goto <D.11093>;
            <D.11092>:
            D.11024 = &MEM[(void *)"DEF" + 1B];
            D.11025 = *D.11024;
            D.11026 = (int) D.11025;
            D.11094 = __s2 + 1;
            D.11095 = *D.11094;
            D.11096 = (int) D.11095;
            __result = D.11026 - D.11096;
            D.11097 = __s2_len > 1;
            D.11090 = __result == 0;
            D.11098 = D.11097 & D.11090;
            if (D.11098 != 0) goto <D.11099>; else goto <D.11100>;
            <D.11099>:
            D.11034 = &MEM[(void *)"DEF" + 2B];
            D.11035 = *D.11034;
            D.11036 = (int) D.11035;
            D.11101 = __s2 + 2;
            D.11102 = *D.11101;
            D.11103 = (int) D.11102;
            __result = D.11036 - D.11103;
            D.11104 = __s2_len > 2;
            D.11090 = __result == 0;
            D.11105 = D.11104 & D.11090;
            if (D.11105 != 0) goto <D.11106>; else goto <D.11107>;
            <D.11106>:
            D.11044 = &MEM[(void *)"DEF" + 3B];
            D.11045 = *D.11044;
            D.11046 = (int) D.11045;
            D.11108 = __s2 + 3;
            D.11109 = *D.11108;
            D.11110 = (int) D.11109;
            __result = D.11046 - D.11110;
            <D.11107>:
            <D.11100>:
            <D.11093>:
          }
          D.7534 = __result;
        }
        iftmp.70 = -D.7534;
        goto <D.11111>;
        <D.11086>:
        D.11112 = array2 + 8;
        D.11113 = *D.11112;
        iftmp.70 = __builtin_strcmp (D.11113, "DEF");
        <D.11111>:
        D.7535 = iftmp.70;
      }
      if (D.7535 != 0) goto <D.11114>; else goto <D.11115>;
      <D.11114>:
      D.11008 = 4;
      return D.11008;
      <D.11115>:
      D.11008 = 0;
      return D.11008;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_test_empty_struct (int a, struct EmptyStruct es, int b)
{
  _Bool D.11118;
  _Bool D.11119;
  _Bool D.11120;
  int D.11123;

  D.11118 = a == 1;
  D.11119 = b == 2;
  D.11120 = D.11118 & D.11119;
  if (D.11120 != 0) goto <D.11121>; else goto <D.11122>;
  <D.11121>:
  D.11123 = 0;
  return D.11123;
  <D.11122>:
  D.11123 = 1;
  return D.11123;
}


mono_test_byvalstr_gen ()
{
  struct ByValStrStruct * D.11125;
  struct ByValStrStruct * ret;

  ret = malloc (100);
  memset (ret, 97, 99);
  ret->a[99] = 0;
  D.11125 = ret;
  return D.11125;
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.11129;
  int D.11134;
  void * D.11136;
  long unsigned int D.11137;

  D.11129 = __builtin_constant_p (__len);
  if (D.11129 != 0) goto <D.11130>; else goto <D.11131>;
  <D.11130>:
  if (__len == 0) goto <D.11132>; else goto <D.11133>;
  <D.11132>:
  D.11134 = __builtin_constant_p (__ch);
  if (D.11134 == 0) goto <D.11127>; else goto <D.11135>;
  <D.11135>:
  if (__ch != 0) goto <D.11127>; else goto <D.11128>;
  <D.11127>:
  __warn_memset_zero_len ();
  D.11136 = __dest;
  return D.11136;
  <D.11128>:
  <D.11133>:
  <D.11131>:
  D.11137 = __builtin_object_size (__dest, 0);
  D.11136 = __builtin___memset_chk (__dest, __ch, __len, D.11137);
  return D.11136;
}


mono_test_byvalstr_check (struct ByValStrStruct * data, char * correctString)
{
  int ret.71;
  char[100] * D.11139;
  int D.11140;
  _Bool D.11141;
  int ret;

  {
    size_t __s1_len;
    size_t __s2_len;

    D.11139 = &data->a;
    ret.71 = __builtin_strcmp (D.11139, correctString);
  }
  ret = ret.71;
  monoeg_g_free (data);
  D.11141 = ret != 0;
  D.11140 = (int) D.11141;
  return D.11140;
}


mono_test_byvalstr_check_unicode (struct ByValStrStruct_Unicode * ref, int test)
{
  int D.11143;
  int D.11146;
  _Bool D.11147;
  _Bool D.11148;
  _Bool D.11149;
  unsigned int D.11154;
  unsigned int D.11155;
  short unsigned int D.11157;

  D.11143 = ref->flag;
  if (D.11143 != 305441741) goto <D.11144>; else goto <D.11145>;
  <D.11144>:
  printf ("overwritten data");
  D.11146 = 1;
  return D.11146;
  <D.11145>:
  D.11147 = test == 1;
  D.11148 = test == 3;
  D.11149 = D.11147 | D.11148;
  if (D.11149 != 0) goto <D.11150>; else goto <D.11151>;
  <D.11150>:
  D.11154 = BIT_FIELD_REF <*ref, 32, 0>;
  D.11155 = D.11154;
  if (D.11155 != 3276849) goto <D.11152>; else goto <D.11156>;
  <D.11156>:
  D.11157 = ref->a[2];
  if (D.11157 != 51) goto <D.11152>; else goto <D.11153>;
  <D.11152>:
  D.11146 = 1;
  return D.11146;
  <D.11153>:
  D.11146 = 0;
  return D.11146;
  <D.11151>:
  if (test == 2) goto <D.11158>; else goto <D.11159>;
  <D.11158>:
  D.11154 = BIT_FIELD_REF <*ref, 32, 0>;
  D.11155 = D.11154;
  if (D.11155 != 3276849) goto <D.11160>; else goto <D.11161>;
  <D.11160>:
  D.11146 = 1;
  return D.11146;
  <D.11161>:
  D.11146 = 0;
  return D.11146;
  <D.11159>:
  D.11146 = 10;
  return D.11146;
}


NameManglingAnsi (char * data)
{
  int D.11163;
  char D.11164;
  int D.11165;
  char * D.11166;
  char D.11167;
  int D.11168;
  int D.11169;
  char * D.11170;
  char D.11171;
  int D.11172;

  D.11164 = *data;
  D.11165 = (int) D.11164;
  D.11166 = data + 1;
  D.11167 = *D.11166;
  D.11168 = (int) D.11167;
  D.11169 = D.11165 + D.11168;
  D.11170 = data + 2;
  D.11171 = *D.11170;
  D.11172 = (int) D.11171;
  D.11163 = D.11169 + D.11172;
  return D.11163;
}


NameManglingAnsiA (char * data)
{
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "libtest.c", 1319);
}


NameManglingAnsiW (char * data)
{
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "libtest.c", 1325);
}


NameManglingAnsi2A (char * data)
{
  int D.11174;
  char D.11175;
  int D.11176;
  char * D.11177;
  char D.11178;
  int D.11179;
  int D.11180;
  char * D.11181;
  char D.11182;
  int D.11183;

  D.11175 = *data;
  D.11176 = (int) D.11175;
  D.11177 = data + 1;
  D.11178 = *D.11177;
  D.11179 = (int) D.11178;
  D.11180 = D.11176 + D.11179;
  D.11181 = data + 2;
  D.11182 = *D.11181;
  D.11183 = (int) D.11182;
  D.11174 = D.11180 + D.11183;
  return D.11174;
}


NameManglingAnsi2W (char * data)
{
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "libtest.c", 1337);
}


NameManglingUnicode (char * data)
{
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "libtest.c", 1343);
}


NameManglingUnicodeW (gunichar2 * data)
{
  int D.11185;
  short unsigned int D.11186;
  int D.11187;
  gunichar2 * D.11188;
  short unsigned int D.11189;
  int D.11190;
  int D.11191;
  gunichar2 * D.11192;
  short unsigned int D.11193;
  int D.11194;

  D.11186 = *data;
  D.11187 = (int) D.11186;
  D.11188 = data + 2;
  D.11189 = *D.11188;
  D.11190 = (int) D.11189;
  D.11191 = D.11187 + D.11190;
  D.11192 = data + 4;
  D.11193 = *D.11192;
  D.11194 = (int) D.11193;
  D.11185 = D.11191 + D.11194;
  return D.11185;
}


NameManglingUnicode2 (gunichar2 * data)
{
  int D.11196;
  short unsigned int D.11197;
  int D.11198;
  gunichar2 * D.11199;
  short unsigned int D.11200;
  int D.11201;
  int D.11202;
  gunichar2 * D.11203;
  short unsigned int D.11204;
  int D.11205;

  D.11197 = *data;
  D.11198 = (int) D.11197;
  D.11199 = data + 2;
  D.11200 = *D.11199;
  D.11201 = (int) D.11200;
  D.11202 = D.11198 + D.11201;
  D.11203 = data + 4;
  D.11204 = *D.11203;
  D.11205 = (int) D.11204;
  D.11196 = D.11202 + D.11205;
  return D.11196;
}


NameManglingAutoW (char * data)
{
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "libtest.c", 1364);
}


NameManglingAuto (char * data)
{
  int D.11207;
  char D.11208;
  int D.11209;
  char * D.11210;
  char D.11211;
  int D.11212;
  int D.11213;
  char * D.11214;
  char D.11215;
  int D.11216;
  int D.11217;
  _Bool D.11218;

  D.11208 = *data;
  D.11209 = (int) D.11208;
  D.11210 = data + 1;
  D.11211 = *D.11210;
  D.11212 = (int) D.11211;
  D.11213 = D.11209 + D.11212;
  D.11214 = data + 2;
  D.11215 = *D.11214;
  D.11216 = (int) D.11215;
  D.11217 = D.11213 + D.11216;
  D.11218 = D.11217 != 198;
  D.11207 = (int) D.11218;
  return D.11207;
}


callFunction (int (*intcharFunc) (const char *) f)
{
  f ("ABC");
}


class_marshal_test0 (struct SimpleObj * obj1)
{
  int D.7620;
  int iftmp.72;
  int D.7619;
  const char[3] * D.11223;
  unsigned char D.11224;
  int D.11225;
  unsigned char D.11226;
  int D.11227;
  _Bool D.11228;
  _Bool D.11229;
  _Bool D.11230;
  const unsigned char * D.11233;
  unsigned char D.11234;
  int D.11235;
  const unsigned char * D.11236;
  unsigned char D.11237;
  int D.11238;
  _Bool D.11239;
  _Bool D.11240;
  const unsigned char * D.11243;
  unsigned char D.11244;
  int D.11245;
  const unsigned char * D.11246;
  unsigned char D.11247;
  int D.11248;
  _Bool D.11249;
  _Bool D.11250;
  const unsigned char * D.11253;
  unsigned char D.11254;
  int D.11255;
  const unsigned char * D.11256;
  unsigned char D.11257;
  int D.11258;
  const char * D.11260;
  int D.11263;
  int D.11264;

  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 2;
    if (__s2_len <= 3) goto <D.11221>; else goto <D.11222>;
    <D.11221>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = obj1->str;
      D.11223 = "T1";
      D.11224 = MEM[(const unsigned char *)D.11223];
      D.11225 = (int) D.11224;
      D.11226 = *__s2;
      D.11227 = (int) D.11226;
      __result = D.11225 - D.11227;
      {
        D.11228 = __s2_len != 0;
        D.11229 = __result == 0;
        D.11230 = D.11228 & D.11229;
        if (D.11230 != 0) goto <D.11231>; else goto <D.11232>;
        <D.11231>:
        D.11233 = &MEM[(void *)"T1" + 1B];
        D.11234 = *D.11233;
        D.11235 = (int) D.11234;
        D.11236 = __s2 + 1;
        D.11237 = *D.11236;
        D.11238 = (int) D.11237;
        __result = D.11235 - D.11238;
        D.11239 = __s2_len > 1;
        D.11229 = __result == 0;
        D.11240 = D.11239 & D.11229;
        if (D.11240 != 0) goto <D.11241>; else goto <D.11242>;
        <D.11241>:
        D.11243 = &MEM[(void *)"T1" + 2B];
        D.11244 = *D.11243;
        D.11245 = (int) D.11244;
        D.11246 = __s2 + 2;
        D.11247 = *D.11246;
        D.11248 = (int) D.11247;
        __result = D.11245 - D.11248;
        D.11249 = __s2_len > 2;
        D.11229 = __result == 0;
        D.11250 = D.11249 & D.11229;
        if (D.11250 != 0) goto <D.11251>; else goto <D.11252>;
        <D.11251>:
        D.11253 = &MEM[(void *)"T1" + 3B];
        D.11254 = *D.11253;
        D.11255 = (int) D.11254;
        D.11256 = __s2 + 3;
        D.11257 = *D.11256;
        D.11258 = (int) D.11257;
        __result = D.11255 - D.11258;
        <D.11252>:
        <D.11242>:
        <D.11232>:
      }
      D.7619 = __result;
    }
    iftmp.72 = -D.7619;
    goto <D.11259>;
    <D.11222>:
    D.11260 = obj1->str;
    iftmp.72 = __builtin_strcmp (D.11260, "T1");
    <D.11259>:
    D.7620 = iftmp.72;
  }
  if (D.7620 != 0) goto <D.11261>; else goto <D.11262>;
  <D.11261>:
  D.11263 = -1;
  return D.11263;
  <D.11262>:
  D.11264 = obj1->i;
  if (D.11264 != 4) goto <D.11265>; else goto <D.11266>;
  <D.11265>:
  D.11263 = -2;
  return D.11263;
  <D.11266>:
  D.11263 = 0;
  return D.11263;
}


class_marshal_test4 (struct SimpleObj * obj1)
{
  int D.11270;

  if (obj1 != 0B) goto <D.11268>; else goto <D.11269>;
  <D.11268>:
  D.11270 = -1;
  return D.11270;
  <D.11269>:
  D.11270 = 0;
  return D.11270;
}


class_marshal_test1 (struct SimpleObj * * obj1)
{
  char * D.11272;
  struct SimpleObj * res;

  res = malloc (16);
  D.11272 = marshal_strdup ("ABC");
  res->str = D.11272;
  res->i = 5;
  *obj1 = res;
}


class_marshal_test2 (struct SimpleObj * * obj1)
{
  int D.7639;
  int iftmp.73;
  int D.7638;
  struct SimpleObj * D.11276;
  const char[4] * D.11277;
  unsigned char D.11278;
  int D.11279;
  unsigned char D.11280;
  int D.11281;
  _Bool D.11282;
  _Bool D.11283;
  _Bool D.11284;
  const unsigned char * D.11287;
  unsigned char D.11288;
  int D.11289;
  const unsigned char * D.11290;
  unsigned char D.11291;
  int D.11292;
  _Bool D.11293;
  _Bool D.11294;
  const unsigned char * D.11297;
  unsigned char D.11298;
  int D.11299;
  const unsigned char * D.11300;
  unsigned char D.11301;
  int D.11302;
  _Bool D.11303;
  _Bool D.11304;
  const unsigned char * D.11307;
  unsigned char D.11308;
  int D.11309;
  const unsigned char * D.11310;
  unsigned char D.11311;
  int D.11312;
  const char * D.11314;
  int D.11317;
  int D.11318;

  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.11276 = *obj1;
      __s2 = D.11276->str;
      D.11277 = "ABC";
      D.11278 = MEM[(const unsigned char *)D.11277];
      D.11279 = (int) D.11278;
      D.11280 = *__s2;
      D.11281 = (int) D.11280;
      __result = D.11279 - D.11281;
      {
        D.11282 = __s2_len != 0;
        D.11283 = __result == 0;
        D.11284 = D.11282 & D.11283;
        if (D.11284 != 0) goto <D.11285>; else goto <D.11286>;
        <D.11285>:
        D.11287 = &MEM[(void *)"ABC" + 1B];
        D.11288 = *D.11287;
        D.11289 = (int) D.11288;
        D.11290 = __s2 + 1;
        D.11291 = *D.11290;
        D.11292 = (int) D.11291;
        __result = D.11289 - D.11292;
        D.11293 = __s2_len > 1;
        D.11283 = __result == 0;
        D.11294 = D.11293 & D.11283;
        if (D.11294 != 0) goto <D.11295>; else goto <D.11296>;
        <D.11295>:
        D.11297 = &MEM[(void *)"ABC" + 2B];
        D.11298 = *D.11297;
        D.11299 = (int) D.11298;
        D.11300 = __s2 + 2;
        D.11301 = *D.11300;
        D.11302 = (int) D.11301;
        __result = D.11299 - D.11302;
        D.11303 = __s2_len > 2;
        D.11283 = __result == 0;
        D.11304 = D.11303 & D.11283;
        if (D.11304 != 0) goto <D.11305>; else goto <D.11306>;
        <D.11305>:
        D.11307 = &MEM[(void *)"ABC" + 3B];
        D.11308 = *D.11307;
        D.11309 = (int) D.11308;
        D.11310 = __s2 + 3;
        D.11311 = *D.11310;
        D.11312 = (int) D.11311;
        __result = D.11309 - D.11312;
        <D.11306>:
        <D.11296>:
        <D.11286>:
      }
      D.7638 = __result;
    }
    iftmp.73 = -D.7638;
    goto <D.11313>;
    <D.11275>:
    D.11276 = *obj1;
    D.11314 = D.11276->str;
    iftmp.73 = __builtin_strcmp (D.11314, "ABC");
    <D.11313>:
    D.7639 = iftmp.73;
  }
  if (D.7639 != 0) goto <D.11315>; else goto <D.11316>;
  <D.11315>:
  D.11317 = -1;
  return D.11317;
  <D.11316>:
  D.11276 = *obj1;
  D.11318 = D.11276->i;
  if (D.11318 != 5) goto <D.11319>; else goto <D.11320>;
  <D.11319>:
  D.11317 = -2;
  return D.11317;
  <D.11320>:
  D.11317 = 0;
  return D.11317;
}


string_marshal_test0 (char * str)
{
  int D.7651;
  int iftmp.74;
  int D.7650;
  const char[6] * D.11325;
  unsigned char D.11326;
  int D.11327;
  unsigned char D.11328;
  int D.11329;
  _Bool D.11330;
  _Bool D.11331;
  _Bool D.11332;
  const unsigned char * D.11335;
  unsigned char D.11336;
  int D.11337;
  const unsigned char * D.11338;
  unsigned char D.11339;
  int D.11340;
  _Bool D.11341;
  _Bool D.11342;
  const unsigned char * D.11345;
  unsigned char D.11346;
  int D.11347;
  const unsigned char * D.11348;
  unsigned char D.11349;
  int D.11350;
  _Bool D.11351;
  _Bool D.11352;
  const unsigned char * D.11355;
  unsigned char D.11356;
  int D.11357;
  const unsigned char * D.11358;
  unsigned char D.11359;
  int D.11360;
  int D.11364;

  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 5;
    if (__s2_len <= 3) goto <D.11323>; else goto <D.11324>;
    <D.11323>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = str;
      D.11325 = "TEST0";
      D.11326 = MEM[(const unsigned char *)D.11325];
      D.11327 = (int) D.11326;
      D.11328 = *__s2;
      D.11329 = (int) D.11328;
      __result = D.11327 - D.11329;
      {
        D.11330 = __s2_len != 0;
        D.11331 = __result == 0;
        D.11332 = D.11330 & D.11331;
        if (D.11332 != 0) goto <D.11333>; else goto <D.11334>;
        <D.11333>:
        D.11335 = &MEM[(void *)"TEST0" + 1B];
        D.11336 = *D.11335;
        D.11337 = (int) D.11336;
        D.11338 = __s2 + 1;
        D.11339 = *D.11338;
        D.11340 = (int) D.11339;
        __result = D.11337 - D.11340;
        D.11341 = __s2_len > 1;
        D.11331 = __result == 0;
        D.11342 = D.11341 & D.11331;
        if (D.11342 != 0) goto <D.11343>; else goto <D.11344>;
        <D.11343>:
        D.11345 = &MEM[(void *)"TEST0" + 2B];
        D.11346 = *D.11345;
        D.11347 = (int) D.11346;
        D.11348 = __s2 + 2;
        D.11349 = *D.11348;
        D.11350 = (int) D.11349;
        __result = D.11347 - D.11350;
        D.11351 = __s2_len > 2;
        D.11331 = __result == 0;
        D.11352 = D.11351 & D.11331;
        if (D.11352 != 0) goto <D.11353>; else goto <D.11354>;
        <D.11353>:
        D.11355 = &MEM[(void *)"TEST0" + 3B];
        D.11356 = *D.11355;
        D.11357 = (int) D.11356;
        D.11358 = __s2 + 3;
        D.11359 = *D.11358;
        D.11360 = (int) D.11359;
        __result = D.11357 - D.11360;
        <D.11354>:
        <D.11344>:
        <D.11334>:
      }
      D.7650 = __result;
    }
    iftmp.74 = -D.7650;
    goto <D.11361>;
    <D.11324>:
    iftmp.74 = __builtin_strcmp (str, "TEST0");
    <D.11361>:
    D.7651 = iftmp.74;
  }
  if (D.7651 != 0) goto <D.11362>; else goto <D.11363>;
  <D.11362>:
  D.11364 = -1;
  return D.11364;
  <D.11363>:
  D.11364 = 0;
  return D.11364;
}


string_marshal_test1 (const char * * str)
{
  char * D.11366;

  D.11366 = marshal_strdup ("TEST1");
  *str = D.11366;
}


string_marshal_test2 (char * * str)
{
  int D.7666;
  int iftmp.75;
  int D.7665;
  const char[6] * D.11370;
  unsigned char D.11371;
  int D.11372;
  unsigned char D.11373;
  int D.11374;
  _Bool D.11375;
  _Bool D.11376;
  _Bool D.11377;
  const unsigned char * D.11380;
  unsigned char D.11381;
  int D.11382;
  const unsigned char * D.11383;
  unsigned char D.11384;
  int D.11385;
  _Bool D.11386;
  _Bool D.11387;
  const unsigned char * D.11390;
  unsigned char D.11391;
  int D.11392;
  const unsigned char * D.11393;
  unsigned char D.11394;
  int D.11395;
  _Bool D.11396;
  _Bool D.11397;
  const unsigned char * D.11400;
  unsigned char D.11401;
  int D.11402;
  const unsigned char * D.11403;
  unsigned char D.11404;
  int D.11405;
  char * D.11407;
  int D.11410;
  char * D.11411;

  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 5;
    if (__s2_len <= 3) goto <D.11368>; else goto <D.11369>;
    <D.11368>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = *str;
      D.11370 = "TEST1";
      D.11371 = MEM[(const unsigned char *)D.11370];
      D.11372 = (int) D.11371;
      D.11373 = *__s2;
      D.11374 = (int) D.11373;
      __result = D.11372 - D.11374;
      {
        D.11375 = __s2_len != 0;
        D.11376 = __result == 0;
        D.11377 = D.11375 & D.11376;
        if (D.11377 != 0) goto <D.11378>; else goto <D.11379>;
        <D.11378>:
        D.11380 = &MEM[(void *)"TEST1" + 1B];
        D.11381 = *D.11380;
        D.11382 = (int) D.11381;
        D.11383 = __s2 + 1;
        D.11384 = *D.11383;
        D.11385 = (int) D.11384;
        __result = D.11382 - D.11385;
        D.11386 = __s2_len > 1;
        D.11376 = __result == 0;
        D.11387 = D.11386 & D.11376;
        if (D.11387 != 0) goto <D.11388>; else goto <D.11389>;
        <D.11388>:
        D.11390 = &MEM[(void *)"TEST1" + 2B];
        D.11391 = *D.11390;
        D.11392 = (int) D.11391;
        D.11393 = __s2 + 2;
        D.11394 = *D.11393;
        D.11395 = (int) D.11394;
        __result = D.11392 - D.11395;
        D.11396 = __s2_len > 2;
        D.11376 = __result == 0;
        D.11397 = D.11396 & D.11376;
        if (D.11397 != 0) goto <D.11398>; else goto <D.11399>;
        <D.11398>:
        D.11400 = &MEM[(void *)"TEST1" + 3B];
        D.11401 = *D.11400;
        D.11402 = (int) D.11401;
        D.11403 = __s2 + 3;
        D.11404 = *D.11403;
        D.11405 = (int) D.11404;
        __result = D.11402 - D.11405;
        <D.11399>:
        <D.11389>:
        <D.11379>:
      }
      D.7665 = __result;
    }
    iftmp.75 = -D.7665;
    goto <D.11406>;
    <D.11369>:
    D.11407 = *str;
    iftmp.75 = __builtin_strcmp (D.11407, "TEST1");
    <D.11406>:
    D.7666 = iftmp.75;
  }
  if (D.7666 != 0) goto <D.11408>; else goto <D.11409>;
  <D.11408>:
  D.11410 = -1;
  return D.11410;
  <D.11409>:
  D.11411 = marshal_strdup ("TEST2");
  *str = D.11411;
  D.11410 = 0;
  return D.11410;
}


string_marshal_test3 (char * str)
{
  int D.11415;

  if (str != 0B) goto <D.11413>; else goto <D.11414>;
  <D.11413>:
  D.11415 = -1;
  return D.11415;
  <D.11414>:
  D.11415 = 0;
  return D.11415;
}


TestBlittableClass (struct BlittableClass * vl)
{
  int D.11419;
  int D.11420;
  int D.11421;
  int D.11422;
  struct BlittableClass * D.11424;
  struct BlittableClass * res;

  if (vl != 0B) goto <D.11417>; else goto <D.11418>;
  <D.11417>:
  D.11419 = vl->a;
  D.11420 = D.11419 + 1;
  vl->a = D.11420;
  D.11421 = vl->b;
  D.11422 = D.11421 + 1;
  vl->b = D.11422;
  res = marshal_alloc0 (8);
  memcpy (res, vl, 8);
  goto <D.11423>;
  <D.11418>:
  res = marshal_alloc0 (8);
  res->a = 42;
  res->b = 43;
  <D.11423>:
  D.11424 = res;
  return D.11424;
}


MyGetVersionEx (struct OSVERSIONINFO_STRUCT * osvi)
{
  int D.11426;
  int D.11427;
  int D.11428;
  int D.11429;
  int D.11430;

  D.11426 = osvi->a;
  D.11427 = D.11426 + 1;
  osvi->a = D.11427;
  D.11428 = osvi->b;
  D.11429 = D.11428 + 1;
  osvi->b = D.11429;
  D.11426 = osvi->a;
  D.11428 = osvi->b;
  D.11430 = D.11426 + D.11428;
  return D.11430;
}


BugGetVersionEx (int a, int b, int c, int d, int e, int f, int g, int h, struct OSVERSIONINFO_STRUCT * osvi)
{
  int D.11432;
  int D.11433;
  int D.11434;
  int D.11435;
  int D.11436;

  D.11432 = osvi->a;
  D.11433 = D.11432 + 1;
  osvi->a = D.11433;
  D.11434 = osvi->b;
  D.11435 = D.11434 + 1;
  osvi->b = D.11435;
  D.11432 = osvi->a;
  D.11434 = osvi->b;
  D.11436 = D.11432 + D.11434;
  return D.11436;
}


mono_test_marshal_point (struct point pt)
{
  double D.11438;
  double D.11441;
  int D.11444;

  D.11438 = pt.x;
  if (D.11438 == 1.25e+0) goto <D.11439>; else goto <D.11440>;
  <D.11439>:
  D.11441 = pt.y;
  if (D.11441 == 3.5e+0) goto <D.11442>; else goto <D.11443>;
  <D.11442>:
  D.11444 = 0;
  return D.11444;
  <D.11443>:
  <D.11440>:
  D.11444 = 1;
  return D.11444;
}


mono_test_marshal_mixed_point (struct mixed_point pt)
{
  int D.11446;
  double D.11449;
  int D.11452;

  D.11446 = pt.x;
  if (D.11446 == 5) goto <D.11447>; else goto <D.11448>;
  <D.11447>:
  D.11449 = pt.y;
  if (D.11449 == 6.75e+0) goto <D.11450>; else goto <D.11451>;
  <D.11450>:
  D.11452 = 0;
  return D.11452;
  <D.11451>:
  <D.11448>:
  D.11452 = 1;
  return D.11452;
}


mono_test_marshal_mixed_point_2 (struct mixed_point * pt)
{
  int D.11456;
  double D.11458;
  int D.11459;

  D.11456 = pt->x;
  if (D.11456 != 5) goto <D.11454>; else goto <D.11457>;
  <D.11457>:
  D.11458 = pt->y;
  if (D.11458 != 6.75e+0) goto <D.11454>; else goto <D.11455>;
  <D.11454>:
  D.11459 = 1;
  return D.11459;
  <D.11455>:
  pt->x = 10;
  pt->y = 1.23499999999999996447286321199499070644378662109375e+1;
  D.11459 = 0;
  return D.11459;
}


marshal_test_ref_bool (int i, char * b1, short int * b2, int * b3)
{
  char D.11461;
  unsigned char D.11462;
  int D.11465;
  short int D.11466;
  unsigned short D.11467;
  unsigned short D.11468;
  int D.11471;
  unsigned int D.11472;
  int D.11475;
  int D.11476;
  int D.11477;
  int D.11478;
  int D.11479;
  int D.11480;
  int D.11481;
  _Bool D.11484;
  char D.11485;
  short int D.11486;
  _Bool D.11487;
  int D.11488;
  int res;

  res = 1;
  D.11461 = *b1;
  D.11462 = (unsigned char) D.11461;
  if (D.11462 > 1) goto <D.11463>; else goto <D.11464>;
  <D.11463>:
  D.11465 = 1;
  return D.11465;
  <D.11464>:
  D.11466 = *b2;
  D.11467 = (unsigned short) D.11466;
  D.11468 = D.11467 + 1;
  if (D.11468 > 1) goto <D.11469>; else goto <D.11470>;
  <D.11469>:
  D.11465 = 1;
  return D.11465;
  <D.11470>:
  D.11471 = *b3;
  D.11472 = (unsigned int) D.11471;
  if (D.11472 > 1) goto <D.11473>; else goto <D.11474>;
  <D.11473>:
  D.11465 = 1;
  return D.11465;
  <D.11474>:
  D.11461 = *b1;
  D.11475 = (int) D.11461;
  D.11476 = D.11475 << 2;
  D.11466 = *b2;
  D.11477 = (int) D.11466;
  D.11478 = -D.11477;
  D.11479 = D.11478 << 1;
  D.11480 = D.11476 | D.11479;
  D.11471 = *b3;
  D.11481 = D.11480 | D.11471;
  if (D.11481 == i) goto <D.11482>; else goto <D.11483>;
  <D.11482>:
  res = 0;
  <D.11483>:
  D.11461 = *b1;
  D.11484 = D.11461 == 0;
  D.11485 = (char) D.11484;
  *b1 = D.11485;
  D.11466 = *b2;
  D.11486 = ~D.11466;
  *b2 = D.11486;
  D.11471 = *b3;
  D.11487 = D.11471 == 0;
  D.11488 = (int) D.11487;
  *b3 = D.11488;
  D.11465 = res;
  return D.11465;
}


marshal_test_bool_struct (struct BoolStruct * s)
{
  char D.11490;
  unsigned char D.11491;
  int D.11494;
  short int D.11495;
  unsigned short D.11496;
  unsigned short D.11497;
  int D.11500;
  unsigned int D.11501;
  int D.11504;
  int D.11505;
  int D.11506;
  int D.11507;
  int D.11508;
  int D.11509;
  int D.11510;
  int D.11511;
  _Bool D.11514;
  char D.11515;
  short int D.11516;
  _Bool D.11517;
  int D.11518;
  int res;

  res = 1;
  D.11490 = s->b1;
  D.11491 = (unsigned char) D.11490;
  if (D.11491 > 1) goto <D.11492>; else goto <D.11493>;
  <D.11492>:
  D.11494 = 1;
  return D.11494;
  <D.11493>:
  D.11495 = s->b2;
  D.11496 = (unsigned short) D.11495;
  D.11497 = D.11496 + 1;
  if (D.11497 > 1) goto <D.11498>; else goto <D.11499>;
  <D.11498>:
  D.11494 = 1;
  return D.11494;
  <D.11499>:
  D.11500 = s->b3;
  D.11501 = (unsigned int) D.11500;
  if (D.11501 > 1) goto <D.11502>; else goto <D.11503>;
  <D.11502>:
  D.11494 = 1;
  return D.11494;
  <D.11503>:
  D.11504 = s->i;
  D.11490 = s->b1;
  D.11505 = (int) D.11490;
  D.11506 = D.11505 << 2;
  D.11495 = s->b2;
  D.11507 = (int) D.11495;
  D.11508 = -D.11507;
  D.11509 = D.11508 << 1;
  D.11510 = D.11506 | D.11509;
  D.11500 = s->b3;
  D.11511 = D.11510 | D.11500;
  if (D.11504 == D.11511) goto <D.11512>; else goto <D.11513>;
  <D.11512>:
  res = 0;
  <D.11513>:
  D.11490 = s->b1;
  D.11514 = D.11490 == 0;
  D.11515 = (char) D.11514;
  s->b1 = D.11515;
  D.11495 = s->b2;
  D.11516 = ~D.11495;
  s->b2 = D.11516;
  D.11500 = s->b3;
  D.11517 = D.11500 == 0;
  D.11518 = (int) D.11517;
  s->b3 = D.11518;
  D.11494 = res;
  return D.11494;
}


mono_test_marshal_long_struct (struct LongStruct * s)
{
  int D.11520;
  int D.11521;
  unsigned int D.11522;
  long int D.11523;
  unsigned int D.11524;
  unsigned int D.11525;

  D.11521 = s->i;
  D.11522 = (unsigned int) D.11521;
  D.11523 = s->l.l;
  D.11524 = (unsigned int) D.11523;
  D.11525 = D.11522 + D.11524;
  D.11520 = (int) D.11525;
  return D.11520;
}


mono_test_last_error (int err)
{
  int * D.11527;

  D.11527 = __errno_location ();
  *D.11527 = err;
}


mono_test_asany (void * ptr, int what)
{
  int D.11528;
  int D.11529;
  _Bool D.11530;
  int D.7752;
  int iftmp.76;
  int D.7751;
  const char[4] * D.11534;
  unsigned char D.11535;
  int D.11536;
  unsigned char D.11537;
  int D.11538;
  _Bool D.11539;
  _Bool D.11540;
  _Bool D.11541;
  const unsigned char * D.11544;
  unsigned char D.11545;
  int D.11546;
  const unsigned char * D.11547;
  unsigned char D.11548;
  int D.11549;
  _Bool D.11550;
  _Bool D.11551;
  const unsigned char * D.11554;
  unsigned char D.11555;
  int D.11556;
  const unsigned char * D.11557;
  unsigned char D.11558;
  int D.11559;
  _Bool D.11560;
  _Bool D.11561;
  const unsigned char * D.11564;
  unsigned char D.11565;
  int D.11566;
  const unsigned char * D.11567;
  unsigned char D.11568;
  int D.11569;
  _Bool D.11571;
  signed long D.11573;
  long unsigned int D.11574;
  long unsigned int D.11575;
  int D.11577;
  int D.7763;
  int iftmp.77;
  int D.7762;
  const char[5] * D.11582;
  unsigned char D.11583;
  int D.11584;
  unsigned char D.11585;
  int D.11586;
  _Bool D.11587;
  _Bool D.11588;
  _Bool D.11589;
  const unsigned char * D.11592;
  unsigned char D.11593;
  int D.11594;
  const unsigned char * D.11595;
  unsigned char D.11596;
  int D.11597;
  _Bool D.11598;
  _Bool D.11599;
  const unsigned char * D.11602;
  unsigned char D.11603;
  int D.11604;
  const unsigned char * D.11605;
  unsigned char D.11606;
  int D.11607;
  _Bool D.11608;
  _Bool D.11609;
  const unsigned char * D.11612;
  unsigned char D.11613;
  int D.11614;
  const unsigned char * D.11615;
  unsigned char D.11616;
  int D.11617;
  char * D.11619;
  unsigned char D.11621;
  double D.11623;
  unsigned char D.11625;
  long unsigned int D.11627;
  int D.7775;
  int iftmp.78;
  int D.7774;
  unsigned char D.11634;
  int D.11635;
  _Bool D.11636;
  _Bool D.11637;
  _Bool D.11638;
  const unsigned char * D.11641;
  unsigned char D.11642;
  int D.11643;
  _Bool D.11644;
  _Bool D.11645;
  const unsigned char * D.11648;
  unsigned char D.11649;
  int D.11650;
  _Bool D.11651;
  _Bool D.11652;
  const unsigned char * D.11655;
  unsigned char D.11656;
  int D.11657;

  switch (what) <default: <D.7776>, case 1: <D.7742>, case 2: <D.7743>, case 3: <D.7753>, case 4: <D.7764>>
  <D.7742>:
  D.11529 = MEM[(int *)ptr];
  D.11530 = D.11529 != 5;
  D.11528 = (int) D.11530;
  return D.11528;
  <D.7743>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = ptr;
      D.11534 = "ABC";
      D.11535 = MEM[(const unsigned char *)D.11534];
      D.11536 = (int) D.11535;
      D.11537 = *__s2;
      D.11538 = (int) D.11537;
      __result = D.11536 - D.11538;
      {
        D.11539 = __s2_len != 0;
        D.11540 = __result == 0;
        D.11541 = D.11539 & D.11540;
        if (D.11541 != 0) goto <D.11542>; else goto <D.11543>;
        <D.11542>:
        D.11544 = &MEM[(void *)"ABC" + 1B];
        D.11545 = *D.11544;
        D.11546 = (int) D.11545;
        D.11547 = __s2 + 1;
        D.11548 = *D.11547;
        D.11549 = (int) D.11548;
        __result = D.11546 - D.11549;
        D.11550 = __s2_len > 1;
        D.11540 = __result == 0;
        D.11551 = D.11550 & D.11540;
        if (D.11551 != 0) goto <D.11552>; else goto <D.11553>;
        <D.11552>:
        D.11554 = &MEM[(void *)"ABC" + 2B];
        D.11555 = *D.11554;
        D.11556 = (int) D.11555;
        D.11557 = __s2 + 2;
        D.11558 = *D.11557;
        D.11559 = (int) D.11558;
        __result = D.11556 - D.11559;
        D.11560 = __s2_len > 2;
        D.11540 = __result == 0;
        D.11561 = D.11560 & D.11540;
        if (D.11561 != 0) goto <D.11562>; else goto <D.11563>;
        <D.11562>:
        D.11564 = &MEM[(void *)"ABC" + 3B];
        D.11565 = *D.11564;
        D.11566 = (int) D.11565;
        D.11567 = __s2 + 3;
        D.11568 = *D.11567;
        D.11569 = (int) D.11568;
        __result = D.11566 - D.11569;
        <D.11563>:
        <D.11553>:
        <D.11543>:
      }
      D.7751 = __result;
    }
    iftmp.76 = -D.7751;
    goto <D.11570>;
    <D.11533>:
    iftmp.76 = __builtin_strcmp (ptr, "ABC");
    <D.11570>:
    D.7752 = iftmp.76;
  }
  D.11571 = D.7752 != 0;
  D.11528 = (int) D.11571;
  return D.11528;
  <D.7753>:
  {
    struct simplestruct2 ss;

    try
      {
        ss = MEM[(struct simplestruct2 *)ptr];
        D.11573 = BIT_FIELD_REF <ss, 64, 0>;
        D.11574 = (long unsigned int) D.11573;
        D.11575 = D.11574;
        if (D.11575 == 4294967296) goto <D.11576>; else goto <D.11572>;
        <D.11576>:
        D.11577 = ss.c;
        if (D.11577 == 0) goto <D.11578>; else goto <D.11572>;
        <D.11578>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 4;
          if (__s2_len <= 3) goto <D.11580>; else goto <D.11581>;
          <D.11580>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = ss.d;
            D.11582 = "TEST";
            D.11583 = MEM[(const unsigned char *)D.11582];
            D.11584 = (int) D.11583;
            D.11585 = *__s2;
            D.11586 = (int) D.11585;
            __result = D.11584 - D.11586;
            {
              D.11587 = __s2_len != 0;
              D.11588 = __result == 0;
              D.11589 = D.11587 & D.11588;
              if (D.11589 != 0) goto <D.11590>; else goto <D.11591>;
              <D.11590>:
              D.11592 = &MEM[(void *)"TEST" + 1B];
              D.11593 = *D.11592;
              D.11594 = (int) D.11593;
              D.11595 = __s2 + 1;
              D.11596 = *D.11595;
              D.11597 = (int) D.11596;
              __result = D.11594 - D.11597;
              D.11598 = __s2_len > 1;
              D.11588 = __result == 0;
              D.11599 = D.11598 & D.11588;
              if (D.11599 != 0) goto <D.11600>; else goto <D.11601>;
              <D.11600>:
              D.11602 = &MEM[(void *)"TEST" + 2B];
              D.11603 = *D.11602;
              D.11604 = (int) D.11603;
              D.11605 = __s2 + 2;
              D.11606 = *D.11605;
              D.11607 = (int) D.11606;
              __result = D.11604 - D.11607;
              D.11608 = __s2_len > 2;
              D.11588 = __result == 0;
              D.11609 = D.11608 & D.11588;
              if (D.11609 != 0) goto <D.11610>; else goto <D.11611>;
              <D.11610>:
              D.11612 = &MEM[(void *)"TEST" + 3B];
              D.11613 = *D.11612;
              D.11614 = (int) D.11613;
              D.11615 = __s2 + 3;
              D.11616 = *D.11615;
              D.11617 = (int) D.11616;
              __result = D.11614 - D.11617;
              <D.11611>:
              <D.11601>:
              <D.11591>:
            }
            D.7762 = __result;
          }
          iftmp.77 = -D.7762;
          goto <D.11618>;
          <D.11581>:
          D.11619 = ss.d;
          iftmp.77 = __builtin_strcmp (D.11619, "TEST");
          <D.11618>:
          D.7763 = iftmp.77;
        }
        if (D.7763 == 0) goto <D.11620>; else goto <D.11572>;
        <D.11620>:
        D.11621 = ss.e;
        if (D.11621 == 99) goto <D.11622>; else goto <D.11572>;
        <D.11622>:
        D.11623 = ss.f;
        if (D.11623 == 1.5e+0) goto <D.11624>; else goto <D.11572>;
        <D.11624>:
        D.11625 = ss.g;
        if (D.11625 == 42) goto <D.11626>; else goto <D.11572>;
        <D.11626>:
        D.11627 = ss.h;
        if (D.11627 == 123) goto <D.11628>; else goto <D.11572>;
        <D.11628>:
        D.11528 = 0;
        return D.11528;
        <D.11572>:
        D.11528 = 1;
        return D.11528;
      }
    finally
      {
        ss = {CLOBBER};
      }
  }
  <D.7764>:
  {
    struct GError * error;
    char * s;

    try
      {
        error = 0B;
        s = monoeg_g_utf16_to_utf8 (ptr, -1, 0B, 0B, &error);
        if (s == 0B) goto <D.11629>; else goto <D.11630>;
        <D.11629>:
        D.11528 = 1;
        return D.11528;
        <D.11630>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = s;
            D.11534 = "ABC";
            D.11535 = MEM[(const unsigned char *)D.11534];
            D.11536 = (int) D.11535;
            D.11634 = *__s2;
            D.11635 = (int) D.11634;
            __result = D.11536 - D.11635;
            {
              D.11636 = __s2_len != 0;
              D.11637 = __result == 0;
              D.11638 = D.11636 & D.11637;
              if (D.11638 != 0) goto <D.11639>; else goto <D.11640>;
              <D.11639>:
              D.11544 = &MEM[(void *)"ABC" + 1B];
              D.11545 = *D.11544;
              D.11546 = (int) D.11545;
              D.11641 = __s2 + 1;
              D.11642 = *D.11641;
              D.11643 = (int) D.11642;
              __result = D.11546 - D.11643;
              D.11644 = __s2_len > 1;
              D.11637 = __result == 0;
              D.11645 = D.11644 & D.11637;
              if (D.11645 != 0) goto <D.11646>; else goto <D.11647>;
              <D.11646>:
              D.11554 = &MEM[(void *)"ABC" + 2B];
              D.11555 = *D.11554;
              D.11556 = (int) D.11555;
              D.11648 = __s2 + 2;
              D.11649 = *D.11648;
              D.11650 = (int) D.11649;
              __result = D.11556 - D.11650;
              D.11651 = __s2_len > 2;
              D.11637 = __result == 0;
              D.11652 = D.11651 & D.11637;
              if (D.11652 != 0) goto <D.11653>; else goto <D.11654>;
              <D.11653>:
              D.11564 = &MEM[(void *)"ABC" + 3B];
              D.11565 = *D.11564;
              D.11566 = (int) D.11565;
              D.11655 = __s2 + 3;
              D.11656 = *D.11655;
              D.11657 = (int) D.11656;
              __result = D.11566 - D.11657;
              <D.11654>:
              <D.11647>:
              <D.11640>:
            }
            D.7774 = __result;
          }
          iftmp.78 = -D.7774;
          goto <D.11658>;
          <D.11633>:
          iftmp.78 = __builtin_strcmp (s, "ABC");
          <D.11658>:
          D.7775 = iftmp.78;
        }
        if (D.7775 == 0) goto <D.11659>; else goto <D.11660>;
        <D.11659>:
        monoeg_g_free (s);
        D.11528 = 0;
        return D.11528;
        <D.11660>:
        monoeg_g_free (s);
        D.11528 = 1;
        return D.11528;
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.7776>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "libtest.c", 1674);
  D.11528 = 1;
  return D.11528;
}


mono_test_marshal_asany_in (void * ptr)
{
  int D.11664;
  int D.11665;
  int D.11666;
  int D.11667;
  int D.11668;
  struct AsAnyStruct * asAny;
  int res;

  asAny = ptr;
  D.11664 = asAny->i;
  D.11665 = asAny->j;
  D.11666 = D.11664 + D.11665;
  D.11667 = asAny->k;
  res = D.11666 + D.11667;
  D.11668 = res;
  return D.11668;
}


mono_test_marshal_asany_inout (void * ptr)
{
  int D.11670;
  int D.11671;
  int D.11672;
  int D.11673;
  char * D.11674;
  int D.11675;
  struct AsAnyStruct * asAny;
  int res;

  asAny = ptr;
  D.11670 = asAny->i;
  D.11671 = asAny->j;
  D.11672 = D.11670 + D.11671;
  D.11673 = asAny->k;
  res = D.11672 + D.11673;
  D.11674 = asAny->s;
  marshal_free (D.11674);
  asAny->i = 10;
  asAny->j = 20;
  asAny->k = 30;
  asAny->s = 0B;
  D.11675 = res;
  return D.11675;
}


mono_test_marshal_asany_out (void * ptr)
{
  int D.11677;
  int D.11678;
  int D.11679;
  int D.11680;
  int D.11681;
  struct AsAnyStruct * asAny;
  int res;

  asAny = ptr;
  D.11677 = asAny->i;
  D.11678 = asAny->j;
  D.11679 = D.11677 + D.11678;
  D.11680 = asAny->k;
  res = D.11679 + D.11680;
  asAny->i = 10;
  asAny->j = 20;
  asAny->k = 30;
  asAny->s = 0B;
  D.11681 = res;
  return D.11681;
}


mono_test_marshal_amd64_pass_return_struct1 (struct amd64_struct1 s)
{
  int D.11683;
  int D.11684;
  int D.11685;
  int D.11686;
  int D.11687;
  int D.11688;
  int D.11689;
  int D.11690;
  struct amd64_struct1 D.11691;

  D.11683 = s.i;
  D.11684 = D.11683 + 1;
  s.i = D.11684;
  D.11685 = s.j;
  D.11686 = D.11685 + 1;
  s.j = D.11686;
  D.11687 = s.k;
  D.11688 = D.11687 + 1;
  s.k = D.11688;
  D.11689 = s.l;
  D.11690 = D.11689 + 1;
  s.l = D.11690;
  D.11691 = s;
  return D.11691;
}


mono_test_marshal_amd64_pass_return_struct1_many_args (struct amd64_struct1 s, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8)
{
  int D.11693;
  int D.11694;
  int D.11695;
  int D.11696;
  int D.11697;
  int D.11698;
  int D.11699;
  int D.11700;
  int D.11701;
  int D.11702;
  int D.11703;
  int D.11704;
  int D.11705;
  int D.11706;
  int D.11707;
  int D.11708;
  struct amd64_struct1 D.11709;

  D.11693 = s.i;
  D.11694 = D.11693 + 1;
  s.i = D.11694;
  D.11695 = s.j;
  D.11696 = D.11695 + 1;
  s.j = D.11696;
  D.11697 = s.k;
  D.11698 = D.11697 + 1;
  s.k = D.11698;
  D.11699 = s.l;
  D.11700 = i1 + 1;
  D.11701 = D.11700 + i2;
  D.11702 = D.11701 + i3;
  D.11703 = D.11702 + i4;
  D.11704 = D.11703 + i5;
  D.11705 = D.11704 + i6;
  D.11706 = D.11705 + i7;
  D.11707 = D.11706 + i8;
  D.11708 = D.11699 + D.11707;
  s.l = D.11708;
  D.11709 = s;
  return D.11709;
}


mono_test_marshal_amd64_pass_return_struct2 (struct amd64_struct2 s)
{
  int D.11711;
  int D.11712;
  int D.11713;
  int D.11714;
  struct amd64_struct2 D.11715;

  D.11711 = s.i;
  D.11712 = D.11711 + 1;
  s.i = D.11712;
  D.11713 = s.j;
  D.11714 = D.11713 + 1;
  s.j = D.11714;
  D.11715 = s;
  return D.11715;
}


mono_test_marshal_amd64_pass_return_struct3 (struct amd64_struct3 s)
{
  int D.11717;
  int D.11718;
  struct amd64_struct3 D.11719;

  D.11717 = s.i;
  D.11718 = D.11717 + 1;
  s.i = D.11718;
  D.11719 = s;
  return D.11719;
}


mono_test_marshal_amd64_pass_return_struct4 (struct amd64_struct4 s)
{
  double D.11721;
  double D.11722;
  double D.11723;
  double D.11724;
  struct amd64_struct4 D.11725;

  D.11721 = s.d1;
  D.11722 = D.11721 + 1.0e+0;
  s.d1 = D.11722;
  D.11723 = s.d2;
  D.11724 = D.11723 + 1.0e+0;
  s.d2 = D.11724;
  D.11725 = s;
  return D.11725;
}


mono_test_marshal_ia64_pass_return_struct5 (double d1, double d2, struct test_struct5 s, int i, double d3, double d4)
{
  float D.11727;
  double D.11728;
  double D.11729;
  double D.11730;
  double D.11731;
  double D.11732;
  float D.11733;
  float D.11734;
  double D.11735;
  double D.11736;
  double D.11737;
  double D.11738;
  float D.11739;
  struct test_struct5 D.11740;

  D.11727 = s.d1;
  D.11728 = (double) D.11727;
  D.11729 = d1 + d2;
  D.11730 = (double) i;
  D.11731 = D.11729 + D.11730;
  D.11732 = D.11728 + D.11731;
  D.11733 = (float) D.11732;
  s.d1 = D.11733;
  D.11734 = s.d2;
  D.11735 = (double) D.11734;
  D.11736 = d3 + d4;
  D.11730 = (double) i;
  D.11737 = D.11736 + D.11730;
  D.11738 = D.11735 + D.11737;
  D.11739 = (float) D.11738;
  s.d2 = D.11739;
  D.11740 = s;
  return D.11740;
}


mono_test_marshal_ia64_pass_return_struct6 (double d1, double d2, struct test_struct6 s, int i, double d3, double d4)
{
  double D.11742;
  double D.11743;
  double D.11744;
  double D.11745;
  double D.11746;
  double D.11747;
  double D.11748;
  double D.11749;
  struct test_struct6 D.11750;

  D.11742 = s.d1;
  D.11743 = d1 + d2;
  D.11744 = (double) i;
  D.11745 = D.11743 + D.11744;
  D.11746 = D.11742 + D.11745;
  s.d1 = D.11746;
  D.11747 = s.d2;
  D.11748 = d3 + d4;
  D.11749 = D.11747 + D.11748;
  s.d2 = D.11749;
  D.11750 = s;
  return D.11750;
}


mono_test_marshal_pass_return_custom (int i, guint32 * ptr, int j)
{
  unsigned int D.11752;
  void * D.11753;

  custom_res[0] = 0;
  D.11752 = MEM[(guint32 *)ptr + 4B];
  custom_res[1] = D.11752;
  D.11753 = &custom_res;
  return D.11753;
}


mono_test_marshal_pass_out_custom (int i, guint32 * * ptr, int j)
{
  int D.11755;
  int D.11756;
  unsigned int D.11757;
  int D.11758;

  custom_res[0] = 0;
  D.11755 = i + j;
  D.11756 = D.11755 + 10;
  D.11757 = (unsigned int) D.11756;
  custom_res[1] = D.11757;
  *ptr = &custom_res;
  D.11758 = 0;
  return D.11758;
}


mono_test_marshal_pass_inout_custom (int i, guint32 * ptr, int j)
{
  guint32 * D.11760;
  unsigned int D.11761;
  unsigned int i.79;
  unsigned int D.11763;
  unsigned int j.80;
  unsigned int D.11765;
  int D.11766;

  *ptr = 0;
  D.11760 = ptr + 4;
  D.11760 = ptr + 4;
  D.11761 = *D.11760;
  i.79 = (unsigned int) i;
  D.11763 = D.11761 + i.79;
  j.80 = (unsigned int) j;
  D.11765 = D.11763 + j.80;
  *D.11760 = D.11765;
  D.11766 = 0;
  return D.11766;
}


mono_test_marshal_pass_out_byval_custom (int i, guint32 * ptr, int j)
{
  int D.11768;
  _Bool D.11769;

  D.11769 = ptr != 0B;
  D.11768 = (int) D.11769;
  return D.11768;
}


mono_test_marshal_pass_byref_custom (int i, guint32 * * ptr, int j)
{
  guint32 * D.11771;
  guint32 * D.11772;
  unsigned int D.11773;
  int D.11774;
  unsigned int D.11775;
  unsigned int D.11776;
  int D.11777;

  D.11771 = *ptr;
  D.11772 = D.11771 + 4;
  D.11771 = *ptr;
  D.11772 = D.11771 + 4;
  D.11773 = *D.11772;
  D.11774 = i + j;
  D.11775 = (unsigned int) D.11774;
  D.11776 = D.11773 + D.11775;
  *D.11772 = D.11776;
  D.11777 = 0;
  return D.11777;
}


mono_test_marshal_pass_return_custom2 (int i, guint32 * ptr, int j)
{
  void * D.11779;

  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "libtest.c", 1877);
  D.11779 = 0B;
  return D.11779;
}


mono_test_marshal_pass_return_custom_null (int i, guint32 * ptr, int j)
{
  _Bool D.11781;
  long int D.11782;
  long int D.11783;
  void * D.11786;

  D.11781 = ptr != 0B;
  D.11782 = (long int) D.11781;
  D.11783 = __builtin_expect (D.11782, 0);
  if (D.11783 != 0) goto <D.11784>; else goto <D.11785>;
  <D.11784>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "libtest.c", 1885, "ptr == NULL");
  <D.11785>:
  D.11786 = 0B;
  return D.11786;
}


mono_test_marshal_pass_return_custom_in_delegate (void * (*PassReturnPtrDelegate) (void *) del)
{
  int D.11788;
  guint32 buf[2];
  guint32 res;
  guint32 * ptr;

  try
    {
      buf[0] = 0;
      buf[1] = 10;
      ptr = del (&buf);
      res = MEM[(guint32 *)ptr + 4B];
      monoeg_g_free (ptr);
      D.11788 = (int) res;
      return D.11788;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


mono_test_marshal_pass_return_custom_null_in_delegate (void * (*PassReturnPtrDelegate) (void *) del)
{
  int D.11791;
  int iftmp.81;
  void * ptr;

  ptr = del (0B);
  if (ptr == 0B) goto <D.11793>; else goto <D.11794>;
  <D.11793>:
  iftmp.81 = 15;
  goto <D.11795>;
  <D.11794>:
  iftmp.81 = 0;
  <D.11795>:
  D.11791 = iftmp.81;
  return D.11791;
}


mono_test_marshal_custom_out_param_delegate (void (*CustomOutParamDelegate) (void * *) del)
{
  void * pptr.82;
  int D.11800;
  void * pptr;

  try
    {
      pptr = del;
      del (&pptr);
      pptr.82 = pptr;
      if (pptr.82 != 0B) goto <D.11798>; else goto <D.11799>;
      <D.11798>:
      D.11800 = 1;
      return D.11800;
      <D.11799>:
      D.11800 = 0;
      return D.11800;
    }
  finally
    {
      pptr = {CLOBBER};
    }
}


mono_test_marshal_return_enum_delegate (int (*ReturnEnumDelegate) (int) func)
{
  int D.11803;

  D.11803 = func (1);
  return D.11803;
}


mono_test_marshal_blittable_struct_delegate (struct BlittableStruct (*SimpleDelegate10) (struct BlittableStruct) delegate)
{
  signed long D.11807;
  long unsigned int D.11808;
  long unsigned int D.11809;
  int D.11811;
  long int D.11813;
  int D.11814;
  struct BlittableStruct ss;
  struct BlittableStruct res;

  try
    {
      ss.a = 1;
      ss.b = 2;
      ss.c = 3;
      ss.d = 55;
      res = delegate (ss); [return slot optimization]
      D.11807 = BIT_FIELD_REF <res, 64, 0>;
      D.11808 = (long unsigned int) D.11807;
      D.11809 = D.11808;
      if (D.11809 != 18446744069414584319) goto <D.11805>; else goto <D.11810>;
      <D.11810>:
      D.11811 = res.c;
      if (D.11811 != -3) goto <D.11805>; else goto <D.11812>;
      <D.11812>:
      D.11813 = res.d;
      if (D.11813 != -55) goto <D.11805>; else goto <D.11806>;
      <D.11805>:
      D.11814 = 1;
      return D.11814;
      <D.11806>:
      D.11814 = 0;
      return D.11814;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_stdcall_name_mangling (int a, int b, int c)
{
  int D.11817;
  int D.11818;

  D.11818 = a + b;
  D.11817 = D.11818 + c;
  return D.11817;
}


mono_test_marshal_small_struct_delegate1 (struct SmallStruct1 (*SmallStructDelegate1) (struct SmallStruct1) delegate)
{
  int D.11820;
  int D.11823;
  struct SmallStruct1 ss;
  struct SmallStruct1 res;

  try
    {
      ss.i = 1;
      res = delegate (ss);
      D.11820 = res.i;
      if (D.11820 != -1) goto <D.11821>; else goto <D.11822>;
      <D.11821>:
      D.11823 = 1;
      return D.11823;
      <D.11822>:
      D.11823 = 0;
      return D.11823;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_marshal_small_struct_delegate2 (struct SmallStruct2 (*SmallStructDelegate2) (struct SmallStruct2) delegate)
{
  short int D.11828;
  short int D.11830;
  int D.11831;
  struct SmallStruct2 ss;
  struct SmallStruct2 res;

  try
    {
      ss.i = 2;
      ss.j = 3;
      res = delegate (ss);
      D.11828 = res.i;
      if (D.11828 != -2) goto <D.11826>; else goto <D.11829>;
      <D.11829>:
      D.11830 = res.j;
      if (D.11830 != -3) goto <D.11826>; else goto <D.11827>;
      <D.11826>:
      D.11831 = 1;
      return D.11831;
      <D.11827>:
      D.11831 = 0;
      return D.11831;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_marshal_small_struct_delegate3 (struct SmallStruct3 (*SmallStructDelegate3) (struct SmallStruct3) delegate)
{
  short int D.11836;
  signed char D.11838;
  int D.11839;
  struct SmallStruct3 ss;
  struct SmallStruct3 res;

  try
    {
      ss.i = 1;
      ss.j = 2;
      res = delegate (ss);
      D.11836 = res.i;
      if (D.11836 != -1) goto <D.11834>; else goto <D.11837>;
      <D.11837>:
      D.11838 = res.j;
      if (D.11838 != -2) goto <D.11834>; else goto <D.11835>;
      <D.11834>:
      D.11839 = 1;
      return D.11839;
      <D.11835>:
      D.11839 = 0;
      return D.11839;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_marshal_small_struct_delegate4 (struct SmallStruct4 (*SmallStructDelegate4) (struct SmallStruct4) delegate)
{
  short int D.11842;
  int D.11845;
  struct SmallStruct4 ss;
  struct SmallStruct4 res;

  try
    {
      ss.i = 1;
      res = delegate (ss);
      D.11842 = res.i;
      if (D.11842 != -1) goto <D.11843>; else goto <D.11844>;
      <D.11843>:
      D.11845 = 1;
      return D.11845;
      <D.11844>:
      D.11845 = 0;
      return D.11845;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_marshal_small_struct_delegate5 (struct SmallStruct5 (*SmallStructDelegate5) (struct SmallStruct5) delegate)
{
  long int D.11848;
  int D.11851;
  struct SmallStruct5 ss;
  struct SmallStruct5 res;

  try
    {
      ss.i = 5;
      res = delegate (ss);
      D.11848 = res.i;
      if (D.11848 != -5) goto <D.11849>; else goto <D.11850>;
      <D.11849>:
      D.11851 = 1;
      return D.11851;
      <D.11850>:
      D.11851 = 0;
      return D.11851;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_marshal_small_struct_delegate6 (struct SmallStruct6 (*SmallStructDelegate6) (struct SmallStruct6) delegate)
{
  int D.11856;
  int D.11858;
  int D.11859;
  struct SmallStruct6 ss;
  struct SmallStruct6 res;

  try
    {
      ss.i = 1;
      ss.j = 2;
      res = delegate (ss);
      D.11856 = res.i;
      if (D.11856 != -1) goto <D.11854>; else goto <D.11857>;
      <D.11857>:
      D.11858 = res.j;
      if (D.11858 != -2) goto <D.11854>; else goto <D.11855>;
      <D.11854>:
      D.11859 = 1;
      return D.11859;
      <D.11855>:
      D.11859 = 0;
      return D.11859;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_marshal_small_struct_delegate7 (struct SmallStruct7 (*SmallStructDelegate7) (struct SmallStruct7) delegate)
{
  int D.11864;
  short int D.11866;
  int D.11867;
  struct SmallStruct7 ss;
  struct SmallStruct7 res;

  try
    {
      ss.i = 1;
      ss.j = 2;
      res = delegate (ss);
      D.11864 = res.i;
      if (D.11864 != -1) goto <D.11862>; else goto <D.11865>;
      <D.11865>:
      D.11866 = res.j;
      if (D.11866 != -2) goto <D.11862>; else goto <D.11863>;
      <D.11862>:
      D.11867 = 1;
      return D.11867;
      <D.11863>:
      D.11867 = 0;
      return D.11867;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_marshal_small_struct_delegate8 (struct SmallStruct8 (*SmallStructDelegate8) (struct SmallStruct8) delegate)
{
  float D.11870;
  int D.11873;
  struct SmallStruct8 ss;
  struct SmallStruct8 res;

  try
    {
      ss.i = 1.0e+0;
      res = delegate (ss);
      D.11870 = res.i;
      if (D.11870 != -1.0e+0) goto <D.11871>; else goto <D.11872>;
      <D.11871>:
      D.11873 = 1;
      return D.11873;
      <D.11872>:
      D.11873 = 0;
      return D.11873;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_marshal_small_struct_delegate9 (struct SmallStruct9 (*SmallStructDelegate9) (struct SmallStruct9) delegate)
{
  double D.11876;
  int D.11879;
  struct SmallStruct9 ss;
  struct SmallStruct9 res;

  try
    {
      ss.i = 1.0e+0;
      res = delegate (ss);
      D.11876 = res.i;
      if (D.11876 != -1.0e+0) goto <D.11877>; else goto <D.11878>;
      <D.11877>:
      D.11879 = 1;
      return D.11879;
      <D.11878>:
      D.11879 = 0;
      return D.11879;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_marshal_small_struct_delegate10 (struct SmallStruct10 (*SmallStructDelegate10) (struct SmallStruct10) delegate)
{
  float D.11884;
  float D.11886;
  int D.11887;
  struct SmallStruct10 ss;
  struct SmallStruct10 res;

  try
    {
      ss.i = 1.0e+0;
      ss.j = 2.0e+0;
      res = delegate (ss);
      D.11884 = res.i;
      if (D.11884 != -1.0e+0) goto <D.11882>; else goto <D.11885>;
      <D.11885>:
      D.11886 = res.j;
      if (D.11886 != -2.0e+0) goto <D.11882>; else goto <D.11883>;
      <D.11882>:
      D.11887 = 1;
      return D.11887;
      <D.11883>:
      D.11887 = 0;
      return D.11887;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_marshal_small_struct_delegate11 (struct SmallStruct11 (*SmallStructDelegate11) (struct SmallStruct11) delegate)
{
  float D.11892;
  int D.11894;
  int D.11895;
  struct SmallStruct11 ss;
  struct SmallStruct11 res;

  try
    {
      ss.i = 1.0e+0;
      ss.j = 2;
      res = delegate (ss);
      D.11892 = res.i;
      if (D.11892 != -1.0e+0) goto <D.11890>; else goto <D.11893>;
      <D.11893>:
      D.11894 = res.j;
      if (D.11894 != -2) goto <D.11890>; else goto <D.11891>;
      <D.11890>:
      D.11895 = 1;
      return D.11895;
      <D.11891>:
      D.11895 = 0;
      return D.11895;
    }
  finally
    {
      ss = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_test_marshal_array_delegate (void * arr, int len, int (*ArrayDelegate) (int, char *, void *) del)
{
  int D.11898;

  D.11898 = del (len, 0B, arr);
  return D.11898;
}


mono_test_marshal_array_delegate_long (void * arr, gint64 len, int (*ArrayDelegateLong) (gint64, char *, void *) del)
{
  int D.11900;

  D.11900 = del (len, 0B, arr);
  return D.11900;
}


mono_test_marshal_out_array_delegate (int * arr, int len, int (*ArrayDelegate) (int, char *, void *) del)
{
  int D.11904;
  int * D.11906;
  int D.11907;
  int D.11908;

  del (len, 0B, arr);
  D.11904 = *arr;
  if (D.11904 != 1) goto <D.11902>; else goto <D.11905>;
  <D.11905>:
  D.11906 = arr + 4;
  D.11907 = *D.11906;
  if (D.11907 != 2) goto <D.11902>; else goto <D.11903>;
  <D.11902>:
  D.11908 = 1;
  return D.11908;
  <D.11903>:
  D.11908 = 0;
  return D.11908;
}


mono_test_marshal_return_unicode_string_delegate (gunichar2 * (*UnicodeStringDelegate) (gunichar2 *) del)
{
  int D.11910;
  const char m[7];
  gunichar2 * s2;
  gunichar2 * res;
  glong len;

  try
    {
      m = "abcdef";
      s2 = monoeg_g_utf8_to_utf16 (&m, -1, 0B, &len, 0B);
      res = del (s2);
      marshal_free (res);
      D.11910 = 0;
      return D.11910;
    }
  finally
    {
      m = {CLOBBER};
      len = {CLOBBER};
    }
}


mono_test_marshal_out_string_array_delegate (char * * arr, int len, int (*ArrayDelegate) (int, char *, void *) del)
{
  int D.8100;
  int iftmp.83;
  int D.8099;
  const char[4] * D.11917;
  unsigned char D.11918;
  int D.11919;
  unsigned char D.11920;
  int D.11921;
  _Bool D.11922;
  _Bool D.11923;
  _Bool D.11924;
  const unsigned char * D.11927;
  unsigned char D.11928;
  int D.11929;
  const unsigned char * D.11930;
  unsigned char D.11931;
  int D.11932;
  _Bool D.11933;
  _Bool D.11934;
  const unsigned char * D.11937;
  unsigned char D.11938;
  int D.11939;
  const unsigned char * D.11940;
  unsigned char D.11941;
  int D.11942;
  _Bool D.11943;
  _Bool D.11944;
  const unsigned char * D.11947;
  unsigned char D.11948;
  int D.11949;
  const unsigned char * D.11950;
  unsigned char D.11951;
  int D.11952;
  char * D.11954;
  int D.8109;
  int iftmp.84;
  int D.8108;
  const char[4] * D.11959;
  unsigned char D.11960;
  int D.11961;
  unsigned char D.11962;
  int D.11963;
  _Bool D.11964;
  _Bool D.11965;
  _Bool D.11966;
  const unsigned char * D.11969;
  unsigned char D.11970;
  int D.11971;
  const unsigned char * D.11972;
  unsigned char D.11973;
  int D.11974;
  _Bool D.11975;
  _Bool D.11976;
  const unsigned char * D.11979;
  unsigned char D.11980;
  int D.11981;
  const unsigned char * D.11982;
  unsigned char D.11983;
  int D.11984;
  _Bool D.11985;
  _Bool D.11986;
  const unsigned char * D.11989;
  unsigned char D.11990;
  int D.11991;
  const unsigned char * D.11992;
  unsigned char D.11993;
  int D.11994;
  char * * D.11996;
  char * D.11997;
  int D.11999;

  del (len, 0B, arr);
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = *arr;
      D.11917 = "ABC";
      D.11918 = MEM[(const unsigned char *)D.11917];
      D.11919 = (int) D.11918;
      D.11920 = *__s2;
      D.11921 = (int) D.11920;
      __result = D.11919 - D.11921;
      {
        D.11922 = __s2_len != 0;
        D.11923 = __result == 0;
        D.11924 = D.11922 & D.11923;
        if (D.11924 != 0) goto <D.11925>; else goto <D.11926>;
        <D.11925>:
        D.11927 = &MEM[(void *)"ABC" + 1B];
        D.11928 = *D.11927;
        D.11929 = (int) D.11928;
        D.11930 = __s2 + 1;
        D.11931 = *D.11930;
        D.11932 = (int) D.11931;
        __result = D.11929 - D.11932;
        D.11933 = __s2_len > 1;
        D.11923 = __result == 0;
        D.11934 = D.11933 & D.11923;
        if (D.11934 != 0) goto <D.11935>; else goto <D.11936>;
        <D.11935>:
        D.11937 = &MEM[(void *)"ABC" + 2B];
        D.11938 = *D.11937;
        D.11939 = (int) D.11938;
        D.11940 = __s2 + 2;
        D.11941 = *D.11940;
        D.11942 = (int) D.11941;
        __result = D.11939 - D.11942;
        D.11943 = __s2_len > 2;
        D.11923 = __result == 0;
        D.11944 = D.11943 & D.11923;
        if (D.11944 != 0) goto <D.11945>; else goto <D.11946>;
        <D.11945>:
        D.11947 = &MEM[(void *)"ABC" + 3B];
        D.11948 = *D.11947;
        D.11949 = (int) D.11948;
        D.11950 = __s2 + 3;
        D.11951 = *D.11950;
        D.11952 = (int) D.11951;
        __result = D.11949 - D.11952;
        <D.11946>:
        <D.11936>:
        <D.11926>:
      }
      D.8099 = __result;
    }
    iftmp.83 = -D.8099;
    goto <D.11953>;
    <D.11916>:
    D.11954 = *arr;
    iftmp.83 = __builtin_strcmp (D.11954, "ABC");
    <D.11953>:
    D.8100 = iftmp.83;
  }
  if (D.8100 == 0) goto <D.11955>; else goto <D.11913>;
  <D.11955>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = MEM[(char * *)arr + 8B];
      D.11959 = "DEF";
      D.11960 = MEM[(const unsigned char *)D.11959];
      D.11961 = (int) D.11960;
      D.11962 = *__s2;
      D.11963 = (int) D.11962;
      __result = D.11961 - D.11963;
      {
        D.11964 = __s2_len != 0;
        D.11965 = __result == 0;
        D.11966 = D.11964 & D.11965;
        if (D.11966 != 0) goto <D.11967>; else goto <D.11968>;
        <D.11967>:
        D.11969 = &MEM[(void *)"DEF" + 1B];
        D.11970 = *D.11969;
        D.11971 = (int) D.11970;
        D.11972 = __s2 + 1;
        D.11973 = *D.11972;
        D.11974 = (int) D.11973;
        __result = D.11971 - D.11974;
        D.11975 = __s2_len > 1;
        D.11965 = __result == 0;
        D.11976 = D.11975 & D.11965;
        if (D.11976 != 0) goto <D.11977>; else goto <D.11978>;
        <D.11977>:
        D.11979 = &MEM[(void *)"DEF" + 2B];
        D.11980 = *D.11979;
        D.11981 = (int) D.11980;
        D.11982 = __s2 + 2;
        D.11983 = *D.11982;
        D.11984 = (int) D.11983;
        __result = D.11981 - D.11984;
        D.11985 = __s2_len > 2;
        D.11965 = __result == 0;
        D.11986 = D.11985 & D.11965;
        if (D.11986 != 0) goto <D.11987>; else goto <D.11988>;
        <D.11987>:
        D.11989 = &MEM[(void *)"DEF" + 3B];
        D.11990 = *D.11989;
        D.11991 = (int) D.11990;
        D.11992 = __s2 + 3;
        D.11993 = *D.11992;
        D.11994 = (int) D.11993;
        __result = D.11991 - D.11994;
        <D.11988>:
        <D.11978>:
        <D.11968>:
      }
      D.8108 = __result;
    }
    iftmp.84 = -D.8108;
    goto <D.11995>;
    <D.11958>:
    D.11996 = arr + 8;
    D.11997 = *D.11996;
    iftmp.84 = __builtin_strcmp (D.11997, "DEF");
    <D.11995>:
    D.8109 = iftmp.84;
  }
  if (D.8109 == 0) goto <D.11998>; else goto <D.11913>;
  <D.11998>:
  D.11999 = 0;
  return D.11999;
  <D.11913>:
  D.11999 = 1;
  return D.11999;
}


mono_test_marshal_cdecl_delegate (int (*CdeclDelegate) (int, int) del)
{
  int D.12001;
  int i;

  i = 0;
  goto <D.8118>;
  <D.8117>:
  del (1, 2);
  i = i + 1;
  <D.8118>:
  if (i <= 999) goto <D.8117>; else goto <D.8119>;
  <D.8119>:
  D.12001 = 0;
  return D.12001;
}


mono_test_marshal_return_string_array_delegate (char * * (*ReturnStringArrayDelegate) (int) d)
{
  int D.12005;
  int D.8135;
  int iftmp.85;
  int D.8134;
  const char[4] * D.12012;
  unsigned char D.12013;
  int D.12014;
  unsigned char D.12015;
  int D.12016;
  _Bool D.12017;
  _Bool D.12018;
  _Bool D.12019;
  const unsigned char * D.12022;
  unsigned char D.12023;
  int D.12024;
  const unsigned char * D.12025;
  unsigned char D.12026;
  int D.12027;
  _Bool D.12028;
  _Bool D.12029;
  const unsigned char * D.12032;
  unsigned char D.12033;
  int D.12034;
  const unsigned char * D.12035;
  unsigned char D.12036;
  int D.12037;
  _Bool D.12038;
  _Bool D.12039;
  const unsigned char * D.12042;
  unsigned char D.12043;
  int D.12044;
  const unsigned char * D.12045;
  unsigned char D.12046;
  int D.12047;
  char * D.12049;
  int D.8144;
  int iftmp.86;
  int D.8143;
  const char[4] * D.12054;
  unsigned char D.12055;
  int D.12056;
  unsigned char D.12057;
  int D.12058;
  _Bool D.12059;
  _Bool D.12060;
  _Bool D.12061;
  const unsigned char * D.12064;
  unsigned char D.12065;
  int D.12066;
  const unsigned char * D.12067;
  unsigned char D.12068;
  int D.12069;
  _Bool D.12070;
  _Bool D.12071;
  const unsigned char * D.12074;
  unsigned char D.12075;
  int D.12076;
  const unsigned char * D.12077;
  unsigned char D.12078;
  int D.12079;
  _Bool D.12080;
  _Bool D.12081;
  const unsigned char * D.12084;
  unsigned char D.12085;
  int D.12086;
  const unsigned char * D.12087;
  unsigned char D.12088;
  int D.12089;
  char * * D.12091;
  char * D.12092;
  char * * arr;
  int res;

  arr = d (2);
  if (arr == 0B) goto <D.12003>; else goto <D.12004>;
  <D.12003>:
  D.12005 = 3;
  return D.12005;
  <D.12004>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = *arr;
      D.12012 = "ABC";
      D.12013 = MEM[(const unsigned char *)D.12012];
      D.12014 = (int) D.12013;
      D.12015 = *__s2;
      D.12016 = (int) D.12015;
      __result = D.12014 - D.12016;
      {
        D.12017 = __s2_len != 0;
        D.12018 = __result == 0;
        D.12019 = D.12017 & D.12018;
        if (D.12019 != 0) goto <D.12020>; else goto <D.12021>;
        <D.12020>:
        D.12022 = &MEM[(void *)"ABC" + 1B];
        D.12023 = *D.12022;
        D.12024 = (int) D.12023;
        D.12025 = __s2 + 1;
        D.12026 = *D.12025;
        D.12027 = (int) D.12026;
        __result = D.12024 - D.12027;
        D.12028 = __s2_len > 1;
        D.12018 = __result == 0;
        D.12029 = D.12028 & D.12018;
        if (D.12029 != 0) goto <D.12030>; else goto <D.12031>;
        <D.12030>:
        D.12032 = &MEM[(void *)"ABC" + 2B];
        D.12033 = *D.12032;
        D.12034 = (int) D.12033;
        D.12035 = __s2 + 2;
        D.12036 = *D.12035;
        D.12037 = (int) D.12036;
        __result = D.12034 - D.12037;
        D.12038 = __s2_len > 2;
        D.12018 = __result == 0;
        D.12039 = D.12038 & D.12018;
        if (D.12039 != 0) goto <D.12040>; else goto <D.12041>;
        <D.12040>:
        D.12042 = &MEM[(void *)"ABC" + 3B];
        D.12043 = *D.12042;
        D.12044 = (int) D.12043;
        D.12045 = __s2 + 3;
        D.12046 = *D.12045;
        D.12047 = (int) D.12046;
        __result = D.12044 - D.12047;
        <D.12041>:
        <D.12031>:
        <D.12021>:
      }
      D.8134 = __result;
    }
    iftmp.85 = -D.8134;
    goto <D.12048>;
    <D.12011>:
    D.12049 = *arr;
    iftmp.85 = __builtin_strcmp (D.12049, "ABC");
    <D.12048>:
    D.8135 = iftmp.85;
  }
  if (D.8135 != 0) goto <D.12006>; else goto <D.12050>;
  <D.12050>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = MEM[(char * *)arr + 8B];
      D.12054 = "DEF";
      D.12055 = MEM[(const unsigned char *)D.12054];
      D.12056 = (int) D.12055;
      D.12057 = *__s2;
      D.12058 = (int) D.12057;
      __result = D.12056 - D.12058;
      {
        D.12059 = __s2_len != 0;
        D.12060 = __result == 0;
        D.12061 = D.12059 & D.12060;
        if (D.12061 != 0) goto <D.12062>; else goto <D.12063>;
        <D.12062>:
        D.12064 = &MEM[(void *)"DEF" + 1B];
        D.12065 = *D.12064;
        D.12066 = (int) D.12065;
        D.12067 = __s2 + 1;
        D.12068 = *D.12067;
        D.12069 = (int) D.12068;
        __result = D.12066 - D.12069;
        D.12070 = __s2_len > 1;
        D.12060 = __result == 0;
        D.12071 = D.12070 & D.12060;
        if (D.12071 != 0) goto <D.12072>; else goto <D.12073>;
        <D.12072>:
        D.12074 = &MEM[(void *)"DEF" + 2B];
        D.12075 = *D.12074;
        D.12076 = (int) D.12075;
        D.12077 = __s2 + 2;
        D.12078 = *D.12077;
        D.12079 = (int) D.12078;
        __result = D.12076 - D.12079;
        D.12080 = __s2_len > 2;
        D.12060 = __result == 0;
        D.12081 = D.12080 & D.12060;
        if (D.12081 != 0) goto <D.12082>; else goto <D.12083>;
        <D.12082>:
        D.12084 = &MEM[(void *)"DEF" + 3B];
        D.12085 = *D.12084;
        D.12086 = (int) D.12085;
        D.12087 = __s2 + 3;
        D.12088 = *D.12087;
        D.12089 = (int) D.12088;
        __result = D.12086 - D.12089;
        <D.12083>:
        <D.12073>:
        <D.12063>:
      }
      D.8143 = __result;
    }
    iftmp.86 = -D.8143;
    goto <D.12090>;
    <D.12053>:
    D.12091 = arr + 8;
    D.12092 = *D.12091;
    iftmp.86 = __builtin_strcmp (D.12092, "DEF");
    <D.12090>:
    D.8144 = iftmp.86;
  }
  if (D.8144 != 0) goto <D.12006>; else goto <D.12007>;
  <D.12006>:
  res = 1;
  goto <D.12008>;
  <D.12007>:
  res = 0;
  <D.12008>:
  marshal_free (arr);
  D.12005 = res;
  return D.12005;
}


mono_test_marshal_byref_string_delegate (int (*ByrefStringDelegate) (char * *) d)
{
  int D.12096;
  int D.8160;
  int iftmp.87;
  int D.8159;
  const char[4] * D.12100;
  unsigned char D.12101;
  int D.12102;
  unsigned char D.12103;
  int D.12104;
  _Bool D.12105;
  _Bool D.12106;
  _Bool D.12107;
  const unsigned char * D.12110;
  unsigned char D.12111;
  int D.12112;
  const unsigned char * D.12113;
  unsigned char D.12114;
  int D.12115;
  _Bool D.12116;
  _Bool D.12117;
  const unsigned char * D.12120;
  unsigned char D.12121;
  int D.12122;
  const unsigned char * D.12123;
  unsigned char D.12124;
  int D.12125;
  _Bool D.12126;
  _Bool D.12127;
  const unsigned char * D.12130;
  unsigned char D.12131;
  int D.12132;
  const unsigned char * D.12133;
  unsigned char D.12134;
  int D.12135;
  char * s.88;
  char * s;
  int res;

  try
    {
      s = "ABC";
      res = d (&s);
      if (res != 0) goto <D.12094>; else goto <D.12095>;
      <D.12094>:
      D.12096 = res;
      return D.12096;
      <D.12095>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = s;
          D.12100 = "DEF";
          D.12101 = MEM[(const unsigned char *)D.12100];
          D.12102 = (int) D.12101;
          D.12103 = *__s2;
          D.12104 = (int) D.12103;
          __result = D.12102 - D.12104;
          {
            D.12105 = __s2_len != 0;
            D.12106 = __result == 0;
            D.12107 = D.12105 & D.12106;
            if (D.12107 != 0) goto <D.12108>; else goto <D.12109>;
            <D.12108>:
            D.12110 = &MEM[(void *)"DEF" + 1B];
            D.12111 = *D.12110;
            D.12112 = (int) D.12111;
            D.12113 = __s2 + 1;
            D.12114 = *D.12113;
            D.12115 = (int) D.12114;
            __result = D.12112 - D.12115;
            D.12116 = __s2_len > 1;
            D.12106 = __result == 0;
            D.12117 = D.12116 & D.12106;
            if (D.12117 != 0) goto <D.12118>; else goto <D.12119>;
            <D.12118>:
            D.12120 = &MEM[(void *)"DEF" + 2B];
            D.12121 = *D.12120;
            D.12122 = (int) D.12121;
            D.12123 = __s2 + 2;
            D.12124 = *D.12123;
            D.12125 = (int) D.12124;
            __result = D.12122 - D.12125;
            D.12126 = __s2_len > 2;
            D.12106 = __result == 0;
            D.12127 = D.12126 & D.12106;
            if (D.12127 != 0) goto <D.12128>; else goto <D.12129>;
            <D.12128>:
            D.12130 = &MEM[(void *)"DEF" + 3B];
            D.12131 = *D.12130;
            D.12132 = (int) D.12131;
            D.12133 = __s2 + 3;
            D.12134 = *D.12133;
            D.12135 = (int) D.12134;
            __result = D.12132 - D.12135;
            <D.12129>:
            <D.12119>:
            <D.12109>:
          }
          D.8159 = __result;
        }
        iftmp.87 = -D.8159;
        goto <D.12136>;
        <D.12099>:
        s.88 = s;
        iftmp.87 = __builtin_strcmp (s.88, "DEF");
        <D.12136>:
        D.8160 = iftmp.87;
      }
      if (D.8160 == 0) goto <D.12138>; else goto <D.12139>;
      <D.12138>:
      res = 0;
      goto <D.12140>;
      <D.12139>:
      res = 2;
      <D.12140>:
      s.88 = s;
      marshal_free (s.88);
      D.12096 = res;
      return D.12096;
    }
  finally
    {
      s = {CLOBBER};
    }
}


add_delegate (int i, int j)
{
  int D.12143;

  D.12143 = i + j;
  return D.12143;
}


mono_test_marshal_return_fnptr ()
{
  void * D.12145;

  D.12145 = add_delegate;
  return D.12145;
}


mono_xr (int code)
{
  int D.12147;

  printf ("codigo %x\n", code);
  D.12147 = code + 1234;
  return D.12147;
}


mono_xr_as_handle (int code)
{
  struct HandleRef D.12149;
  struct HandleRef ref;

  try
    {
      memset (&ref, 0, 4);
      D.12149 = ref;
      return D.12149;
    }
  finally
    {
      ref = {CLOBBER};
    }
}


mono_safe_handle_struct_ref (struct HandleStructs * x)
{
  void * D.12152;
  void * D.12153;
  int D.12154;
  int D.12155;
  int D.12158;

  printf ("Dingus Ref! \n");
  D.12152 = x->handle2;
  D.12153 = x->handle1;
  D.12154 = x->b;
  D.12155 = x->a;
  printf ("Values: %d %d %p %p\n", D.12155, D.12154, D.12153, D.12152);
  D.12155 = x->a;
  if (D.12155 != 1234) goto <D.12156>; else goto <D.12157>;
  <D.12156>:
  D.12158 = 1;
  return D.12158;
  <D.12157>:
  D.12154 = x->b;
  if (D.12154 != 8743) goto <D.12159>; else goto <D.12160>;
  <D.12159>:
  D.12158 = 2;
  return D.12158;
  <D.12160>:
  D.12153 = x->handle1;
  if (D.12153 != 1887502061B) goto <D.12161>; else goto <D.12162>;
  <D.12161>:
  D.12158 = 3;
  return D.12158;
  <D.12162>:
  D.12152 = x->handle2;
  if (D.12152 != 305441741B) goto <D.12163>; else goto <D.12164>;
  <D.12163>:
  D.12158 = 4;
  return D.12158;
  <D.12164>:
  D.12158 = 61453;
  return D.12158;
}


mono_safe_handle_struct (struct HandleStructs x)
{
  void * D.12166;
  void * D.12167;
  int D.12168;
  int D.12169;
  int D.12172;

  printf ("Dingus Standard! \n");
  D.12166 = x.handle2;
  D.12167 = x.handle1;
  D.12168 = x.b;
  D.12169 = x.a;
  printf ("Values: %d %d %p %p\n", D.12169, D.12168, D.12167, D.12166);
  D.12169 = x.a;
  if (D.12169 != 1234) goto <D.12170>; else goto <D.12171>;
  <D.12170>:
  D.12172 = 1;
  return D.12172;
  <D.12171>:
  D.12168 = x.b;
  if (D.12168 != 8743) goto <D.12173>; else goto <D.12174>;
  <D.12173>:
  D.12172 = 2;
  return D.12172;
  <D.12174>:
  D.12167 = x.handle1;
  if (D.12167 != 1887502061B) goto <D.12175>; else goto <D.12176>;
  <D.12175>:
  D.12172 = 3;
  return D.12172;
  <D.12176>:
  D.12166 = x.handle2;
  if (D.12166 != 305441741B) goto <D.12177>; else goto <D.12178>;
  <D.12177>:
  D.12172 = 4;
  return D.12172;
  <D.12178>:
  D.12172 = 61455;
  return D.12172;
}


mono_safe_handle_struct_simple (struct TrivialHandle x)
{
  void * D.12180;
  int D.12181;
  long int D.12182;
  int D.12183;

  D.12180 = x.a;
  printf ("The value is %p\n", D.12180);
  D.12180 = x.a;
  D.12182 = (long int) D.12180;
  D.12183 = (int) D.12182;
  D.12181 = D.12183 * 2;
  return D.12181;
}


mono_safe_handle_return ()
{
  int D.12185;

  D.12185 = 268496909;
  return D.12185;
}


mono_safe_handle_ref (void * * handle)
{
  void * D.12187;

  D.12187 = *handle;
  if (D.12187 != 0B) goto <D.12188>; else goto <D.12189>;
  <D.12188>:
  *handle = 2989B;
  return;
  <D.12189>:
  *handle = 32781B;
}


mono_test_marshal_date_time (double d, double * d2)
{
  double D.12191;

  *d2 = d;
  D.12191 = d;
  return D.12191;
}


VariantInit (struct VARIANT * vt)
{
  vt->vt = 0;
}


mono_test_marshal_bstr_in (gunichar2 * bstr)
{
  int result.90;
  int iftmp.89;
  int D.8299;
  const char[26] * D.12196;
  unsigned char D.12197;
  int D.12198;
  unsigned char D.12199;
  int D.12200;
  _Bool D.12201;
  _Bool D.12202;
  _Bool D.12203;
  const unsigned char * D.12206;
  unsigned char D.12207;
  int D.12208;
  const unsigned char * D.12209;
  unsigned char D.12210;
  int D.12211;
  _Bool D.12212;
  _Bool D.12213;
  const unsigned char * D.12216;
  unsigned char D.12217;
  int D.12218;
  const unsigned char * D.12219;
  unsigned char D.12220;
  int D.12221;
  _Bool D.12222;
  _Bool D.12223;
  const unsigned char * D.12226;
  unsigned char D.12227;
  int D.12228;
  const unsigned char * D.12229;
  unsigned char D.12230;
  int D.12231;
  int D.12235;
  gint32 result;
  gchar * bstr_utf8;

  result = 0;
  bstr_utf8 = monoeg_g_utf16_to_utf8 (bstr, -1, 0B, 0B, 0B);
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 25;
    if (__s1_len <= 3) goto <D.12194>; else goto <D.12195>;
    <D.12194>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = bstr_utf8;
      D.12196 = "mono_test_marshal_bstr_in";
      D.12197 = MEM[(const unsigned char *)D.12196];
      D.12198 = (int) D.12197;
      D.12199 = *__s2;
      D.12200 = (int) D.12199;
      __result = D.12198 - D.12200;
      {
        D.12201 = __s1_len != 0;
        D.12202 = __result == 0;
        D.12203 = D.12201 & D.12202;
        if (D.12203 != 0) goto <D.12204>; else goto <D.12205>;
        <D.12204>:
        D.12206 = &MEM[(void *)"mono_test_marshal_bstr_in" + 1B];
        D.12207 = *D.12206;
        D.12208 = (int) D.12207;
        D.12209 = __s2 + 1;
        D.12210 = *D.12209;
        D.12211 = (int) D.12210;
        __result = D.12208 - D.12211;
        D.12212 = __s1_len > 1;
        D.12202 = __result == 0;
        D.12213 = D.12212 & D.12202;
        if (D.12213 != 0) goto <D.12214>; else goto <D.12215>;
        <D.12214>:
        D.12216 = &MEM[(void *)"mono_test_marshal_bstr_in" + 2B];
        D.12217 = *D.12216;
        D.12218 = (int) D.12217;
        D.12219 = __s2 + 2;
        D.12220 = *D.12219;
        D.12221 = (int) D.12220;
        __result = D.12218 - D.12221;
        D.12222 = __s1_len > 2;
        D.12202 = __result == 0;
        D.12223 = D.12222 & D.12202;
        if (D.12223 != 0) goto <D.12224>; else goto <D.12225>;
        <D.12224>:
        D.12226 = &MEM[(void *)"mono_test_marshal_bstr_in" + 3B];
        D.12227 = *D.12226;
        D.12228 = (int) D.12227;
        D.12229 = __s2 + 3;
        D.12230 = *D.12229;
        D.12231 = (int) D.12230;
        __result = D.12228 - D.12231;
        <D.12225>:
        <D.12215>:
        <D.12205>:
      }
      D.8299 = __result;
    }
    iftmp.89 = D.8299;
    goto <D.12232>;
    <D.12195>:
    iftmp.89 = __builtin_strcmp ("mono_test_marshal_bstr_in", bstr_utf8);
    <D.12232>:
    result.90 = iftmp.89;
  }
  result = result.90;
  monoeg_g_free (bstr_utf8);
  if (result == 0) goto <D.12233>; else goto <D.12234>;
  <D.12233>:
  D.12235 = 0;
  return D.12235;
  <D.12234>:
  D.12235 = 1;
  return D.12235;
}


mono_test_marshal_bstr_out (gunichar2 * * bstr)
{
  gunichar2 * D.12237;
  int D.12238;

  D.12237 = marshal_bstr_alloc ("mono_test_marshal_bstr_out");
  *bstr = D.12237;
  D.12238 = 0;
  return D.12238;
}


marshal_bstr_alloc (const gchar * str)
{
  long unsigned int D.12240;
  int D.12241;
  long unsigned int D.12242;
  long unsigned int D.12243;
  long unsigned int D.12244;
  gunichar2 * D.12247;
  long unsigned int D.12248;
  long unsigned int D.12249;
  gchar * D.12250;
  unsigned int D.12251;
  unsigned int D.12252;
  long unsigned int D.12253;
  long unsigned int D.12254;
  gchar * D.12255;
  long unsigned int D.12256;
  gchar * D.12257;
  gchar * ret;
  int slen;
  gunichar2 * temp;

  ret = 0B;
  D.12240 = strlen (str);
  slen = (int) D.12240;
  D.12241 = slen + 1;
  D.12242 = (long unsigned int) D.12241;
  D.12243 = D.12242 + 2;
  D.12244 = D.12243 * 2;
  ret = monoeg_malloc (D.12244);
  if (ret == 0B) goto <D.12245>; else goto <D.12246>;
  <D.12245>:
  D.12247 = 0B;
  return D.12247;
  <D.12246>:
  temp = monoeg_g_utf8_to_utf16 (str, -1, 0B, 0B, 0B);
  D.12248 = (long unsigned int) slen;
  D.12249 = D.12248 * 2;
  D.12250 = ret + 4;
  memcpy (D.12250, temp, D.12249);
  D.12248 = (long unsigned int) slen;
  D.12251 = (unsigned int) D.12248;
  D.12252 = D.12251 * 2;
  MEM[(guint32 *)ret] = D.12252;
  D.12248 = (long unsigned int) slen;
  D.12253 = D.12248 + 2;
  D.12254 = D.12253 * 2;
  D.12255 = ret + D.12254;
  *D.12255 = 0;
  D.12248 = (long unsigned int) slen;
  D.12249 = D.12248 * 2;
  D.12256 = D.12249 + 5;
  D.12257 = ret + D.12256;
  *D.12257 = 0;
  D.12247 = ret + 4;
  return D.12247;
}


mono_test_marshal_bstr_in_null (gunichar2 * bstr)
{
  int D.12261;

  if (bstr == 0B) goto <D.12259>; else goto <D.12260>;
  <D.12259>:
  D.12261 = 0;
  return D.12261;
  <D.12260>:
  D.12261 = 1;
  return D.12261;
}


mono_test_marshal_bstr_out_null (gunichar2 * * bstr)
{
  int D.12263;

  *bstr = 0B;
  D.12263 = 0;
  return D.12263;
}


mono_test_marshal_variant_in_sbyte (struct VARIANT variant)
{
  short unsigned int D.12265;
  signed char D.12268;
  int D.12271;

  D.12265 = variant.vt;
  if (D.12265 == 16) goto <D.12266>; else goto <D.12267>;
  <D.12266>:
  D.12268 = variant.D.8229.cVal;
  if (D.12268 == 100) goto <D.12269>; else goto <D.12270>;
  <D.12269>:
  D.12271 = 0;
  return D.12271;
  <D.12270>:
  <D.12267>:
  D.12271 = 1;
  return D.12271;
}


mono_test_marshal_variant_in_byte (struct VARIANT variant)
{
  short unsigned int D.12273;
  unsigned char D.12276;
  int D.12279;

  D.12273 = variant.vt;
  if (D.12273 == 17) goto <D.12274>; else goto <D.12275>;
  <D.12274>:
  D.12276 = variant.D.8229.bVal;
  if (D.12276 == 100) goto <D.12277>; else goto <D.12278>;
  <D.12277>:
  D.12279 = 0;
  return D.12279;
  <D.12278>:
  <D.12275>:
  D.12279 = 1;
  return D.12279;
}


mono_test_marshal_variant_in_short (struct VARIANT variant)
{
  short unsigned int D.12281;
  short int D.12284;
  int D.12287;

  D.12281 = variant.vt;
  if (D.12281 == 2) goto <D.12282>; else goto <D.12283>;
  <D.12282>:
  D.12284 = variant.D.8229.iVal;
  if (D.12284 == 314) goto <D.12285>; else goto <D.12286>;
  <D.12285>:
  D.12287 = 0;
  return D.12287;
  <D.12286>:
  <D.12283>:
  D.12287 = 1;
  return D.12287;
}


mono_test_marshal_variant_in_ushort (struct VARIANT variant)
{
  short unsigned int D.12289;
  short unsigned int D.12292;
  int D.12295;

  D.12289 = variant.vt;
  if (D.12289 == 18) goto <D.12290>; else goto <D.12291>;
  <D.12290>:
  D.12292 = variant.D.8229.uiVal;
  if (D.12292 == 314) goto <D.12293>; else goto <D.12294>;
  <D.12293>:
  D.12295 = 0;
  return D.12295;
  <D.12294>:
  <D.12291>:
  D.12295 = 1;
  return D.12295;
}


mono_test_marshal_variant_in_int (struct VARIANT variant)
{
  short unsigned int D.12297;
  int D.12300;
  int D.12303;

  D.12297 = variant.vt;
  if (D.12297 == 3) goto <D.12298>; else goto <D.12299>;
  <D.12298>:
  D.12300 = variant.D.8229.lVal;
  if (D.12300 == 314) goto <D.12301>; else goto <D.12302>;
  <D.12301>:
  D.12303 = 0;
  return D.12303;
  <D.12302>:
  <D.12299>:
  D.12303 = 1;
  return D.12303;
}


mono_test_marshal_variant_in_uint (struct VARIANT variant)
{
  short unsigned int D.12305;
  unsigned int D.12308;
  int D.12311;

  D.12305 = variant.vt;
  if (D.12305 == 19) goto <D.12306>; else goto <D.12307>;
  <D.12306>:
  D.12308 = variant.D.8229.ulVal;
  if (D.12308 == 314) goto <D.12309>; else goto <D.12310>;
  <D.12309>:
  D.12311 = 0;
  return D.12311;
  <D.12310>:
  <D.12307>:
  D.12311 = 1;
  return D.12311;
}


mono_test_marshal_variant_in_long (struct VARIANT variant)
{
  short unsigned int D.12313;
  long int D.12316;
  int D.12319;

  D.12313 = variant.vt;
  if (D.12313 == 20) goto <D.12314>; else goto <D.12315>;
  <D.12314>:
  D.12316 = variant.D.8229.llVal;
  if (D.12316 == 314) goto <D.12317>; else goto <D.12318>;
  <D.12317>:
  D.12319 = 0;
  return D.12319;
  <D.12318>:
  <D.12315>:
  D.12319 = 1;
  return D.12319;
}


mono_test_marshal_variant_in_ulong (struct VARIANT variant)
{
  short unsigned int D.12321;
  long unsigned int D.12324;
  int D.12327;

  D.12321 = variant.vt;
  if (D.12321 == 21) goto <D.12322>; else goto <D.12323>;
  <D.12322>:
  D.12324 = variant.D.8229.ullVal;
  if (D.12324 == 314) goto <D.12325>; else goto <D.12326>;
  <D.12325>:
  D.12327 = 0;
  return D.12327;
  <D.12326>:
  <D.12323>:
  D.12327 = 1;
  return D.12327;
}


mono_test_marshal_variant_in_float (struct VARIANT variant)
{
  short unsigned int D.12329;
  float D.12332;
  double D.12333;
  double D.12334;
  double D.12335;
  int D.12338;

  D.12329 = variant.vt;
  if (D.12329 == 4) goto <D.12330>; else goto <D.12331>;
  <D.12330>:
  D.12332 = variant.D.8229.fltVal;
  D.12333 = (double) D.12332;
  D.12334 = D.12333 - 3.140000000000000124344978758017532527446746826171875e+0;
  D.12335 = D.12334 / 3.140000000000000124344978758017532527446746826171875e+0;
  if (D.12335 < 1.00000000000000002081668171172168513294309377670288085938e-3) goto <D.12336>; else goto <D.12337>;
  <D.12336>:
  D.12338 = 0;
  return D.12338;
  <D.12337>:
  <D.12331>:
  D.12338 = 1;
  return D.12338;
}


mono_test_marshal_variant_in_double (struct VARIANT variant)
{
  short unsigned int D.12340;
  double D.12343;
  double D.12344;
  double D.12345;
  int D.12348;

  D.12340 = variant.vt;
  if (D.12340 == 5) goto <D.12341>; else goto <D.12342>;
  <D.12341>:
  D.12343 = variant.D.8229.dblVal;
  D.12344 = D.12343 - 3.140000000000000124344978758017532527446746826171875e+0;
  D.12345 = D.12344 / 3.140000000000000124344978758017532527446746826171875e+0;
  if (D.12345 < 1.00000000000000002081668171172168513294309377670288085938e-3) goto <D.12346>; else goto <D.12347>;
  <D.12346>:
  D.12348 = 0;
  return D.12348;
  <D.12347>:
  <D.12342>:
  D.12348 = 1;
  return D.12348;
}


mono_test_marshal_variant_in_bstr (struct VARIANT variant)
{
  gunichar2 * D.12350;
  int result.92;
  int iftmp.91;
  int D.8352;
  const char[3] * D.12354;
  unsigned char D.12355;
  int D.12356;
  unsigned char D.12357;
  int D.12358;
  _Bool D.12359;
  _Bool D.12360;
  _Bool D.12361;
  const unsigned char * D.12364;
  unsigned char D.12365;
  int D.12366;
  const unsigned char * D.12367;
  unsigned char D.12368;
  int D.12369;
  _Bool D.12370;
  _Bool D.12371;
  const unsigned char * D.12374;
  unsigned char D.12375;
  int D.12376;
  const unsigned char * D.12377;
  unsigned char D.12378;
  int D.12379;
  _Bool D.12380;
  _Bool D.12381;
  const unsigned char * D.12384;
  unsigned char D.12385;
  int D.12386;
  const unsigned char * D.12387;
  unsigned char D.12388;
  int D.12389;
  short unsigned int D.12391;
  int D.12396;
  gint32 result;
  gchar * bstr_utf8;

  result = 0;
  D.12350 = variant.D.8229.bstrVal;
  bstr_utf8 = monoeg_g_utf16_to_utf8 (D.12350, -1, 0B, 0B, 0B);
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 2;
    if (__s1_len <= 3) goto <D.12352>; else goto <D.12353>;
    <D.12352>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = bstr_utf8;
      D.12354 = "PI";
      D.12355 = MEM[(const unsigned char *)D.12354];
      D.12356 = (int) D.12355;
      D.12357 = *__s2;
      D.12358 = (int) D.12357;
      __result = D.12356 - D.12358;
      {
        D.12359 = __s1_len != 0;
        D.12360 = __result == 0;
        D.12361 = D.12359 & D.12360;
        if (D.12361 != 0) goto <D.12362>; else goto <D.12363>;
        <D.12362>:
        D.12364 = &MEM[(void *)"PI" + 1B];
        D.12365 = *D.12364;
        D.12366 = (int) D.12365;
        D.12367 = __s2 + 1;
        D.12368 = *D.12367;
        D.12369 = (int) D.12368;
        __result = D.12366 - D.12369;
        D.12370 = __s1_len > 1;
        D.12360 = __result == 0;
        D.12371 = D.12370 & D.12360;
        if (D.12371 != 0) goto <D.12372>; else goto <D.12373>;
        <D.12372>:
        D.12374 = &MEM[(void *)"PI" + 2B];
        D.12375 = *D.12374;
        D.12376 = (int) D.12375;
        D.12377 = __s2 + 2;
        D.12378 = *D.12377;
        D.12379 = (int) D.12378;
        __result = D.12376 - D.12379;
        D.12380 = __s1_len > 2;
        D.12360 = __result == 0;
        D.12381 = D.12380 & D.12360;
        if (D.12381 != 0) goto <D.12382>; else goto <D.12383>;
        <D.12382>:
        D.12384 = &MEM[(void *)"PI" + 3B];
        D.12385 = *D.12384;
        D.12386 = (int) D.12385;
        D.12387 = __s2 + 3;
        D.12388 = *D.12387;
        D.12389 = (int) D.12388;
        __result = D.12386 - D.12389;
        <D.12383>:
        <D.12373>:
        <D.12363>:
      }
      D.8352 = __result;
    }
    iftmp.91 = D.8352;
    goto <D.12390>;
    <D.12353>:
    iftmp.91 = __builtin_strcmp ("PI", bstr_utf8);
    <D.12390>:
    result.92 = iftmp.91;
  }
  result = result.92;
  monoeg_g_free (bstr_utf8);
  D.12391 = variant.vt;
  if (D.12391 == 8) goto <D.12392>; else goto <D.12393>;
  <D.12392>:
  if (result == 0) goto <D.12394>; else goto <D.12395>;
  <D.12394>:
  D.12396 = 0;
  return D.12396;
  <D.12395>:
  <D.12393>:
  D.12396 = 1;
  return D.12396;
}


mono_test_marshal_variant_in_bool_true (struct VARIANT variant)
{
  short unsigned int D.12398;
  short int D.12401;
  int D.12404;

  D.12398 = variant.vt;
  if (D.12398 == 11) goto <D.12399>; else goto <D.12400>;
  <D.12399>:
  D.12401 = variant.D.8229.boolVal;
  if (D.12401 == -1) goto <D.12402>; else goto <D.12403>;
  <D.12402>:
  D.12404 = 0;
  return D.12404;
  <D.12403>:
  <D.12400>:
  D.12404 = 1;
  return D.12404;
}


mono_test_marshal_variant_in_bool_false (struct VARIANT variant)
{
  short unsigned int D.12406;
  short int D.12409;
  int D.12412;

  D.12406 = variant.vt;
  if (D.12406 == 11) goto <D.12407>; else goto <D.12408>;
  <D.12407>:
  D.12409 = variant.D.8229.boolVal;
  if (D.12409 == 0) goto <D.12410>; else goto <D.12411>;
  <D.12410>:
  D.12412 = 0;
  return D.12412;
  <D.12411>:
  <D.12408>:
  D.12412 = 1;
  return D.12412;
}


mono_test_marshal_variant_out_sbyte (struct VARIANT * variant)
{
  int D.12414;

  variant->vt = 16;
  variant->D.8229.cVal = 100;
  D.12414 = 0;
  return D.12414;
}


mono_test_marshal_variant_out_sbyte_byref (struct VARIANT * variant)
{
  void * D.12416;
  void * D.12417;
  int D.12418;

  variant->vt = 16400;
  D.12416 = marshal_alloc (1);
  variant->D.8229.byref = D.12416;
  D.12417 = variant->D.8229.byref;
  MEM[(gint8 *)D.12417] = 100;
  D.12418 = 0;
  return D.12418;
}


mono_test_marshal_variant_out_byte (struct VARIANT * variant)
{
  int D.12420;

  variant->vt = 17;
  variant->D.8229.bVal = 100;
  D.12420 = 0;
  return D.12420;
}


mono_test_marshal_variant_out_byte_byref (struct VARIANT * variant)
{
  void * D.12422;
  void * D.12423;
  int D.12424;

  variant->vt = 16401;
  D.12422 = marshal_alloc (1);
  variant->D.8229.byref = D.12422;
  D.12423 = variant->D.8229.byref;
  MEM[(gint8 *)D.12423] = 100;
  D.12424 = 0;
  return D.12424;
}


mono_test_marshal_variant_out_short (struct VARIANT * variant)
{
  int D.12426;

  variant->vt = 2;
  variant->D.8229.iVal = 314;
  D.12426 = 0;
  return D.12426;
}


mono_test_marshal_variant_out_short_byref (struct VARIANT * variant)
{
  void * D.12428;
  void * D.12429;
  int D.12430;

  variant->vt = 16386;
  D.12428 = marshal_alloc (2);
  variant->D.8229.byref = D.12428;
  D.12429 = variant->D.8229.byref;
  MEM[(gint16 *)D.12429] = 314;
  D.12430 = 0;
  return D.12430;
}


mono_test_marshal_variant_out_ushort (struct VARIANT * variant)
{
  int D.12432;

  variant->vt = 18;
  variant->D.8229.uiVal = 314;
  D.12432 = 0;
  return D.12432;
}


mono_test_marshal_variant_out_ushort_byref (struct VARIANT * variant)
{
  void * D.12434;
  void * D.12435;
  int D.12436;

  variant->vt = 16402;
  D.12434 = marshal_alloc (2);
  variant->D.8229.byref = D.12434;
  D.12435 = variant->D.8229.byref;
  MEM[(guint16 *)D.12435] = 314;
  D.12436 = 0;
  return D.12436;
}


mono_test_marshal_variant_out_int (struct VARIANT * variant)
{
  int D.12438;

  variant->vt = 3;
  variant->D.8229.lVal = 314;
  D.12438 = 0;
  return D.12438;
}


mono_test_marshal_variant_out_int_byref (struct VARIANT * variant)
{
  void * D.12440;
  void * D.12441;
  int D.12442;

  variant->vt = 16387;
  D.12440 = marshal_alloc (4);
  variant->D.8229.byref = D.12440;
  D.12441 = variant->D.8229.byref;
  MEM[(gint32 *)D.12441] = 314;
  D.12442 = 0;
  return D.12442;
}


mono_test_marshal_variant_out_uint (struct VARIANT * variant)
{
  int D.12444;

  variant->vt = 19;
  variant->D.8229.ulVal = 314;
  D.12444 = 0;
  return D.12444;
}


mono_test_marshal_variant_out_uint_byref (struct VARIANT * variant)
{
  void * D.12446;
  void * D.12447;
  int D.12448;

  variant->vt = 16403;
  D.12446 = marshal_alloc (4);
  variant->D.8229.byref = D.12446;
  D.12447 = variant->D.8229.byref;
  MEM[(guint32 *)D.12447] = 314;
  D.12448 = 0;
  return D.12448;
}


mono_test_marshal_variant_out_long (struct VARIANT * variant)
{
  int D.12450;

  variant->vt = 20;
  variant->D.8229.llVal = 314;
  D.12450 = 0;
  return D.12450;
}


mono_test_marshal_variant_out_long_byref (struct VARIANT * variant)
{
  void * D.12452;
  void * D.12453;
  int D.12454;

  variant->vt = 16404;
  D.12452 = marshal_alloc (8);
  variant->D.8229.byref = D.12452;
  D.12453 = variant->D.8229.byref;
  MEM[(gint64 *)D.12453] = 314;
  D.12454 = 0;
  return D.12454;
}


mono_test_marshal_variant_out_ulong (struct VARIANT * variant)
{
  int D.12456;

  variant->vt = 21;
  variant->D.8229.ullVal = 314;
  D.12456 = 0;
  return D.12456;
}


mono_test_marshal_variant_out_ulong_byref (struct VARIANT * variant)
{
  void * D.12458;
  void * D.12459;
  int D.12460;

  variant->vt = 16405;
  D.12458 = marshal_alloc (8);
  variant->D.8229.byref = D.12458;
  D.12459 = variant->D.8229.byref;
  MEM[(guint64 *)D.12459] = 314;
  D.12460 = 0;
  return D.12460;
}


mono_test_marshal_variant_out_float (struct VARIANT * variant)
{
  int D.12462;

  variant->vt = 4;
  variant->D.8229.fltVal = 3.1400001049041748046875e+0;
  D.12462 = 0;
  return D.12462;
}


mono_test_marshal_variant_out_float_byref (struct VARIANT * variant)
{
  void * D.12464;
  void * D.12465;
  int D.12466;

  variant->vt = 16388;
  D.12464 = marshal_alloc (4);
  variant->D.8229.byref = D.12464;
  D.12465 = variant->D.8229.byref;
  MEM[(float *)D.12465] = 3.1400001049041748046875e+0;
  D.12466 = 0;
  return D.12466;
}


mono_test_marshal_variant_out_double (struct VARIANT * variant)
{
  int D.12468;

  variant->vt = 5;
  variant->D.8229.dblVal = 3.140000000000000124344978758017532527446746826171875e+0;
  D.12468 = 0;
  return D.12468;
}


mono_test_marshal_variant_out_double_byref (struct VARIANT * variant)
{
  void * D.12470;
  void * D.12471;
  int D.12472;

  variant->vt = 16389;
  D.12470 = marshal_alloc (8);
  variant->D.8229.byref = D.12470;
  D.12471 = variant->D.8229.byref;
  MEM[(double *)D.12471] = 3.140000000000000124344978758017532527446746826171875e+0;
  D.12472 = 0;
  return D.12472;
}


mono_test_marshal_variant_out_bstr (struct VARIANT * variant)
{
  gunichar2 * D.12474;
  int D.12475;

  variant->vt = 8;
  D.12474 = marshal_bstr_alloc ("PI");
  variant->D.8229.bstrVal = D.12474;
  D.12475 = 0;
  return D.12475;
}


mono_test_marshal_variant_out_bstr_byref (struct VARIANT * variant)
{
  void * D.12477;
  void * D.12478;
  gunichar2 * D.12479;
  int D.12480;

  variant->vt = 16392;
  D.12477 = marshal_alloc (8);
  variant->D.8229.byref = D.12477;
  D.12478 = variant->D.8229.byref;
  D.12479 = marshal_bstr_alloc ("PI");
  MEM[(gunichar * *)D.12478] = D.12479;
  D.12480 = 0;
  return D.12480;
}


mono_test_marshal_variant_out_bool_true (struct VARIANT * variant)
{
  int D.12482;

  variant->vt = 11;
  variant->D.8229.boolVal = -1;
  D.12482 = 0;
  return D.12482;
}


mono_test_marshal_variant_out_bool_true_byref (struct VARIANT * variant)
{
  void * D.12484;
  void * D.12485;
  int D.12486;

  variant->vt = 16395;
  D.12484 = marshal_alloc (2);
  variant->D.8229.byref = D.12484;
  D.12485 = variant->D.8229.byref;
  MEM[(gint16 *)D.12485] = -1;
  D.12486 = 0;
  return D.12486;
}


mono_test_marshal_variant_out_bool_false (struct VARIANT * variant)
{
  int D.12488;

  variant->vt = 11;
  variant->D.8229.boolVal = 0;
  D.12488 = 0;
  return D.12488;
}


mono_test_marshal_variant_out_bool_false_byref (struct VARIANT * variant)
{
  void * D.12490;
  void * D.12491;
  int D.12492;

  variant->vt = 16395;
  D.12490 = marshal_alloc (2);
  variant->D.8229.byref = D.12490;
  D.12491 = variant->D.8229.byref;
  MEM[(gint16 *)D.12491] = 0;
  D.12492 = 0;
  return D.12492;
}


mono_test_marshal_variant_in_sbyte_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12494;
  struct VARIANT vt;

  try
    {
      vt.vt = 16;
      vt.D.8229.cVal = -100;
      D.12494 = func (16, vt);
      return D.12494;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_byte_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12497;
  struct VARIANT vt;

  try
    {
      vt.vt = 17;
      vt.D.8229.bVal = 100;
      D.12497 = func (17, vt);
      return D.12497;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_short_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12500;
  struct VARIANT vt;

  try
    {
      vt.vt = 2;
      vt.D.8229.iVal = -100;
      D.12500 = func (2, vt);
      return D.12500;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_ushort_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12503;
  struct VARIANT vt;

  try
    {
      vt.vt = 18;
      vt.D.8229.uiVal = 100;
      D.12503 = func (18, vt);
      return D.12503;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_int_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12506;
  struct VARIANT vt;

  try
    {
      vt.vt = 3;
      vt.D.8229.lVal = -100;
      D.12506 = func (3, vt);
      return D.12506;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_uint_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12509;
  struct VARIANT vt;

  try
    {
      vt.vt = 19;
      vt.D.8229.ulVal = 100;
      D.12509 = func (19, vt);
      return D.12509;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_long_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12512;
  struct VARIANT vt;

  try
    {
      vt.vt = 20;
      vt.D.8229.llVal = -100;
      D.12512 = func (20, vt);
      return D.12512;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_ulong_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12515;
  struct VARIANT vt;

  try
    {
      vt.vt = 21;
      vt.D.8229.ullVal = 100;
      D.12515 = func (21, vt);
      return D.12515;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_float_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12518;
  struct VARIANT vt;

  try
    {
      vt.vt = 4;
      vt.D.8229.fltVal = 3.1400001049041748046875e+0;
      D.12518 = func (4, vt);
      return D.12518;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_double_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12521;
  struct VARIANT vt;

  try
    {
      vt.vt = 5;
      vt.D.8229.dblVal = 3.140000000000000124344978758017532527446746826171875e+0;
      D.12521 = func (5, vt);
      return D.12521;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_bstr_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  gunichar2 * D.12524;
  int D.12525;
  struct VARIANT vt;

  try
    {
      vt.vt = 8;
      D.12524 = marshal_bstr_alloc ("PI");
      vt.D.8229.bstrVal = D.12524;
      D.12525 = func (8, vt);
      return D.12525;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_bool_true_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12528;
  struct VARIANT vt;

  try
    {
      vt.vt = 11;
      vt.D.8229.boolVal = -1;
      D.12528 = func (11, vt);
      return D.12528;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_in_bool_false_unmanaged (int (*VarFunc) (int, struct VARIANT) func)
{
  int D.12531;
  struct VARIANT vt;

  try
    {
      vt.vt = 11;
      vt.D.8229.boolVal = 0;
      D.12531 = func (11, vt);
      return D.12531;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_sbyte_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12534;
  signed char D.12537;
  int D.12540;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (16, &vt);
      D.12534 = vt.vt;
      if (D.12534 == 16) goto <D.12535>; else goto <D.12536>;
      <D.12535>:
      D.12537 = vt.D.8229.cVal;
      if (D.12537 == -100) goto <D.12538>; else goto <D.12539>;
      <D.12538>:
      D.12540 = 0;
      return D.12540;
      <D.12539>:
      <D.12536>:
      D.12540 = 1;
      return D.12540;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_byte_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12543;
  unsigned char D.12546;
  int D.12549;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (17, &vt);
      D.12543 = vt.vt;
      if (D.12543 == 17) goto <D.12544>; else goto <D.12545>;
      <D.12544>:
      D.12546 = vt.D.8229.bVal;
      if (D.12546 == 100) goto <D.12547>; else goto <D.12548>;
      <D.12547>:
      D.12549 = 0;
      return D.12549;
      <D.12548>:
      <D.12545>:
      D.12549 = 1;
      return D.12549;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_short_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12552;
  short int D.12555;
  int D.12558;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (2, &vt);
      D.12552 = vt.vt;
      if (D.12552 == 2) goto <D.12553>; else goto <D.12554>;
      <D.12553>:
      D.12555 = vt.D.8229.iVal;
      if (D.12555 == -100) goto <D.12556>; else goto <D.12557>;
      <D.12556>:
      D.12558 = 0;
      return D.12558;
      <D.12557>:
      <D.12554>:
      D.12558 = 1;
      return D.12558;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_ushort_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12561;
  short unsigned int D.12564;
  int D.12567;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (18, &vt);
      D.12561 = vt.vt;
      if (D.12561 == 18) goto <D.12562>; else goto <D.12563>;
      <D.12562>:
      D.12564 = vt.D.8229.uiVal;
      if (D.12564 == 100) goto <D.12565>; else goto <D.12566>;
      <D.12565>:
      D.12567 = 0;
      return D.12567;
      <D.12566>:
      <D.12563>:
      D.12567 = 1;
      return D.12567;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_int_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12570;
  int D.12573;
  int D.12576;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (3, &vt);
      D.12570 = vt.vt;
      if (D.12570 == 3) goto <D.12571>; else goto <D.12572>;
      <D.12571>:
      D.12573 = vt.D.8229.lVal;
      if (D.12573 == -100) goto <D.12574>; else goto <D.12575>;
      <D.12574>:
      D.12576 = 0;
      return D.12576;
      <D.12575>:
      <D.12572>:
      D.12576 = 1;
      return D.12576;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_uint_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12579;
  unsigned int D.12582;
  int D.12585;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (19, &vt);
      D.12579 = vt.vt;
      if (D.12579 == 19) goto <D.12580>; else goto <D.12581>;
      <D.12580>:
      D.12582 = vt.D.8229.ulVal;
      if (D.12582 == 100) goto <D.12583>; else goto <D.12584>;
      <D.12583>:
      D.12585 = 0;
      return D.12585;
      <D.12584>:
      <D.12581>:
      D.12585 = 1;
      return D.12585;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_long_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12588;
  long int D.12591;
  int D.12594;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (20, &vt);
      D.12588 = vt.vt;
      if (D.12588 == 20) goto <D.12589>; else goto <D.12590>;
      <D.12589>:
      D.12591 = vt.D.8229.llVal;
      if (D.12591 == -100) goto <D.12592>; else goto <D.12593>;
      <D.12592>:
      D.12594 = 0;
      return D.12594;
      <D.12593>:
      <D.12590>:
      D.12594 = 1;
      return D.12594;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_ulong_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12597;
  long unsigned int D.12600;
  int D.12603;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (21, &vt);
      D.12597 = vt.vt;
      if (D.12597 == 21) goto <D.12598>; else goto <D.12599>;
      <D.12598>:
      D.12600 = vt.D.8229.ullVal;
      if (D.12600 == 100) goto <D.12601>; else goto <D.12602>;
      <D.12601>:
      D.12603 = 0;
      return D.12603;
      <D.12602>:
      <D.12599>:
      D.12603 = 1;
      return D.12603;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_float_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12606;
  float D.12609;
  float D.12610;
  float D.12611;
  double D.12612;
  int D.12615;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (4, &vt);
      D.12606 = vt.vt;
      if (D.12606 == 4) goto <D.12607>; else goto <D.12608>;
      <D.12607>:
      D.12609 = vt.D.8229.fltVal;
      D.12610 = D.12609 - 3.1400001049041748046875e+0;
      D.12611 = ABS_EXPR <D.12610>;
      D.12612 = (double) D.12611;
      if (D.12612 < 1.00000000000000003643219731549774157916554706559963960899e-10) goto <D.12613>; else goto <D.12614>;
      <D.12613>:
      D.12615 = 0;
      return D.12615;
      <D.12614>:
      <D.12608>:
      D.12615 = 1;
      return D.12615;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_double_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12618;
  double D.12621;
  double D.12622;
  double D.12623;
  int D.12626;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (5, &vt);
      D.12618 = vt.vt;
      if (D.12618 == 5) goto <D.12619>; else goto <D.12620>;
      <D.12619>:
      D.12621 = vt.D.8229.dblVal;
      D.12622 = D.12621 - 3.140000000000000124344978758017532527446746826171875e+0;
      D.12623 = ABS_EXPR <D.12622>;
      if (D.12623 < 1.00000000000000003643219731549774157916554706559963960899e-10) goto <D.12624>; else goto <D.12625>;
      <D.12624>:
      D.12626 = 0;
      return D.12626;
      <D.12625>:
      <D.12620>:
      D.12626 = 1;
      return D.12626;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_bstr_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  gunichar2 * D.12629;
  int result.94;
  int iftmp.93;
  int D.8549;
  const char[3] * D.12633;
  unsigned char D.12634;
  int D.12635;
  unsigned char D.12636;
  int D.12637;
  _Bool D.12638;
  _Bool D.12639;
  _Bool D.12640;
  const unsigned char * D.12643;
  unsigned char D.12644;
  int D.12645;
  const unsigned char * D.12646;
  unsigned char D.12647;
  int D.12648;
  _Bool D.12649;
  _Bool D.12650;
  const unsigned char * D.12653;
  unsigned char D.12654;
  int D.12655;
  const unsigned char * D.12656;
  unsigned char D.12657;
  int D.12658;
  _Bool D.12659;
  _Bool D.12660;
  const unsigned char * D.12663;
  unsigned char D.12664;
  int D.12665;
  const unsigned char * D.12666;
  unsigned char D.12667;
  int D.12668;
  short unsigned int D.12670;
  int D.12675;
  struct VARIANT vt;
  gchar * bstr_utf8;
  gint32 result;

  try
    {
      result = 0;
      VariantInit (&vt);
      func (8, &vt);
      D.12629 = vt.D.8229.bstrVal;
      bstr_utf8 = monoeg_g_utf16_to_utf8 (D.12629, -1, 0B, 0B, 0B);
      {
        size_t __s1_len;
        size_t __s2_len;

        __s1_len = 2;
        if (__s1_len <= 3) goto <D.12631>; else goto <D.12632>;
        <D.12631>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = bstr_utf8;
          D.12633 = "PI";
          D.12634 = MEM[(const unsigned char *)D.12633];
          D.12635 = (int) D.12634;
          D.12636 = *__s2;
          D.12637 = (int) D.12636;
          __result = D.12635 - D.12637;
          {
            D.12638 = __s1_len != 0;
            D.12639 = __result == 0;
            D.12640 = D.12638 & D.12639;
            if (D.12640 != 0) goto <D.12641>; else goto <D.12642>;
            <D.12641>:
            D.12643 = &MEM[(void *)"PI" + 1B];
            D.12644 = *D.12643;
            D.12645 = (int) D.12644;
            D.12646 = __s2 + 1;
            D.12647 = *D.12646;
            D.12648 = (int) D.12647;
            __result = D.12645 - D.12648;
            D.12649 = __s1_len > 1;
            D.12639 = __result == 0;
            D.12650 = D.12649 & D.12639;
            if (D.12650 != 0) goto <D.12651>; else goto <D.12652>;
            <D.12651>:
            D.12653 = &MEM[(void *)"PI" + 2B];
            D.12654 = *D.12653;
            D.12655 = (int) D.12654;
            D.12656 = __s2 + 2;
            D.12657 = *D.12656;
            D.12658 = (int) D.12657;
            __result = D.12655 - D.12658;
            D.12659 = __s1_len > 2;
            D.12639 = __result == 0;
            D.12660 = D.12659 & D.12639;
            if (D.12660 != 0) goto <D.12661>; else goto <D.12662>;
            <D.12661>:
            D.12663 = &MEM[(void *)"PI" + 3B];
            D.12664 = *D.12663;
            D.12665 = (int) D.12664;
            D.12666 = __s2 + 3;
            D.12667 = *D.12666;
            D.12668 = (int) D.12667;
            __result = D.12665 - D.12668;
            <D.12662>:
            <D.12652>:
            <D.12642>:
          }
          D.8549 = __result;
        }
        iftmp.93 = D.8549;
        goto <D.12669>;
        <D.12632>:
        iftmp.93 = __builtin_strcmp ("PI", bstr_utf8);
        <D.12669>:
        result.94 = iftmp.93;
      }
      result = result.94;
      monoeg_g_free (bstr_utf8);
      D.12670 = vt.vt;
      if (D.12670 == 8) goto <D.12671>; else goto <D.12672>;
      <D.12671>:
      if (result == 0) goto <D.12673>; else goto <D.12674>;
      <D.12673>:
      D.12675 = 0;
      return D.12675;
      <D.12674>:
      <D.12672>:
      D.12675 = 1;
      return D.12675;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_bool_true_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12678;
  short int D.12681;
  int D.12684;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (11, &vt);
      D.12678 = vt.vt;
      if (D.12678 == 11) goto <D.12679>; else goto <D.12680>;
      <D.12679>:
      D.12681 = vt.D.8229.boolVal;
      if (D.12681 == -1) goto <D.12682>; else goto <D.12683>;
      <D.12682>:
      D.12684 = 0;
      return D.12684;
      <D.12683>:
      <D.12680>:
      D.12684 = 1;
      return D.12684;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


mono_test_marshal_variant_out_bool_false_unmanaged (int (*VarRefFunc) (int, struct VARIANT *) func)
{
  short unsigned int D.12687;
  short int D.12690;
  int D.12693;
  struct VARIANT vt;

  try
    {
      VariantInit (&vt);
      func (11, &vt);
      D.12687 = vt.vt;
      if (D.12687 == 11) goto <D.12688>; else goto <D.12689>;
      <D.12688>:
      D.12690 = vt.D.8229.boolVal;
      if (D.12690 == -1) goto <D.12691>; else goto <D.12692>;
      <D.12691>:
      D.12693 = 0;
      return D.12693;
      <D.12692>:
      <D.12689>:
      D.12693 = 1;
      return D.12693;
    }
  finally
    {
      vt = {CLOBBER};
    }
}


MonoQueryInterface (struct MonoComObject * pUnk, void * riid, void * * ppv)
{
  int D.12696;
  int D.12699;
  int D.12700;
  int D.12703;

  *ppv = 0B;
  D.12696 = memcmp (riid, &IID_IMonoUnknown, 16);
  if (D.12696 == 0) goto <D.12697>; else goto <D.12698>;
  <D.12697>:
  *ppv = pUnk;
  D.12699 = 0;
  return D.12699;
  <D.12698>:
  D.12700 = memcmp (riid, &IID_ITest, 16);
  if (D.12700 == 0) goto <D.12701>; else goto <D.12702>;
  <D.12701>:
  *ppv = pUnk;
  D.12699 = 0;
  return D.12699;
  <D.12702>:
  D.12703 = memcmp (riid, &IID_IMonoDispatch, 16);
  if (D.12703 == 0) goto <D.12704>; else goto <D.12705>;
  <D.12704>:
  *ppv = pUnk;
  D.12699 = 0;
  return D.12699;
  <D.12705>:
  D.12699 = -2147467262;
  return D.12699;
}


MonoAddRef (struct MonoComObject * pUnk)
{
  int D.12707;
  int D.12708;
  int D.12709;

  D.12708 = pUnk->m_ref;
  D.12709 = D.12708 + 1;
  pUnk->m_ref = D.12709;
  D.12707 = pUnk->m_ref;
  return D.12707;
}


MonoRelease (struct MonoComObject * pUnk)
{
  int D.12711;
  int D.12712;
  int D.12713;

  D.12712 = pUnk->m_ref;
  D.12713 = D.12712 + -1;
  pUnk->m_ref = D.12713;
  D.12711 = pUnk->m_ref;
  return D.12711;
}


SByteIn (struct MonoComObject * pUnk, char a)
{
  int D.12715;

  D.12715 = 0;
  return D.12715;
}


ByteIn (struct MonoComObject * pUnk, unsigned char a)
{
  int D.12717;

  D.12717 = 0;
  return D.12717;
}


ShortIn (struct MonoComObject * pUnk, short int a)
{
  int D.12719;

  D.12719 = 0;
  return D.12719;
}


UShortIn (struct MonoComObject * pUnk, short unsigned int a)
{
  int D.12721;

  D.12721 = 0;
  return D.12721;
}


IntIn (struct MonoComObject * pUnk, int a)
{
  int D.12723;

  D.12723 = 0;
  return D.12723;
}


UIntIn (struct MonoComObject * pUnk, unsigned int a)
{
  int D.12725;

  D.12725 = 0;
  return D.12725;
}


LongIn (struct MonoComObject * pUnk, gint64 a)
{
  int D.12727;

  D.12727 = 0;
  return D.12727;
}


ULongIn (struct MonoComObject * pUnk, guint64 a)
{
  int D.12729;

  D.12729 = 0;
  return D.12729;
}


FloatIn (struct MonoComObject * pUnk, float a)
{
  int D.12731;

  D.12731 = 0;
  return D.12731;
}


DoubleIn (struct MonoComObject * pUnk, double a)
{
  int D.12733;

  D.12733 = 0;
  return D.12733;
}


ITestIn (struct MonoComObject * pUnk, struct MonoComObject * pUnk2)
{
  int D.12735;

  D.12735 = 0;
  return D.12735;
}


ITestOut (struct MonoComObject * pUnk, struct MonoComObject * * ppUnk)
{
  int D.12737;

  D.12737 = 0;
  return D.12737;
}


get_ITest (struct MonoComObject * pUnk, struct MonoComObject * * ppUnk)
{
  int D.12739;

  create_com_object (ppUnk);
  D.12739 = 0;
  return D.12739;
}


create_com_object (struct MonoComObject * * pOut)
{
  void * D.12741;
  struct MonoComObject * D.12742;
  void * D.12743;
  struct MonoIUnknown * D.12744;

  D.12741 = marshal_alloc0 (16);
  *pOut = D.12741;
  D.12742 = *pOut;
  D.12743 = marshal_alloc0 (128);
  D.12742->vtbl = D.12743;
  D.12742 = *pOut;
  D.12742->m_ref = 1;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->QueryInterface = MonoQueryInterface;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->AddRef = MonoAddRef;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->Release = MonoRelease;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->SByteIn = SByteIn;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->ByteIn = ByteIn;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->ShortIn = ShortIn;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->UShortIn = UShortIn;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->IntIn = IntIn;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->UIntIn = UIntIn;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->LongIn = LongIn;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->ULongIn = ULongIn;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->FloatIn = FloatIn;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->DoubleIn = DoubleIn;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->ITestIn = ITestIn;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->ITestOut = ITestOut;
  D.12742 = *pOut;
  D.12744 = D.12742->vtbl;
  D.12744->get_ITest = get_ITest;
}


mono_test_marshal_com_object_create (struct MonoComObject * * pUnk)
{
  struct MonoComObject * same_object.95;
  struct MonoComObject * same_object.96;
  int D.12749;

  create_com_object (pUnk);
  same_object.95 = same_object;
  if (same_object.95 == 0B) goto <D.12746>; else goto <D.12747>;
  <D.12746>:
  same_object.96 = *pUnk;
  same_object = same_object.96;
  <D.12747>:
  D.12749 = 0;
  return D.12749;
}


mono_test_marshal_com_object_same (struct MonoComObject * * pUnk)
{
  struct MonoComObject * same_object.97;
  int D.12752;

  same_object.97 = same_object;
  *pUnk = same_object.97;
  D.12752 = 0;
  return D.12752;
}


mono_test_marshal_com_object_destroy (struct MonoComObject * pUnk)
{
  int D.12754;
  int D.12755;
  struct MonoIUnknown * D.12756;
  int D.12757;
  int ref;

  D.12754 = pUnk->m_ref;
  D.12755 = D.12754 + -1;
  pUnk->m_ref = D.12755;
  ref = pUnk->m_ref;
  D.12756 = pUnk->vtbl;
  monoeg_g_free (D.12756);
  monoeg_g_free (pUnk);
  D.12757 = ref;
  return D.12757;
}


mono_test_marshal_com_object_ref_count (struct MonoComObject * pUnk)
{
  int D.12759;

  D.12759 = pUnk->m_ref;
  return D.12759;
}


mono_test_marshal_ccw_itest (struct MonoComObject * pUnk)
{
  int D.12763;
  struct MonoIUnknown * D.12764;
  int (*<T1dcf>) (struct MonoComObject *, char) D.12765;
  int (*<T1dd3>) (struct MonoComObject *, unsigned char) D.12768;
  int (*<T1dd7>) (struct MonoComObject *, short int) D.12771;
  int (*<T1ddb>) (struct MonoComObject *, short unsigned int) D.12774;
  int (*<T1ddf>) (struct MonoComObject *, int) D.12777;
  int (*<T1de3>) (struct MonoComObject *, unsigned int) D.12780;
  int (*<T1de7>) (struct MonoComObject *, gint64) D.12783;
  int (*<T1deb>) (struct MonoComObject *, guint64) D.12786;
  int (*<T1def>) (struct MonoComObject *, float) D.12789;
  int (*<T1df3>) (struct MonoComObject *, double) D.12792;
  int (*<T1df7>) (struct MonoComObject *, struct MonoComObject *) D.12795;
  int (*<T1dcb>) (struct MonoComObject *, struct MonoComObject * *) D.12798;
  int hr;
  struct MonoComObject * pTest;

  try
    {
      hr = 0;
      if (pUnk == 0B) goto <D.12761>; else goto <D.12762>;
      <D.12761>:
      D.12763 = 1;
      return D.12763;
      <D.12762>:
      D.12764 = pUnk->vtbl;
      D.12765 = D.12764->SByteIn;
      hr = D.12765 (pUnk, -100);
      if (hr != 0) goto <D.12766>; else goto <D.12767>;
      <D.12766>:
      D.12763 = 2;
      return D.12763;
      <D.12767>:
      D.12764 = pUnk->vtbl;
      D.12768 = D.12764->ByteIn;
      hr = D.12768 (pUnk, 100);
      if (hr != 0) goto <D.12769>; else goto <D.12770>;
      <D.12769>:
      D.12763 = 3;
      return D.12763;
      <D.12770>:
      D.12764 = pUnk->vtbl;
      D.12771 = D.12764->ShortIn;
      hr = D.12771 (pUnk, -100);
      if (hr != 0) goto <D.12772>; else goto <D.12773>;
      <D.12772>:
      D.12763 = 4;
      return D.12763;
      <D.12773>:
      D.12764 = pUnk->vtbl;
      D.12774 = D.12764->UShortIn;
      hr = D.12774 (pUnk, 100);
      if (hr != 0) goto <D.12775>; else goto <D.12776>;
      <D.12775>:
      D.12763 = 5;
      return D.12763;
      <D.12776>:
      D.12764 = pUnk->vtbl;
      D.12777 = D.12764->IntIn;
      hr = D.12777 (pUnk, -100);
      if (hr != 0) goto <D.12778>; else goto <D.12779>;
      <D.12778>:
      D.12763 = 6;
      return D.12763;
      <D.12779>:
      D.12764 = pUnk->vtbl;
      D.12780 = D.12764->UIntIn;
      hr = D.12780 (pUnk, 100);
      if (hr != 0) goto <D.12781>; else goto <D.12782>;
      <D.12781>:
      D.12763 = 7;
      return D.12763;
      <D.12782>:
      D.12764 = pUnk->vtbl;
      D.12783 = D.12764->LongIn;
      hr = D.12783 (pUnk, -100);
      if (hr != 0) goto <D.12784>; else goto <D.12785>;
      <D.12784>:
      D.12763 = 8;
      return D.12763;
      <D.12785>:
      D.12764 = pUnk->vtbl;
      D.12786 = D.12764->ULongIn;
      hr = D.12786 (pUnk, 100);
      if (hr != 0) goto <D.12787>; else goto <D.12788>;
      <D.12787>:
      D.12763 = 9;
      return D.12763;
      <D.12788>:
      D.12764 = pUnk->vtbl;
      D.12789 = D.12764->FloatIn;
      hr = D.12789 (pUnk, 3.1400001049041748046875e+0);
      if (hr != 0) goto <D.12790>; else goto <D.12791>;
      <D.12790>:
      D.12763 = 10;
      return D.12763;
      <D.12791>:
      D.12764 = pUnk->vtbl;
      D.12792 = D.12764->DoubleIn;
      hr = D.12792 (pUnk, 3.140000000000000124344978758017532527446746826171875e+0);
      if (hr != 0) goto <D.12793>; else goto <D.12794>;
      <D.12793>:
      D.12763 = 11;
      return D.12763;
      <D.12794>:
      D.12764 = pUnk->vtbl;
      D.12795 = D.12764->ITestIn;
      hr = D.12795 (pUnk, pUnk);
      if (hr != 0) goto <D.12796>; else goto <D.12797>;
      <D.12796>:
      D.12763 = 12;
      return D.12763;
      <D.12797>:
      D.12764 = pUnk->vtbl;
      D.12798 = D.12764->ITestOut;
      hr = D.12798 (pUnk, &pTest);
      if (hr != 0) goto <D.12799>; else goto <D.12800>;
      <D.12799>:
      D.12763 = 13;
      return D.12763;
      <D.12800>:
      D.12763 = 0;
      return D.12763;
    }
  finally
    {
      pTest = {CLOBBER};
    }
}


mono_test_marshal_lookup_symbol (const char * symbol_name)
{
  void * D.12803;

  D.12803 = lookup_mono_symbol (symbol_name);
  return D.12803;
}


lookup_mono_symbol (const char * symbol_name)
{
  struct GModule * D.12805;
  int D.12806;
  void * D.12809;
  void * symbol;

  try
    {
      D.12805 = monoeg_g_module_open (0B, 1);
      D.12806 = monoeg_g_module_symbol (D.12805, symbol_name, &symbol);
      if (D.12806 != 0) goto <D.12807>; else goto <D.12808>;
      <D.12807>:
      D.12809 = symbol;
      return D.12809;
      <D.12808>:
      D.12809 = 0B;
      return D.12809;
    }
  finally
    {
      symbol = {CLOBBER};
    }
}


test_method_thunk (int test_id, void * test_method_handle, void * create_object_method_handle)
{
  void * D.12812;
  void * D.12813;
  void * D.12814;
  void * D.12815;
  int D.12818;
  void * D.12821;
  int D.12824;
  void * D.12827;
  void * D.12830;
  int D.12833;
  void * ex.98;
  long int D.12843;
  unsigned char a1.99;
  short int a2.100;
  int a3.101;
  long int a4.102;
  float a5.103;
  double D.12859;
  double D.12860;
  double D.12861;
  _Bool D.12862;
  _Bool D.12863;
  double a6.104;
  double D.12866;
  double D.12867;
  _Bool D.12868;
  _Bool D.12869;
  int D.8810;
  int iftmp.105;
  int D.8809;
  void * a7.106;
  const char[6] * D.12875;
  unsigned char D.12876;
  int D.12877;
  unsigned char D.12878;
  int D.12879;
  _Bool D.12880;
  _Bool D.12881;
  _Bool D.12882;
  const unsigned char * D.12885;
  unsigned char D.12886;
  int D.12887;
  const unsigned char * D.12888;
  unsigned char D.12889;
  int D.12890;
  _Bool D.12891;
  _Bool D.12892;
  const unsigned char * D.12895;
  unsigned char D.12896;
  int D.12897;
  const unsigned char * D.12898;
  unsigned char D.12899;
  int D.12900;
  _Bool D.12901;
  _Bool D.12902;
  const unsigned char * D.12905;
  unsigned char D.12906;
  int D.12907;
  const unsigned char * D.12908;
  unsigned char D.12909;
  int D.12910;
  char * D.12912;
  void * obj1.107;
  int D.12934;
  double D.12936;
  int D.12945;
  double D.12948;
  double D.12949;
  int D.12956;
  double D.12959;
  double D.12960;
  int D.12971;
  double D.12974;
  void * (*<T1e40>) (void *) mono_method_get_unmanaged_thunk;
  void * (*<T1e3a>) (const char *) mono_string_new_wrapper;
  char * (*<T1e4d>) (void *) mono_string_to_utf8;
  void * (*<T1e40>) (void *) mono_object_unbox;
  void * test_method;
  void * ex;
  void * (*<T1e5b>) (void * *) CreateObject;

  try
    {
      D.12812 = lookup_mono_symbol ("mono_method_get_unmanaged_thunk");
      mono_method_get_unmanaged_thunk = (void * (*<T1e40>) (void *)) D.12812;
      D.12813 = lookup_mono_symbol ("mono_string_new_wrapper");
      mono_string_new_wrapper = (void * (*<T1e3a>) (const char *)) D.12813;
      D.12814 = lookup_mono_symbol ("mono_string_to_utf8");
      mono_string_to_utf8 = (char * (*<T1e4d>) (void *)) D.12814;
      D.12815 = lookup_mono_symbol ("mono_object_unbox");
      mono_object_unbox = (void * (*<T1e40>) (void *)) D.12815;
      ex = 0B;
      if (mono_method_get_unmanaged_thunk == 0B) goto <D.12816>; else goto <D.12817>;
      <D.12816>:
      D.12818 = 1;
      return D.12818;
      <D.12817>:
      test_method = mono_method_get_unmanaged_thunk (test_method_handle);
      if (test_method == 0B) goto <D.12819>; else goto <D.12820>;
      <D.12819>:
      D.12818 = 2;
      return D.12818;
      <D.12820>:
      D.12821 = mono_method_get_unmanaged_thunk (create_object_method_handle);
      CreateObject = (void * (*<T1e5b>) (void * *)) D.12821;
      if (CreateObject == 0B) goto <D.12822>; else goto <D.12823>;
      <D.12822>:
      D.12818 = 3;
      return D.12818;
      <D.12823>:
      switch (test_id) <default: <D.8858>, case 0: <D.8733>, case 1: <D.8737>, case 2: <D.8740>, case 3: <D.8745>, case 4: <D.8752>, case 5: <D.8760>, case 6: <D.8768>, case 7: <D.8782>, case 8: <D.8785>, case 9: <D.8811>, case 10: <D.8828>, case 100: <D.8834>, case 101: <D.8841>, case 102: <D.8847>, case 103: <D.8852>>
      <D.8733>:
      {
        void (*<T1e5f>) (void * *) F;

        F = (void (*<T1e5f>) (void * *)) test_method;
        F (&ex);
        goto <D.8736>;
      }
      <D.8737>:
      {
        int (*<T1e62>) (void * *) F;

        F = (int (*<T1e62>) (void * *)) test_method;
        D.12824 = F (&ex);
        if (D.12824 != 42) goto <D.12825>; else goto <D.12826>;
        <D.12825>:
        D.12818 = 4;
        return D.12818;
        <D.12826>:
        goto <D.8736>;
      }
      <D.8740>:
      {
        void * (*<T1e66>) (void *, void * *) F;
        void * str;

        F = (void * (*<T1e66>) (void *, void * *)) test_method;
        str = mono_string_new_wrapper ("foo");
        D.12827 = F (str, &ex);
        if (D.12827 != str) goto <D.12828>; else goto <D.12829>;
        <D.12828>:
        D.12818 = 4;
        return D.12818;
        <D.12829>:
        goto <D.8736>;
      }
      <D.8745>:
      {
        void * (*<T1e6c>) (void *, void *, void * *) F;
        void * obj;
        void * str;

        F = (void * (*<T1e6c>) (void *, void *, void * *)) test_method;
        obj = CreateObject (&ex);
        str = mono_string_new_wrapper ("bar");
        D.12830 = F (obj, str, &ex);
        if (D.12830 != str) goto <D.12831>; else goto <D.12832>;
        <D.12831>:
        D.12818 = 4;
        return D.12818;
        <D.12832>:
        goto <D.8736>;
      }
      <D.8752>:
      {
        int (*<T1e72>) (void *, void *, int, void * *) F;
        void * obj;
        void * str;

        F = (int (*<T1e72>) (void *, void *, int, void * *)) test_method;
        obj = CreateObject (&ex);
        str = mono_string_new_wrapper ("bar");
        D.12833 = F (obj, str, 42, &ex);
        if (D.12833 != 42) goto <D.12834>; else goto <D.12835>;
        <D.12834>:
        D.12818 = 4;
        return D.12818;
        <D.12835>:
        goto <D.8736>;
      }
      <D.8760>:
      {
        int (*<T1e72>) (void *, void *, int, void * *) F;
        void * obj;
        void * str;

        F = (int (*<T1e72>) (void *, void *, int, void * *)) test_method;
        obj = CreateObject (&ex);
        str = mono_string_new_wrapper ("bar");
        F (obj, str, 42, &ex);
        ex.98 = ex;
        if (ex.98 == 0B) goto <D.12837>; else goto <D.12838>;
        <D.12837>:
        D.12818 = 4;
        return D.12818;
        <D.12838>:
        goto <D.8736>;
      }
      <D.8768>:
      {
        int (*<T1e7c>) (void *, guint8, gint16, gint32, gint64, float, double, void *, void * *) F;
        void * obj;
        void * str;
        int res;

        str = mono_string_new_wrapper ("Test6");
        F = (int (*<T1e7c>) (void *, guint8, gint16, gint32, gint64, float, double, void *, void * *)) test_method;
        obj = CreateObject (&ex);
        res = F (obj, 254, 32700, -245378, 6789600, 3.141499996185302734375e+0, 3.141500000000000181188397618825547397136688232421875e+0, str, &ex);
        ex.98 = ex;
        if (ex.98 != 0B) goto <D.12839>; else goto <D.12840>;
        <D.12839>:
        D.12818 = 4;
        return D.12818;
        <D.12840>:
        if (res == 0) goto <D.12841>; else goto <D.12842>;
        <D.12841>:
        D.12818 = 5;
        return D.12818;
        <D.12842>:
        goto <D.8736>;
      }
      <D.8782>:
      {
        gint64 (*<T1e82>) (void * *) F;

        F = (gint64 (*<T1e82>) (void * *)) test_method;
        D.12843 = F (&ex);
        if (D.12843 != 9223372036854775807) goto <D.12844>; else goto <D.12845>;
        <D.12844>:
        D.12818 = 4;
        return D.12818;
        <D.12845>:
        goto <D.8736>;
      }
      <D.8785>:
      {
        void (*<T1e86>) (guint8 *, gint16 *, gint32 *, gint64 *, float *, double *, void * *, void * *) F;
        guint8 a1;
        gint16 a2;
        gint32 a3;
        gint64 a4;
        float a5;
        double a6;
        void * a7;

        try
          {
            F = (void (*<T1e86>) (guint8 *, gint16 *, gint32 *, gint64 *, float *, double *, void * *, void * *)) test_method;
            F (&a1, &a2, &a3, &a4, &a5, &a6, &a7, &ex);
            ex.98 = ex;
            if (ex.98 != 0B) goto <D.12846>; else goto <D.12847>;
            <D.12846>:
            D.12818 = 4;
            return D.12818;
            <D.12847>:
            a1.99 = a1;
            if (a1.99 != 254) goto <D.12848>; else goto <D.12851>;
            <D.12851>:
            a2.100 = a2;
            if (a2.100 != 32700) goto <D.12848>; else goto <D.12853>;
            <D.12853>:
            a3.101 = a3;
            if (a3.101 != -245378) goto <D.12848>; else goto <D.12855>;
            <D.12855>:
            a4.102 = a4;
            if (a4.102 != 6789600) goto <D.12848>; else goto <D.12857>;
            <D.12857>:
            a5.103 = a5;
            D.12859 = (double) a5.103;
            D.12860 = D.12859 - 3.141500000000000181188397618825547397136688232421875e+0;
            D.12861 = ABS_EXPR <D.12860>;
            D.12862 = D.12861 < 1.00000000000000002081668171172168513294309377670288085938e-3;
            D.12863 = ~D.12862;
            if (D.12863 != 0) goto <D.12848>; else goto <D.12864>;
            <D.12864>:
            a6.104 = a6;
            D.12866 = a6.104 - 3.141500000000000181188397618825547397136688232421875e+0;
            D.12867 = ABS_EXPR <D.12866>;
            D.12868 = D.12867 < 1.00000000000000002081668171172168513294309377670288085938e-3;
            D.12869 = ~D.12868;
            if (D.12869 != 0) goto <D.12848>; else goto <D.12870>;
            <D.12870>:
            {
              size_t __s1_len;
              size_t __s2_len;

              __s2_len = 5;
              if (__s2_len <= 3) goto <D.12872>; else goto <D.12873>;
              <D.12872>:
              {
                const unsigned char * __s2;
                int __result;

                a7.106 = a7;
                __s2 = mono_string_to_utf8 (a7.106);
                D.12875 = "Test8";
                D.12876 = MEM[(const unsigned char *)D.12875];
                D.12877 = (int) D.12876;
                D.12878 = *__s2;
                D.12879 = (int) D.12878;
                __result = D.12877 - D.12879;
                {
                  D.12880 = __s2_len != 0;
                  D.12881 = __result == 0;
                  D.12882 = D.12880 & D.12881;
                  if (D.12882 != 0) goto <D.12883>; else goto <D.12884>;
                  <D.12883>:
                  D.12885 = &MEM[(void *)"Test8" + 1B];
                  D.12886 = *D.12885;
                  D.12887 = (int) D.12886;
                  D.12888 = __s2 + 1;
                  D.12889 = *D.12888;
                  D.12890 = (int) D.12889;
                  __result = D.12887 - D.12890;
                  D.12891 = __s2_len > 1;
                  D.12881 = __result == 0;
                  D.12892 = D.12891 & D.12881;
                  if (D.12892 != 0) goto <D.12893>; else goto <D.12894>;
                  <D.12893>:
                  D.12895 = &MEM[(void *)"Test8" + 2B];
                  D.12896 = *D.12895;
                  D.12897 = (int) D.12896;
                  D.12898 = __s2 + 2;
                  D.12899 = *D.12898;
                  D.12900 = (int) D.12899;
                  __result = D.12897 - D.12900;
                  D.12901 = __s2_len > 2;
                  D.12881 = __result == 0;
                  D.12902 = D.12901 & D.12881;
                  if (D.12902 != 0) goto <D.12903>; else goto <D.12904>;
                  <D.12903>:
                  D.12905 = &MEM[(void *)"Test8" + 3B];
                  D.12906 = *D.12905;
                  D.12907 = (int) D.12906;
                  D.12908 = __s2 + 3;
                  D.12909 = *D.12908;
                  D.12910 = (int) D.12909;
                  __result = D.12907 - D.12910;
                  <D.12904>:
                  <D.12894>:
                  <D.12884>:
                }
                D.8809 = __result;
              }
              iftmp.105 = -D.8809;
              goto <D.12911>;
              <D.12873>:
              a7.106 = a7;
              D.12912 = mono_string_to_utf8 (a7.106);
              iftmp.105 = __builtin_strcmp (D.12912, "Test8");
              <D.12911>:
              D.8810 = iftmp.105;
            }
            if (D.8810 != 0) goto <D.12848>; else goto <D.12849>;
            <D.12848>:
            D.12818 = 5;
            return D.12818;
            <D.12849>:
            goto <D.8736>;
          }
        finally
          {
            a1 = {CLOBBER};
            a2 = {CLOBBER};
            a3 = {CLOBBER};
            a4 = {CLOBBER};
            a5 = {CLOBBER};
            a6 = {CLOBBER};
            a7 = {CLOBBER};
          }
      }
      <D.8811>:
      {
        void (*<T1e86>) (guint8 *, gint16 *, gint32 *, gint64 *, float *, double *, void * *, void * *) F;
        guint8 a1;
        gint16 a2;
        gint32 a3;
        gint64 a4;
        float a5;
        double a6;
        void * a7;

        try
          {
            F = (void (*<T1e86>) (guint8 *, gint16 *, gint32 *, gint64 *, float *, double *, void * *, void * *)) test_method;
            F (&a1, &a2, &a3, &a4, &a5, &a6, &a7, &ex);
            ex.98 = ex;
            if (ex.98 == 0B) goto <D.12913>; else goto <D.12914>;
            <D.12913>:
            D.12818 = 4;
            return D.12818;
            <D.12914>:
            goto <D.8736>;
          }
        finally
          {
            a1 = {CLOBBER};
            a2 = {CLOBBER};
            a3 = {CLOBBER};
            a4 = {CLOBBER};
            a5 = {CLOBBER};
            a6 = {CLOBBER};
            a7 = {CLOBBER};
          }
      }
      <D.8828>:
      {
        void (*<T1eb4>) (void * *, void * *) F;
        void * obj1;
        void * obj2;

        try
          {
            obj2 = CreateObject (&ex);
            obj1 = obj2;
            ex.98 = ex;
            if (ex.98 != 0B) goto <D.12915>; else goto <D.12916>;
            <D.12915>:
            D.12818 = 4;
            return D.12818;
            <D.12916>:
            F = (void (*<T1eb4>) (void * *, void * *)) test_method;
            F (&obj1, &ex);
            ex.98 = ex;
            if (ex.98 != 0B) goto <D.12917>; else goto <D.12918>;
            <D.12917>:
            D.12818 = 5;
            return D.12818;
            <D.12918>:
            obj1.107 = obj1;
            if (obj1.107 == obj2) goto <D.12920>; else goto <D.12921>;
            <D.12920>:
            D.12818 = 6;
            return D.12818;
            <D.12921>:
            goto <D.8736>;
          }
        finally
          {
            obj1 = {CLOBBER};
          }
      }
      <D.8834>:
      {
        int (*<T1eb8>) (void * *, void * *) F;
        void * obj;
        struct TestStruct * a1;
        int res;

        obj = CreateObject (&ex);
        ex.98 = ex;
        if (ex.98 != 0B) goto <D.12922>; else goto <D.12923>;
        <D.12922>:
        D.12818 = 4;
        return D.12818;
        <D.12923>:
        if (obj == 0B) goto <D.12924>; else goto <D.12925>;
        <D.12924>:
        D.12818 = 5;
        return D.12818;
        <D.12925>:
        a1 = mono_object_unbox (obj);
        if (a1 == 0B) goto <D.12926>; else goto <D.12927>;
        <D.12926>:
        D.12818 = 6;
        return D.12818;
        <D.12927>:
        a1->A = 42;
        a1->B = 3.141500000000000181188397618825547397136688232421875e+0;
        F = (int (*<T1eb8>) (void * *, void * *)) test_method;
        res = F (obj, &ex);
        ex.98 = ex;
        if (ex.98 != 0B) goto <D.12928>; else goto <D.12929>;
        <D.12928>:
        D.12818 = 7;
        return D.12818;
        <D.12929>:
        if (res == 0) goto <D.12930>; else goto <D.12931>;
        <D.12930>:
        D.12818 = 8;
        return D.12818;
        <D.12931>:
        D.12934 = a1->A;
        if (D.12934 != 42) goto <D.12932>; else goto <D.12935>;
        <D.12935>:
        D.12936 = a1->B;
        if (D.12936 != 3.141500000000000181188397618825547397136688232421875e+0) goto <D.12932>; else goto <D.12933>;
        <D.12932>:
        D.12818 = 9;
        return D.12818;
        <D.12933>:
        goto <D.8736>;
      }
      <D.8841>:
      {
        void (*<T1ebe>) (void *, void * *) F;
        struct TestStruct * a1;
        void * obj;

        obj = CreateObject (&ex);
        ex.98 = ex;
        if (ex.98 != 0B) goto <D.12937>; else goto <D.12938>;
        <D.12937>:
        D.12818 = 4;
        return D.12818;
        <D.12938>:
        if (obj == 0B) goto <D.12939>; else goto <D.12940>;
        <D.12939>:
        D.12818 = 5;
        return D.12818;
        <D.12940>:
        a1 = mono_object_unbox (obj);
        if (a1 == 0B) goto <D.12941>; else goto <D.12942>;
        <D.12941>:
        D.12818 = 6;
        return D.12818;
        <D.12942>:
        F = (void (*<T1ebe>) (void *, void * *)) test_method;
        F (obj, &ex);
        ex.98 = ex;
        if (ex.98 != 0B) goto <D.12943>; else goto <D.12944>;
        <D.12943>:
        D.12818 = 7;
        return D.12818;
        <D.12944>:
        D.12945 = a1->A;
        if (D.12945 != 42) goto <D.12946>; else goto <D.12947>;
        <D.12946>:
        D.12818 = 8;
        return D.12818;
        <D.12947>:
        D.12948 = a1->B;
        D.12949 = D.12948 - 3.141500000000000181188397618825547397136688232421875e+0;
        if (D.12949 != 0.0) goto <D.12950>; else goto <D.12951>;
        <D.12950>:
        D.12818 = 9;
        return D.12818;
        <D.12951>:
        goto <D.8736>;
      }
      <D.8847>:
      {
        void * (*<T1e5b>) (void * *) F;
        struct TestStruct * a1;
        void * obj;

        F = (void * (*<T1e5b>) (void * *)) test_method;
        obj = F (&ex);
        ex.98 = ex;
        if (ex.98 != 0B) goto <D.12952>; else goto <D.12953>;
        <D.12952>:
        D.12818 = 4;
        return D.12818;
        <D.12953>:
        if (obj == 0B) goto <D.12954>; else goto <D.12955>;
        <D.12954>:
        D.12818 = 5;
        return D.12818;
        <D.12955>:
        a1 = mono_object_unbox (obj);
        D.12956 = a1->A;
        if (D.12956 != 42) goto <D.12957>; else goto <D.12958>;
        <D.12957>:
        D.12818 = 5;
        return D.12818;
        <D.12958>:
        D.12959 = a1->B;
        D.12960 = D.12959 - 3.141500000000000181188397618825547397136688232421875e+0;
        if (D.12960 != 0.0) goto <D.12961>; else goto <D.12962>;
        <D.12961>:
        D.12818 = 6;
        return D.12818;
        <D.12962>:
        goto <D.8736>;
      }
      <D.8852>:
      {
        void (*<T1ebe>) (void *, void * *) F;
        struct TestStruct * a1;
        void * obj;

        obj = CreateObject (&ex);
        ex.98 = ex;
        if (ex.98 != 0B) goto <D.12963>; else goto <D.12964>;
        <D.12963>:
        D.12818 = 4;
        return D.12818;
        <D.12964>:
        if (obj == 0B) goto <D.12965>; else goto <D.12966>;
        <D.12965>:
        D.12818 = 5;
        return D.12818;
        <D.12966>:
        a1 = mono_object_unbox (obj);
        if (a1 == 0B) goto <D.12967>; else goto <D.12968>;
        <D.12967>:
        D.12818 = 6;
        return D.12818;
        <D.12968>:
        a1->A = 42;
        a1->B = 3.141500000000000181188397618825547397136688232421875e+0;
        F = (void (*<T1ebe>) (void *, void * *)) test_method;
        F (obj, &ex);
        ex.98 = ex;
        if (ex.98 != 0B) goto <D.12969>; else goto <D.12970>;
        <D.12969>:
        D.12818 = 4;
        return D.12818;
        <D.12970>:
        D.12971 = a1->A;
        if (D.12971 != 1) goto <D.12972>; else goto <D.12973>;
        <D.12972>:
        D.12818 = 5;
        return D.12818;
        <D.12973>:
        D.12974 = a1->B;
        if (D.12974 != 1.7e+1) goto <D.12975>; else goto <D.12976>;
        <D.12975>:
        D.12818 = 6;
        return D.12818;
        <D.12976>:
        goto <D.8736>;
      }
      <D.8858>:
      D.12818 = 9;
      return D.12818;
      <D.8736>:
      D.12818 = 0;
      return D.12818;
    }
  finally
    {
      ex = {CLOBBER};
    }
}


mono_test_Winx64_struct1_in (struct winx64_struct1 var)
{
  char D.12985;
  int D.12988;

  D.12985 = var.a;
  if (D.12985 != 123) goto <D.12986>; else goto <D.12987>;
  <D.12986>:
  D.12988 = 1;
  return D.12988;
  <D.12987>:
  D.12988 = 0;
  return D.12988;
}


mono_test_Winx64_struct2_in (struct winx64_struct2 var)
{
  char D.12990;
  int D.12993;
  char D.12994;

  D.12990 = var.a;
  if (D.12990 != 4) goto <D.12991>; else goto <D.12992>;
  <D.12991>:
  D.12993 = 1;
  return D.12993;
  <D.12992>:
  D.12994 = var.b;
  if (D.12994 != 5) goto <D.12995>; else goto <D.12996>;
  <D.12995>:
  D.12993 = 2;
  return D.12993;
  <D.12996>:
  D.12993 = 0;
  return D.12993;
}


mono_test_Winx64_struct3_in (struct winx64_struct3 var)
{
  char D.12998;
  int D.13001;
  char D.13002;
  short int D.13005;

  D.12998 = var.a;
  if (D.12998 != 4) goto <D.12999>; else goto <D.13000>;
  <D.12999>:
  D.13001 = 1;
  return D.13001;
  <D.13000>:
  D.13002 = var.b;
  if (D.13002 != 5) goto <D.13003>; else goto <D.13004>;
  <D.13003>:
  D.13001 = 2;
  return D.13001;
  <D.13004>:
  D.13005 = var.c;
  if (D.13005 != 4660) goto <D.13006>; else goto <D.13007>;
  <D.13006>:
  D.13001 = 3;
  return D.13001;
  <D.13007>:
  D.13001 = 0;
  return D.13001;
}


mono_test_Winx64_struct4_in (struct winx64_struct4 var)
{
  char D.13009;
  int D.13012;
  char D.13013;
  short int D.13016;
  unsigned int D.13019;

  D.13009 = var.a;
  if (D.13009 != 4) goto <D.13010>; else goto <D.13011>;
  <D.13010>:
  D.13012 = 1;
  return D.13012;
  <D.13011>:
  D.13013 = var.b;
  if (D.13013 != 5) goto <D.13014>; else goto <D.13015>;
  <D.13014>:
  D.13012 = 2;
  return D.13012;
  <D.13015>:
  D.13016 = var.c;
  if (D.13016 != 4660) goto <D.13017>; else goto <D.13018>;
  <D.13017>:
  D.13012 = 3;
  return D.13012;
  <D.13018>:
  D.13019 = var.d;
  if (D.13019 != 2271560481) goto <D.13020>; else goto <D.13021>;
  <D.13020>:
  D.13012 = 4;
  return D.13012;
  <D.13021>:
  D.13012 = 0;
  return D.13012;
}


mono_test_Winx64_struct5_in (struct winx64_struct5 var)
{
  char D.13023;
  int D.13026;
  char D.13027;
  char D.13030;

  D.13023 = var.a;
  if (D.13023 != 4) goto <D.13024>; else goto <D.13025>;
  <D.13024>:
  D.13026 = 1;
  return D.13026;
  <D.13025>:
  D.13027 = var.b;
  if (D.13027 != 5) goto <D.13028>; else goto <D.13029>;
  <D.13028>:
  D.13026 = 2;
  return D.13026;
  <D.13029>:
  D.13030 = var.c;
  if (D.13030 != 6) goto <D.13031>; else goto <D.13032>;
  <D.13031>:
  D.13026 = 3;
  return D.13026;
  <D.13032>:
  D.13026 = 0;
  return D.13026;
}


mono_test_Winx64_struct6_in (struct winx64_struct6 var)
{
  char D.13034;
  int D.13037;
  short int D.13038;
  char D.13041;

  D.13034 = var.a.a;
  if (D.13034 != 4) goto <D.13035>; else goto <D.13036>;
  <D.13035>:
  D.13037 = 1;
  return D.13037;
  <D.13036>:
  D.13038 = var.b;
  if (D.13038 != 5) goto <D.13039>; else goto <D.13040>;
  <D.13039>:
  D.13037 = 2;
  return D.13037;
  <D.13040>:
  D.13041 = var.c;
  if (D.13041 != 6) goto <D.13042>; else goto <D.13043>;
  <D.13042>:
  D.13037 = 3;
  return D.13037;
  <D.13043>:
  D.13037 = 0;
  return D.13037;
}


mono_test_Winx64_structs_in1 (struct winx64_struct1 var1, struct winx64_struct2 var2, struct winx64_struct3 var3, struct winx64_struct4 var4)
{
  char D.13045;
  int D.13048;
  char D.13049;
  char D.13052;
  char D.13055;
  char D.13058;
  short int D.13061;
  char D.13064;
  char D.13067;
  short int D.13070;
  unsigned int D.13073;

  D.13045 = var1.a;
  if (D.13045 != 123) goto <D.13046>; else goto <D.13047>;
  <D.13046>:
  D.13048 = 1;
  return D.13048;
  <D.13047>:
  D.13049 = var2.a;
  if (D.13049 != 4) goto <D.13050>; else goto <D.13051>;
  <D.13050>:
  D.13048 = 2;
  return D.13048;
  <D.13051>:
  D.13052 = var2.b;
  if (D.13052 != 5) goto <D.13053>; else goto <D.13054>;
  <D.13053>:
  D.13048 = 3;
  return D.13048;
  <D.13054>:
  D.13055 = var3.a;
  if (D.13055 != 4) goto <D.13056>; else goto <D.13057>;
  <D.13056>:
  D.13048 = 4;
  return D.13048;
  <D.13057>:
  D.13058 = var3.b;
  if (D.13058 != 5) goto <D.13059>; else goto <D.13060>;
  <D.13059>:
  D.13048 = 2;
  return D.13048;
  <D.13060>:
  D.13061 = var3.c;
  if (D.13061 != 4660) goto <D.13062>; else goto <D.13063>;
  <D.13062>:
  D.13048 = 5;
  return D.13048;
  <D.13063>:
  D.13064 = var4.a;
  if (D.13064 != 4) goto <D.13065>; else goto <D.13066>;
  <D.13065>:
  D.13048 = 6;
  return D.13048;
  <D.13066>:
  D.13067 = var4.b;
  if (D.13067 != 5) goto <D.13068>; else goto <D.13069>;
  <D.13068>:
  D.13048 = 7;
  return D.13048;
  <D.13069>:
  D.13070 = var4.c;
  if (D.13070 != 4660) goto <D.13071>; else goto <D.13072>;
  <D.13071>:
  D.13048 = 8;
  return D.13048;
  <D.13072>:
  D.13073 = var4.d;
  if (D.13073 != 2271560481) goto <D.13074>; else goto <D.13075>;
  <D.13074>:
  D.13048 = 9;
  return D.13048;
  <D.13075>:
  D.13048 = 0;
  return D.13048;
}


mono_test_Winx64_structs_in2 (struct winx64_struct1 var1, struct winx64_struct1 var2, struct winx64_struct1 var3, struct winx64_struct1 var4, struct winx64_struct1 var5)
{
  char D.13077;
  int D.13080;
  char D.13081;
  char D.13084;
  char D.13087;
  char D.13090;

  D.13077 = var1.a;
  if (D.13077 != 1) goto <D.13078>; else goto <D.13079>;
  <D.13078>:
  D.13080 = 1;
  return D.13080;
  <D.13079>:
  D.13081 = var2.a;
  if (D.13081 != 2) goto <D.13082>; else goto <D.13083>;
  <D.13082>:
  D.13080 = 2;
  return D.13080;
  <D.13083>:
  D.13084 = var3.a;
  if (D.13084 != 3) goto <D.13085>; else goto <D.13086>;
  <D.13085>:
  D.13080 = 3;
  return D.13080;
  <D.13086>:
  D.13087 = var4.a;
  if (D.13087 != 4) goto <D.13088>; else goto <D.13089>;
  <D.13088>:
  D.13080 = 4;
  return D.13080;
  <D.13089>:
  D.13090 = var5.a;
  if (D.13090 != 5) goto <D.13091>; else goto <D.13092>;
  <D.13091>:
  D.13080 = 5;
  return D.13080;
  <D.13092>:
  D.13080 = 0;
  return D.13080;
}


mono_test_Winx64_structs_in3 (struct winx64_struct1 var1, struct winx64_struct5 var2, struct winx64_struct1 var3, struct winx64_struct5 var4, struct winx64_struct1 var5, struct winx64_struct5 var6)
{
  char D.13094;
  int D.13097;
  char D.13098;
  char D.13101;
  char D.13104;
  char D.13107;
  char D.13110;
  char D.13113;
  char D.13116;
  char D.13119;
  char D.13122;
  char D.13125;
  char D.13128;

  D.13094 = var1.a;
  if (D.13094 != 1) goto <D.13095>; else goto <D.13096>;
  <D.13095>:
  D.13097 = 1;
  return D.13097;
  <D.13096>:
  D.13098 = var2.a;
  if (D.13098 != 2) goto <D.13099>; else goto <D.13100>;
  <D.13099>:
  D.13097 = 2;
  return D.13097;
  <D.13100>:
  D.13101 = var2.b;
  if (D.13101 != 3) goto <D.13102>; else goto <D.13103>;
  <D.13102>:
  D.13097 = 2;
  return D.13097;
  <D.13103>:
  D.13104 = var2.c;
  if (D.13104 != 4) goto <D.13105>; else goto <D.13106>;
  <D.13105>:
  D.13097 = 4;
  return D.13097;
  <D.13106>:
  D.13107 = var3.a;
  if (D.13107 != 5) goto <D.13108>; else goto <D.13109>;
  <D.13108>:
  D.13097 = 5;
  return D.13097;
  <D.13109>:
  D.13110 = var4.a;
  if (D.13110 != 6) goto <D.13111>; else goto <D.13112>;
  <D.13111>:
  D.13097 = 6;
  return D.13097;
  <D.13112>:
  D.13113 = var4.b;
  if (D.13113 != 7) goto <D.13114>; else goto <D.13115>;
  <D.13114>:
  D.13097 = 7;
  return D.13097;
  <D.13115>:
  D.13116 = var4.c;
  if (D.13116 != 8) goto <D.13117>; else goto <D.13118>;
  <D.13117>:
  D.13097 = 8;
  return D.13097;
  <D.13118>:
  D.13119 = var5.a;
  if (D.13119 != 9) goto <D.13120>; else goto <D.13121>;
  <D.13120>:
  D.13097 = 9;
  return D.13097;
  <D.13121>:
  D.13122 = var6.a;
  if (D.13122 != 10) goto <D.13123>; else goto <D.13124>;
  <D.13123>:
  D.13097 = 10;
  return D.13097;
  <D.13124>:
  D.13125 = var6.b;
  if (D.13125 != 11) goto <D.13126>; else goto <D.13127>;
  <D.13126>:
  D.13097 = 11;
  return D.13097;
  <D.13127>:
  D.13128 = var6.c;
  if (D.13128 != 12) goto <D.13129>; else goto <D.13130>;
  <D.13129>:
  D.13097 = 12;
  return D.13097;
  <D.13130>:
  D.13097 = 0;
  return D.13097;
}


mono_test_Winx64_struct1_ret ()
{
  struct winx64_struct1 D.13132;
  struct winx64_struct1 ret;

  try
    {
      ret.a = 123;
      D.13132 = ret;
      return D.13132;
    }
  finally
    {
      ret = {CLOBBER};
    }
}


mono_test_Winx64_struct2_ret ()
{
  struct winx64_struct2 D.13135;
  struct winx64_struct2 ret;

  try
    {
      ret.a = 4;
      ret.b = 5;
      D.13135 = ret;
      return D.13135;
    }
  finally
    {
      ret = {CLOBBER};
    }
}


mono_test_Winx64_struct3_ret ()
{
  struct winx64_struct3 D.13138;
  struct winx64_struct3 ret;

  try
    {
      ret.a = 4;
      ret.b = 5;
      ret.c = 4660;
      D.13138 = ret;
      return D.13138;
    }
  finally
    {
      ret = {CLOBBER};
    }
}


mono_test_Winx64_struct4_ret ()
{
  struct winx64_struct4 D.13141;
  struct winx64_struct4 ret;

  try
    {
      ret.a = 4;
      ret.b = 5;
      ret.c = 4660;
      ret.d = 2271560481;
      D.13141 = ret;
      return D.13141;
    }
  finally
    {
      ret = {CLOBBER};
    }
}


mono_test_Winx64_struct5_ret ()
{
  struct winx64_struct5 D.13144;
  struct winx64_struct5 ret;

  try
    {
      ret.a = 4;
      ret.b = 5;
      ret.c = 6;
      D.13144 = ret;
      return D.13144;
    }
  finally
    {
      ret = {CLOBBER};
    }
}


mono_test_Winx64_struct1_ret_5_args (char a, char b, char c, char d, char e)
{
  unsigned char a.108;
  unsigned char b.109;
  unsigned char D.13149;
  unsigned char c.110;
  unsigned char D.13151;
  unsigned char d.111;
  unsigned char D.13153;
  unsigned char e.112;
  unsigned char D.13155;
  char D.13156;
  struct winx64_struct1 D.13157;
  struct winx64_struct1 ret;

  try
    {
      a.108 = (unsigned char) a;
      b.109 = (unsigned char) b;
      D.13149 = a.108 + b.109;
      c.110 = (unsigned char) c;
      D.13151 = D.13149 + c.110;
      d.111 = (unsigned char) d;
      D.13153 = D.13151 + d.111;
      e.112 = (unsigned char) e;
      D.13155 = D.13153 + e.112;
      D.13156 = (char) D.13155;
      ret.a = D.13156;
      D.13157 = ret;
      return D.13157;
    }
  finally
    {
      ret = {CLOBBER};
    }
}


mono_test_Winx64_struct5_ret6_args (char a, char b, char c, char d, char e)
{
  unsigned char a.113;
  unsigned char b.114;
  unsigned char D.13162;
  char D.13163;
  unsigned char c.115;
  unsigned char d.116;
  unsigned char D.13166;
  char D.13167;
  struct winx64_struct5 D.13168;
  struct winx64_struct5 ret;

  try
    {
      a.113 = (unsigned char) a;
      b.114 = (unsigned char) b;
      D.13162 = a.113 + b.114;
      D.13163 = (char) D.13162;
      ret.a = D.13163;
      c.115 = (unsigned char) c;
      d.116 = (unsigned char) d;
      D.13166 = c.115 + d.116;
      D.13167 = (char) D.13166;
      ret.b = D.13167;
      ret.c = e;
      D.13168 = ret;
      return D.13168;
    }
  finally
    {
      ret = {CLOBBER};
    }
}


mono_test_Winx64_floatStruct (struct winx64_floatStruct a)
{
  float D.13173;
  double D.13174;
  int D.13176;
  float D.13179;
  double D.13180;

  D.13173 = a.a;
  D.13174 = (double) D.13173;
  if (D.13174 > 5.5999999999999996447286321199499070644378662109375e+0) goto <D.13171>; else goto <D.13175>;
  <D.13175>:
  D.13173 = a.a;
  D.13174 = (double) D.13173;
  if (D.13174 < 5.4000000000000003552713678800500929355621337890625e+0) goto <D.13171>; else goto <D.13172>;
  <D.13171>:
  D.13176 = 1;
  return D.13176;
  <D.13172>:
  D.13179 = a.b;
  D.13180 = (double) D.13179;
  if (D.13180 > 9.5999999999999996447286321199499070644378662109375e+0) goto <D.13177>; else goto <D.13181>;
  <D.13181>:
  D.13179 = a.b;
  D.13180 = (double) D.13179;
  if (D.13180 < 9.4000000000000003552713678800500929355621337890625e+0) goto <D.13177>; else goto <D.13178>;
  <D.13177>:
  D.13176 = 2;
  return D.13176;
  <D.13178>:
  D.13176 = 0;
  return D.13176;
}


mono_test_Winx64_doubleStruct (struct winx64_doubleStruct a)
{
  double D.13185;
  int D.13187;

  D.13185 = a.a;
  if (D.13185 > 5.5999999999999996447286321199499070644378662109375e+0) goto <D.13183>; else goto <D.13186>;
  <D.13186>:
  D.13185 = a.a;
  if (D.13185 < 5.4000000000000003552713678800500929355621337890625e+0) goto <D.13183>; else goto <D.13184>;
  <D.13183>:
  D.13187 = 1;
  return D.13187;
  <D.13184>:
  D.13187 = 0;
  return D.13187;
}


mono_test_managed_Winx64_struct1_in (int (*managed_struct1_delegate) (struct winx64_struct1) func)
{
  int D.13189;
  struct winx64_struct1 val;

  try
    {
      val.a = 5;
      D.13189 = func (val);
      return D.13189;
    }
  finally
    {
      val = {CLOBBER};
    }
}


mono_test_managed_Winx64_struct5_in (int (*managed_struct5_delegate) (struct winx64_struct5) func)
{
  int D.13192;
  struct winx64_struct5 val;

  try
    {
      val.a = 5;
      val.b = 16;
      val.c = -103;
      D.13192 = func (val);
      return D.13192;
    }
  finally
    {
      val = {CLOBBER};
    }
}


mono_test_managed_Winx64_struct1_struct5_in (int (*managed_struct1_struct5_delegate) (struct winx64_struct1, struct winx64_struct5, struct winx64_struct1, struct winx64_struct5, struct winx64_struct1, struct winx64_struct5) func)
{
  int D.13195;
  struct winx64_struct1 a;
  struct winx64_struct1 c;
  struct winx64_struct1 e;
  struct winx64_struct5 b;
  struct winx64_struct5 d;
  struct winx64_struct5 f;

  try
    {
      a.a = 1;
      b.a = 2;
      b.b = 3;
      b.c = 4;
      c.a = 5;
      d.a = 6;
      d.b = 7;
      d.c = 8;
      e.a = 9;
      f.a = 10;
      f.b = 11;
      f.c = 12;
      D.13195 = func (a, b, c, d, e, f);
      return D.13195;
    }
  finally
    {
      a = {CLOBBER};
      c = {CLOBBER};
      e = {CLOBBER};
      b = {CLOBBER};
      d = {CLOBBER};
      f = {CLOBBER};
    }
}


mono_test_Winx64_struct1_ret_managed (struct winx64_struct1 (*managed_struct1_ret_delegate) (void) func)
{
  char D.13198;
  int D.13201;
  struct winx64_struct1 ret;

  try
    {
      ret = func ();
      D.13198 = ret.a;
      if (D.13198 != 69) goto <D.13199>; else goto <D.13200>;
      <D.13199>:
      D.13201 = 1;
      return D.13201;
      <D.13200>:
      D.13201 = 0;
      return D.13201;
    }
  finally
    {
      ret = {CLOBBER};
    }
}


mono_test_Winx64_struct5_ret_managed (struct winx64_struct5 (*managed_struct5_ret_delegate) (void) func)
{
  char D.13204;
  int D.13207;
  char D.13208;
  char D.13211;
  struct winx64_struct5 ret;

  try
    {
      ret = func ();
      D.13204 = ret.a;
      if (D.13204 != 18) goto <D.13205>; else goto <D.13206>;
      <D.13205>:
      D.13207 = 1;
      return D.13207;
      <D.13206>:
      D.13208 = ret.b;
      if (D.13208 != 52) goto <D.13209>; else goto <D.13210>;
      <D.13209>:
      D.13207 = 2;
      return D.13207;
      <D.13210>:
      D.13211 = ret.c;
      if (D.13211 != 86) goto <D.13212>; else goto <D.13213>;
      <D.13212>:
      D.13207 = 3;
      return D.13207;
      <D.13213>:
      D.13207 = 0;
      return D.13207;
    }
  finally
    {
      ret = {CLOBBER};
    }
}


mono_test_marshal_bool_in (int arg, unsigned int expected, unsigned int bDefaultMarsh, unsigned int bBoolCustMarsh, char bI1CustMarsh, unsigned char bU1CustMarsh, short int bVBCustMarsh)
{
  int D.13218;
  unsigned int D.13221;
  unsigned int D.13224;
  unsigned int D.13227;

  switch (arg) <default: <D.9030>, case 1: <D.9024>, case 2: <D.9026>, case 3: <D.9027>, case 4: <D.9028>, case 5: <D.9029>>
  <D.9024>:
  if (bDefaultMarsh != expected) goto <D.13216>; else goto <D.13217>;
  <D.13216>:
  D.13218 = 1;
  return D.13218;
  <D.13217>:
  goto <D.9025>;
  <D.9026>:
  if (bBoolCustMarsh != expected) goto <D.13219>; else goto <D.13220>;
  <D.13219>:
  D.13218 = 2;
  return D.13218;
  <D.13220>:
  goto <D.9025>;
  <D.9027>:
  D.13221 = (unsigned int) bI1CustMarsh;
  if (D.13221 != expected) goto <D.13222>; else goto <D.13223>;
  <D.13222>:
  D.13218 = 3;
  return D.13218;
  <D.13223>:
  goto <D.9025>;
  <D.9028>:
  D.13224 = (unsigned int) bU1CustMarsh;
  if (D.13224 != expected) goto <D.13225>; else goto <D.13226>;
  <D.13225>:
  D.13218 = 4;
  return D.13218;
  <D.13226>:
  goto <D.9025>;
  <D.9029>:
  D.13227 = (unsigned int) bVBCustMarsh;
  if (D.13227 != expected) goto <D.13228>; else goto <D.13229>;
  <D.13228>:
  D.13218 = 5;
  return D.13218;
  <D.13229>:
  goto <D.9025>;
  <D.9030>:
  D.13218 = 999;
  return D.13218;
  <D.9025>:
  D.13218 = 0;
  return D.13218;
}


mono_test_marshal_bool_out (int arg, unsigned int testVal, unsigned int * bDefaultMarsh, unsigned int * bBoolCustMarsh, char * bI1CustMarsh, unsigned char * bU1CustMarsh, short unsigned int * bVBCustMarsh)
{
  int D.13233;
  char D.13238;
  unsigned char D.13241;
  short unsigned int D.13244;

  switch (arg) <default: <D.9046>, case 1: <D.9040>, case 2: <D.9042>, case 3: <D.9043>, case 4: <D.9044>, case 5: <D.9045>>
  <D.9040>:
  if (bDefaultMarsh == 0B) goto <D.13231>; else goto <D.13232>;
  <D.13231>:
  D.13233 = 1;
  return D.13233;
  <D.13232>:
  *bDefaultMarsh = testVal;
  goto <D.9041>;
  <D.9042>:
  if (bBoolCustMarsh == 0B) goto <D.13234>; else goto <D.13235>;
  <D.13234>:
  D.13233 = 2;
  return D.13233;
  <D.13235>:
  *bBoolCustMarsh = testVal;
  goto <D.9041>;
  <D.9043>:
  if (bI1CustMarsh == 0B) goto <D.13236>; else goto <D.13237>;
  <D.13236>:
  D.13233 = 3;
  return D.13233;
  <D.13237>:
  D.13238 = (char) testVal;
  *bI1CustMarsh = D.13238;
  goto <D.9041>;
  <D.9044>:
  if (bU1CustMarsh == 0B) goto <D.13239>; else goto <D.13240>;
  <D.13239>:
  D.13233 = 4;
  return D.13233;
  <D.13240>:
  D.13241 = (unsigned char) testVal;
  *bU1CustMarsh = D.13241;
  goto <D.9041>;
  <D.9045>:
  if (bVBCustMarsh == 0B) goto <D.13242>; else goto <D.13243>;
  <D.13242>:
  D.13233 = 5;
  return D.13233;
  <D.13243>:
  D.13244 = (short unsigned int) testVal;
  *bVBCustMarsh = D.13244;
  goto <D.9041>;
  <D.9046>:
  D.13233 = 999;
  return D.13233;
  <D.9041>:
  D.13233 = 0;
  return D.13233;
}


mono_test_marshal_bool_ref (int arg, unsigned int expected, unsigned int testVal, unsigned int * bDefaultMarsh, unsigned int * bBoolCustMarsh, char * bI1CustMarsh, unsigned char * bU1CustMarsh, short unsigned int * bVBCustMarsh)
{
  int D.13248;
  unsigned int D.13249;
  unsigned int D.13254;
  char D.13259;
  unsigned int D.13260;
  char D.13263;
  unsigned char D.13266;
  unsigned int D.13267;
  unsigned char D.13270;
  short unsigned int D.13273;
  unsigned int D.13274;
  short unsigned int D.13277;

  switch (arg) <default: <D.9063>, case 1: <D.9057>, case 2: <D.9059>, case 3: <D.9060>, case 4: <D.9061>, case 5: <D.9062>>
  <D.9057>:
  if (bDefaultMarsh == 0B) goto <D.13246>; else goto <D.13247>;
  <D.13246>:
  D.13248 = 1;
  return D.13248;
  <D.13247>:
  D.13249 = *bDefaultMarsh;
  if (D.13249 != expected) goto <D.13250>; else goto <D.13251>;
  <D.13250>:
  D.13248 = 2;
  return D.13248;
  <D.13251>:
  *bDefaultMarsh = testVal;
  goto <D.9058>;
  <D.9059>:
  if (bBoolCustMarsh == 0B) goto <D.13252>; else goto <D.13253>;
  <D.13252>:
  D.13248 = 3;
  return D.13248;
  <D.13253>:
  D.13254 = *bBoolCustMarsh;
  if (D.13254 != expected) goto <D.13255>; else goto <D.13256>;
  <D.13255>:
  D.13248 = 4;
  return D.13248;
  <D.13256>:
  *bBoolCustMarsh = testVal;
  goto <D.9058>;
  <D.9060>:
  if (bI1CustMarsh == 0B) goto <D.13257>; else goto <D.13258>;
  <D.13257>:
  D.13248 = 5;
  return D.13248;
  <D.13258>:
  D.13259 = *bI1CustMarsh;
  D.13260 = (unsigned int) D.13259;
  if (D.13260 != expected) goto <D.13261>; else goto <D.13262>;
  <D.13261>:
  D.13248 = 6;
  return D.13248;
  <D.13262>:
  D.13263 = (char) testVal;
  *bI1CustMarsh = D.13263;
  goto <D.9058>;
  <D.9061>:
  if (bU1CustMarsh == 0B) goto <D.13264>; else goto <D.13265>;
  <D.13264>:
  D.13248 = 7;
  return D.13248;
  <D.13265>:
  D.13266 = *bU1CustMarsh;
  D.13267 = (unsigned int) D.13266;
  if (D.13267 != expected) goto <D.13268>; else goto <D.13269>;
  <D.13268>:
  D.13248 = 8;
  return D.13248;
  <D.13269>:
  D.13270 = (unsigned char) testVal;
  *bU1CustMarsh = D.13270;
  goto <D.9058>;
  <D.9062>:
  if (bVBCustMarsh == 0B) goto <D.13271>; else goto <D.13272>;
  <D.13271>:
  D.13248 = 9;
  return D.13248;
  <D.13272>:
  D.13273 = *bVBCustMarsh;
  D.13274 = (unsigned int) D.13273;
  if (D.13274 != expected) goto <D.13275>; else goto <D.13276>;
  <D.13275>:
  D.13248 = 10;
  return D.13248;
  <D.13276>:
  D.13277 = (short unsigned int) testVal;
  *bVBCustMarsh = D.13277;
  goto <D.9058>;
  <D.9063>:
  D.13248 = 999;
  return D.13248;
  <D.9058>:
  D.13248 = 0;
  return D.13248;
}


mono_test_managed_marshal_bool_in (int arg, unsigned int expected, unsigned int testVal, int (*MarshalBoolInDelegate) (int, unsigned int, unsigned int, unsigned int, char, unsigned char, short unsigned int) pfcn)
{
  int D.13281;
  char D.13282;
  int D.13283;
  unsigned char D.13284;
  int D.13285;
  short unsigned int D.13286;
  int D.13287;

  if (pfcn == 0B) goto <D.13279>; else goto <D.13280>;
  <D.13279>:
  D.13281 = 39168;
  return D.13281;
  <D.13280>:
  switch (arg) <default: <D.9083>, case 1: <D.9078>, case 2: <D.9079>, case 3: <D.9080>, case 4: <D.9081>, case 5: <D.9082>>
  <D.9078>:
  D.13281 = pfcn (arg, expected, testVal, 0, 0, 0, 0);
  return D.13281;
  <D.9079>:
  D.13281 = pfcn (arg, expected, 0, testVal, 0, 0, 0);
  return D.13281;
  <D.9080>:
  D.13282 = (char) testVal;
  D.13283 = (int) D.13282;
  D.13281 = pfcn (arg, expected, 0, 0, D.13283, 0, 0);
  return D.13281;
  <D.9081>:
  D.13284 = (unsigned char) testVal;
  D.13285 = (int) D.13284;
  D.13281 = pfcn (arg, expected, 0, 0, 0, D.13285, 0);
  return D.13281;
  <D.9082>:
  D.13286 = (short unsigned int) testVal;
  D.13287 = (int) D.13286;
  D.13281 = pfcn (arg, expected, 0, 0, 0, 0, D.13287);
  return D.13281;
  <D.9083>:
  D.13281 = 38912;
  return D.13281;
  D.13281 = 0;
  return D.13281;
}


mono_test_managed_marshal_bool_out (int arg, unsigned int expected, unsigned int testVal, int (*MarshalBoolOutDelegate) (int, unsigned int, unsigned int *, unsigned int *, char *, unsigned char *, short unsigned int *) pfcn)
{
  unsigned int lBoolCustMarsh.117;
  int D.13292;
  unsigned int ltVal.118;
  unsigned int ltVal.119;
  char ltVal.120;
  unsigned int D.13306;
  unsigned char ltVal.121;
  unsigned int D.13312;
  short unsigned int ltVal.122;
  unsigned int D.13318;
  int ret;
  unsigned int lDefaultMarsh;
  unsigned int lBoolCustMarsh;
  char lI1CustMarsh;
  unsigned char lU1CustMarsh;
  short unsigned int lVBCustMarsh;

  try
    {
      lI1CustMarsh = 0;
      lU1CustMarsh = 0;
      lVBCustMarsh = 0;
      lBoolCustMarsh = 0;
      lBoolCustMarsh.117 = lBoolCustMarsh;
      lDefaultMarsh = lBoolCustMarsh.117;
      if (pfcn == 0B) goto <D.13290>; else goto <D.13291>;
      <D.13290>:
      D.13292 = 39168;
      return D.13292;
      <D.13291>:
      switch (arg) <default: <D.9115>, case 1: <D.9104>, case 2: <D.9107>, case 3: <D.9109>, case 4: <D.9111>, case 5: <D.9113>>
      <D.9104>:
      {
        unsigned int ltVal;

        try
          {
            ltVal = 0;
            ret = pfcn (arg, testVal, &ltVal, &lBoolCustMarsh, &lI1CustMarsh, &lU1CustMarsh, &lVBCustMarsh);
            if (ret != 0) goto <D.13293>; else goto <D.13294>;
            <D.13293>:
            D.13292 = ret + 256;
            return D.13292;
            <D.13294>:
            ltVal.118 = ltVal;
            if (expected != ltVal.118) goto <D.13296>; else goto <D.13297>;
            <D.13296>:
            D.13292 = 512;
            return D.13292;
            <D.13297>:
            goto <D.9106>;
          }
        finally
          {
            ltVal = {CLOBBER};
          }
      }
      <D.9107>:
      {
        unsigned int ltVal;

        try
          {
            ltVal = 0;
            ret = pfcn (arg, testVal, &lDefaultMarsh, &ltVal, &lI1CustMarsh, &lU1CustMarsh, &lVBCustMarsh);
            if (ret != 0) goto <D.13298>; else goto <D.13299>;
            <D.13298>:
            D.13292 = ret + 768;
            return D.13292;
            <D.13299>:
            ltVal.119 = ltVal;
            if (expected != ltVal.119) goto <D.13301>; else goto <D.13302>;
            <D.13301>:
            D.13292 = 1024;
            return D.13292;
            <D.13302>:
            goto <D.9106>;
          }
        finally
          {
            ltVal = {CLOBBER};
          }
      }
      <D.9109>:
      {
        char ltVal;

        try
          {
            ltVal = 0;
            ret = pfcn (arg, testVal, &lDefaultMarsh, &lBoolCustMarsh, &ltVal, &lU1CustMarsh, &lVBCustMarsh);
            if (ret != 0) goto <D.13303>; else goto <D.13304>;
            <D.13303>:
            D.13292 = ret + 1280;
            return D.13292;
            <D.13304>:
            ltVal.120 = ltVal;
            D.13306 = (unsigned int) ltVal.120;
            if (D.13306 != expected) goto <D.13307>; else goto <D.13308>;
            <D.13307>:
            D.13292 = 1536;
            return D.13292;
            <D.13308>:
            goto <D.9106>;
          }
        finally
          {
            ltVal = {CLOBBER};
          }
      }
      <D.9111>:
      {
        unsigned char ltVal;

        try
          {
            ltVal = 0;
            ret = pfcn (arg, testVal, &lDefaultMarsh, &lBoolCustMarsh, &lI1CustMarsh, &ltVal, &lVBCustMarsh);
            if (ret != 0) goto <D.13309>; else goto <D.13310>;
            <D.13309>:
            D.13292 = ret + 1792;
            return D.13292;
            <D.13310>:
            ltVal.121 = ltVal;
            D.13312 = (unsigned int) ltVal.121;
            if (D.13312 != expected) goto <D.13313>; else goto <D.13314>;
            <D.13313>:
            D.13292 = 2048;
            return D.13292;
            <D.13314>:
            goto <D.9106>;
          }
        finally
          {
            ltVal = {CLOBBER};
          }
      }
      <D.9113>:
      {
        short unsigned int ltVal;

        try
          {
            ltVal = 0;
            ret = pfcn (arg, testVal, &lDefaultMarsh, &lBoolCustMarsh, &lI1CustMarsh, &lU1CustMarsh, &ltVal);
            if (ret != 0) goto <D.13315>; else goto <D.13316>;
            <D.13315>:
            D.13292 = ret + 2304;
            return D.13292;
            <D.13316>:
            ltVal.122 = ltVal;
            D.13318 = (unsigned int) ltVal.122;
            if (D.13318 != expected) goto <D.13319>; else goto <D.13320>;
            <D.13319>:
            D.13292 = 4096;
            return D.13292;
            <D.13320>:
            goto <D.9106>;
          }
        finally
          {
            ltVal = {CLOBBER};
          }
      }
      <D.9115>:
      D.13292 = 38912;
      return D.13292;
      <D.9106>:
      D.13292 = 0;
      return D.13292;
    }
  finally
    {
      lDefaultMarsh = {CLOBBER};
      lBoolCustMarsh = {CLOBBER};
      lI1CustMarsh = {CLOBBER};
      lU1CustMarsh = {CLOBBER};
      lVBCustMarsh = {CLOBBER};
    }
}


mono_test_managed_marshal_bool_ref (int arg, unsigned int expected, unsigned int testVal, unsigned int outExpected, unsigned int outTestVal, int (*MarshalBoolRefDelegate) (int, unsigned int, unsigned int, unsigned int *, unsigned int *, char *, unsigned char *, short unsigned int *) pfcn)
{
  unsigned int lBoolCustMarsh.123;
  int D.13336;
  unsigned int ltestVal.124;
  unsigned int ltestVal.125;
  char ltestVal.126;
  char ltestVal.127;
  unsigned int D.13351;
  unsigned char ltestVal.128;
  unsigned char ltestVal.129;
  unsigned int D.13358;
  short unsigned int ltestVal.130;
  short unsigned int ltestVal.131;
  unsigned int D.13365;
  int ret;
  unsigned int lDefaultMarsh;
  unsigned int lBoolCustMarsh;
  char lI1CustMarsh;
  unsigned char lU1CustMarsh;
  short unsigned int lVBCustMarsh;

  try
    {
      lI1CustMarsh = 0;
      lU1CustMarsh = 0;
      lVBCustMarsh = 0;
      lBoolCustMarsh = 0;
      lBoolCustMarsh.123 = lBoolCustMarsh;
      lDefaultMarsh = lBoolCustMarsh.123;
      if (pfcn == 0B) goto <D.13334>; else goto <D.13335>;
      <D.13334>:
      D.13336 = 39168;
      return D.13336;
      <D.13335>:
      switch (arg) <default: <D.9150>, case 1: <D.9139>, case 2: <D.9142>, case 3: <D.9144>, case 4: <D.9146>, case 5: <D.9148>>
      <D.9139>:
      {
        unsigned int ltestVal;

        try
          {
            ltestVal = testVal;
            ret = pfcn (arg, expected, outTestVal, &ltestVal, &lBoolCustMarsh, &lI1CustMarsh, &lU1CustMarsh, &lVBCustMarsh);
            if (ret != 0) goto <D.13337>; else goto <D.13338>;
            <D.13337>:
            D.13336 = ret + 256;
            return D.13336;
            <D.13338>:
            ltestVal.124 = ltestVal;
            if (outExpected != ltestVal.124) goto <D.13340>; else goto <D.13341>;
            <D.13340>:
            D.13336 = 512;
            return D.13336;
            <D.13341>:
            goto <D.9141>;
          }
        finally
          {
            ltestVal = {CLOBBER};
          }
      }
      <D.9142>:
      {
        unsigned int ltestVal;

        try
          {
            ltestVal = testVal;
            ret = pfcn (arg, expected, outTestVal, &lDefaultMarsh, &ltestVal, &lI1CustMarsh, &lU1CustMarsh, &lVBCustMarsh);
            if (ret != 0) goto <D.13342>; else goto <D.13343>;
            <D.13342>:
            D.13336 = ret + 768;
            return D.13336;
            <D.13343>:
            ltestVal.125 = ltestVal;
            if (outExpected != ltestVal.125) goto <D.13345>; else goto <D.13346>;
            <D.13345>:
            D.13336 = 1024;
            return D.13336;
            <D.13346>:
            goto <D.9141>;
          }
        finally
          {
            ltestVal = {CLOBBER};
          }
      }
      <D.9144>:
      {
        char ltestVal;

        try
          {
            ltestVal.126 = (char) testVal;
            ltestVal = ltestVal.126;
            ret = pfcn (arg, expected, outTestVal, &lDefaultMarsh, &lBoolCustMarsh, &ltestVal, &lU1CustMarsh, &lVBCustMarsh);
            if (ret != 0) goto <D.13348>; else goto <D.13349>;
            <D.13348>:
            D.13336 = ret + 1280;
            return D.13336;
            <D.13349>:
            ltestVal.127 = ltestVal;
            D.13351 = (unsigned int) ltestVal.127;
            if (D.13351 != outExpected) goto <D.13352>; else goto <D.13353>;
            <D.13352>:
            D.13336 = 1536;
            return D.13336;
            <D.13353>:
            goto <D.9141>;
          }
        finally
          {
            ltestVal = {CLOBBER};
          }
      }
      <D.9146>:
      {
        unsigned char ltestVal;

        try
          {
            ltestVal.128 = (unsigned char) testVal;
            ltestVal = ltestVal.128;
            ret = pfcn (arg, expected, outTestVal, &lDefaultMarsh, &lBoolCustMarsh, &lI1CustMarsh, &ltestVal, &lVBCustMarsh);
            if (ret != 0) goto <D.13355>; else goto <D.13356>;
            <D.13355>:
            D.13336 = ret + 1792;
            return D.13336;
            <D.13356>:
            ltestVal.129 = ltestVal;
            D.13358 = (unsigned int) ltestVal.129;
            if (D.13358 != outExpected) goto <D.13359>; else goto <D.13360>;
            <D.13359>:
            D.13336 = 2048;
            return D.13336;
            <D.13360>:
            goto <D.9141>;
          }
        finally
          {
            ltestVal = {CLOBBER};
          }
      }
      <D.9148>:
      {
        short unsigned int ltestVal;

        try
          {
            ltestVal.130 = (short unsigned int) testVal;
            ltestVal = ltestVal.130;
            ret = pfcn (arg, expected, outTestVal, &lDefaultMarsh, &lBoolCustMarsh, &lI1CustMarsh, &lU1CustMarsh, &ltestVal);
            if (ret != 0) goto <D.13362>; else goto <D.13363>;
            <D.13362>:
            D.13336 = ret + 2304;
            return D.13336;
            <D.13363>:
            ltestVal.131 = ltestVal;
            D.13365 = (unsigned int) ltestVal.131;
            if (D.13365 != outExpected) goto <D.13366>; else goto <D.13367>;
            <D.13366>:
            D.13336 = 4096;
            return D.13336;
            <D.13367>:
            goto <D.9141>;
          }
        finally
          {
            ltestVal = {CLOBBER};
          }
      }
      <D.9150>:
      D.13336 = 38912;
      return D.13336;
      <D.9141>:
      D.13336 = 0;
      return D.13336;
    }
  finally
    {
      lDefaultMarsh = {CLOBBER};
      lBoolCustMarsh = {CLOBBER};
      lI1CustMarsh = {CLOBBER};
      lU1CustMarsh = {CLOBBER};
      lVBCustMarsh = {CLOBBER};
    }
}


mono_test_marshal_thread_attach (int (*SimpleDelegate) (int) del)
{
  _Bool D.13380;
  long int D.13381;
  long int D.13382;
  long unsigned int t.132;
  int D.13386;
  int res;
  pthread_t t;

  try
    {
      res = pthread_create (&t, 0B, call_managed, del);
      D.13380 = res != 0;
      D.13381 = (long int) D.13380;
      D.13382 = __builtin_expect (D.13381, 0);
      if (D.13382 != 0) goto <D.13383>; else goto <D.13384>;
      <D.13383>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "libtest.c", 5241, "res == 0");
      <D.13384>:
      t.132 = t;
      pthread_join (t.132, 0B);
      D.13386 = call_managed_res;
      return D.13386;
    }
  finally
    {
      t = {CLOBBER};
    }
}


call_managed (void * arg)
{
  int call_managed_res.133;
  int (*SimpleDelegate) (int) del;

  del = (int (*SimpleDelegate) (int)) arg;
  call_managed_res.133 = del (42);
  call_managed_res = call_managed_res.133;
}


mono_test_marshal_set_callback (int (*Callback) (void) cb)
{
  callback = cb;
}


mono_test_marshal_call_callback ()
{
  int D.13390;
  int (*<T5f2>) (void) callback.134;

  callback.134 = callback;
  D.13390 = callback.134 ();
  return D.13390;
}


mono_test_marshal_lpstr (char * str)
{
  int D.13393;
  int D.9181;
  int iftmp.135;
  int D.9177;
  const char[4] * D.13397;
  unsigned char D.13398;
  int D.13399;
  unsigned char D.13400;
  int D.13401;
  _Bool D.13402;
  _Bool D.13403;
  _Bool D.13404;
  const unsigned char * D.13407;
  unsigned char D.13408;
  int D.13409;
  const unsigned char * D.13410;
  unsigned char D.13411;
  int D.13412;
  _Bool D.13413;
  _Bool D.13414;
  const unsigned char * D.13417;
  unsigned char D.13418;
  int D.13419;
  const unsigned char * D.13420;
  unsigned char D.13421;
  int D.13422;
  _Bool D.13423;
  _Bool D.13424;
  const unsigned char * D.13427;
  unsigned char D.13428;
  int D.13429;
  const unsigned char * D.13430;
  unsigned char D.13431;
  int D.13432;

  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = str;
      D.13397 = "ABC";
      D.13398 = MEM[(const unsigned char *)D.13397];
      D.13399 = (int) D.13398;
      D.13400 = *__s2;
      D.13401 = (int) D.13400;
      __result = D.13399 - D.13401;
      {
        D.13402 = __s1_len != 0;
        D.13403 = __result == 0;
        D.13404 = D.13402 & D.13403;
        if (D.13404 != 0) goto <D.13405>; else goto <D.13406>;
        <D.13405>:
        D.13407 = &MEM[(void *)"ABC" + 1B];
        D.13408 = *D.13407;
        D.13409 = (int) D.13408;
        D.13410 = __s2 + 1;
        D.13411 = *D.13410;
        D.13412 = (int) D.13411;
        __result = D.13409 - D.13412;
        D.13413 = __s1_len > 1;
        D.13403 = __result == 0;
        D.13414 = D.13413 & D.13403;
        if (D.13414 != 0) goto <D.13415>; else goto <D.13416>;
        <D.13415>:
        D.13417 = &MEM[(void *)"ABC" + 2B];
        D.13418 = *D.13417;
        D.13419 = (int) D.13418;
        D.13420 = __s2 + 2;
        D.13421 = *D.13420;
        D.13422 = (int) D.13421;
        __result = D.13419 - D.13422;
        D.13423 = __s1_len > 2;
        D.13403 = __result == 0;
        D.13424 = D.13423 & D.13403;
        if (D.13424 != 0) goto <D.13425>; else goto <D.13426>;
        <D.13425>:
        D.13427 = &MEM[(void *)"ABC" + 3B];
        D.13428 = *D.13427;
        D.13429 = (int) D.13428;
        D.13430 = __s2 + 3;
        D.13431 = *D.13430;
        D.13432 = (int) D.13431;
        __result = D.13429 - D.13432;
        <D.13426>:
        <D.13416>:
        <D.13406>:
      }
      D.9177 = __result;
    }
    iftmp.135 = D.9177;
    goto <D.13433>;
    <D.13396>:
    iftmp.135 = __builtin_strcmp ("ABC", str);
    <D.13433>:
    D.9181 = iftmp.135;
  }
  D.13393 = D.9181;
  return D.13393;
}


mono_test_marshal_lpwstr (gunichar2 * str)
{
  int res.137;
  int iftmp.136;
  int D.9191;
  const char[4] * D.13438;
  unsigned char D.13439;
  int D.13440;
  unsigned char D.13441;
  int D.13442;
  _Bool D.13443;
  _Bool D.13444;
  _Bool D.13445;
  const unsigned char * D.13448;
  unsigned char D.13449;
  int D.13450;
  const unsigned char * D.13451;
  unsigned char D.13452;
  int D.13453;
  _Bool D.13454;
  _Bool D.13455;
  const unsigned char * D.13458;
  unsigned char D.13459;
  int D.13460;
  const unsigned char * D.13461;
  unsigned char D.13462;
  int D.13463;
  _Bool D.13464;
  _Bool D.13465;
  const unsigned char * D.13468;
  unsigned char D.13469;
  int D.13470;
  const unsigned char * D.13471;
  unsigned char D.13472;
  int D.13473;
  int D.13475;
  char * s;
  int res;

  s = monoeg_g_utf16_to_utf8 (str, -1, 0B, 0B, 0B);
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = s;
      D.13438 = "ABC";
      D.13439 = MEM[(const unsigned char *)D.13438];
      D.13440 = (int) D.13439;
      D.13441 = *__s2;
      D.13442 = (int) D.13441;
      __result = D.13440 - D.13442;
      {
        D.13443 = __s1_len != 0;
        D.13444 = __result == 0;
        D.13445 = D.13443 & D.13444;
        if (D.13445 != 0) goto <D.13446>; else goto <D.13447>;
        <D.13446>:
        D.13448 = &MEM[(void *)"ABC" + 1B];
        D.13449 = *D.13448;
        D.13450 = (int) D.13449;
        D.13451 = __s2 + 1;
        D.13452 = *D.13451;
        D.13453 = (int) D.13452;
        __result = D.13450 - D.13453;
        D.13454 = __s1_len > 1;
        D.13444 = __result == 0;
        D.13455 = D.13454 & D.13444;
        if (D.13455 != 0) goto <D.13456>; else goto <D.13457>;
        <D.13456>:
        D.13458 = &MEM[(void *)"ABC" + 2B];
        D.13459 = *D.13458;
        D.13460 = (int) D.13459;
        D.13461 = __s2 + 2;
        D.13462 = *D.13461;
        D.13463 = (int) D.13462;
        __result = D.13460 - D.13463;
        D.13464 = __s1_len > 2;
        D.13444 = __result == 0;
        D.13465 = D.13464 & D.13444;
        if (D.13465 != 0) goto <D.13466>; else goto <D.13467>;
        <D.13466>:
        D.13468 = &MEM[(void *)"ABC" + 3B];
        D.13469 = *D.13468;
        D.13470 = (int) D.13469;
        D.13471 = __s2 + 3;
        D.13472 = *D.13471;
        D.13473 = (int) D.13472;
        __result = D.13470 - D.13473;
        <D.13467>:
        <D.13457>:
        <D.13447>:
      }
      D.9191 = __result;
    }
    iftmp.136 = D.9191;
    goto <D.13474>;
    <D.13437>:
    iftmp.136 = __builtin_strcmp ("ABC", s);
    <D.13474>:
    res.137 = iftmp.136;
  }
  res = res.137;
  monoeg_g_free (s);
  D.13475 = res;
  return D.13475;
}


mono_test_marshal_return_lpstr ()
{
  char * D.13477;
  char * res;

  res = marshal_alloc (4);
  strcpy (res, "XYZ");
  D.13477 = res;
  return D.13477;
}


mono_test_marshal_return_lpwstr ()
{
  gunichar2 * D.13479;
  gunichar2 * res;
  gunichar2 * tmp;

  res = marshal_alloc (8);
  tmp = monoeg_g_utf8_to_utf16 ("XYZ", -1, 0B, 0B, 0B);
  memcpy (res, tmp, 8);
  monoeg_g_free (tmp);
  D.13479 = res;
  return D.13479;
}


mono_test_has_thiscall ()
{
  int D.13481;

  D.13481 = 1;
  return D.13481;
}


_mono_test_native_thiscall1 (int arg)
{
  int D.13483;

  D.13483 = arg;
  return D.13483;
}


_mono_test_native_thiscall2 (int arg, int arg2)
{
  int D.13485;
  int D.13486;

  D.13486 = arg2 ^ 1;
  D.13485 = D.13486 + arg;
  return D.13485;
}


_mono_test_native_thiscall3 (int arg, int arg2, int arg3)
{
  int D.13488;
  int D.13489;
  int D.13490;
  int D.13491;

  D.13489 = arg2 ^ 1;
  D.13490 = D.13489 + arg;
  D.13491 = arg3 ^ 2;
  D.13488 = D.13490 + D.13491;
  return D.13488;
}


