main ()
{
  int i.0;
  int D.17221;
  sizetype D.17222;
  sizetype i.1;
  bitsizetype D.17224;
  bitsizetype D.17225;
  sizetype D.17226;
  int[0:D.17222] * a.2;
  int D.17228;
  int D.17229;
  unsigned int i.3;
  int[0:D.17222] * D.17231;
  void * saved_stack.4;
  long int D.17233;
  unsigned int D.17234;
  long int D.17235;
  long int D.17236;
  int D.17237;
  int i;

  i = 0;
  goto <D.17209>;
  <D.17208>:
  {
    int a[0:D.17222] [value-expr: *a.2];
    int j;

    saved_stack.4 = __builtin_stack_save ();
    try
      {
        i.0 = i;
        D.17221 = i.0 + -1;
        D.17222 = (sizetype) D.17221;
        i.1 = (sizetype) i.0;
        D.17224 = (bitsizetype) i.1;
        D.17225 = D.17224 * 32;
        i.1 = (sizetype) i.0;
        D.17226 = i.1 * 4;
        i.1 = (sizetype) i.0;
        D.17224 = (bitsizetype) i.1;
        D.17225 = D.17224 * 32;
        i.1 = (sizetype) i.0;
        D.17226 = i.1 * 4;
        a.2 = __builtin_alloca_with_align (D.17226, 32);
        j = 0;
        goto <D.17206>;
        <D.17205>:
        D.17228 = i - j;
        D.17229 = D.17228 + -1;
        *a.2[j] = D.17229;
        j = j + 1;
        <D.17206>:
        if (j < i) goto <D.17205>; else goto <D.17207>;
        <D.17207>:
        i.3 = (unsigned int) i;
        D.17231 = a.2;
        compare_sorts (D.17231, i.3, 4, compare_ints);
      }
    finally
      {
        __builtin_stack_restore (saved_stack.4);
      }
  }
  i = i + 1;
  <D.17209>:
  if (i <= 3999) goto <D.17208>; else goto <D.17210>;
  <D.17210>:
  D.17233 = time (0B);
  D.17234 = (unsigned int) D.17233;
  srandom (D.17234);
  i = 0;
  goto <D.17217>;
  <D.17216>:
  {
    struct teststruct_t a[200];
    int j;

    try
      {
        j = 0;
        goto <D.17214>;
        <D.17213>:
        D.17235 = random ();
        a[j].key = D.17235;
        D.17236 = random ();
        a[j].val = D.17236;
        j = j + 1;
        <D.17214>:
        if (j <= 199) goto <D.17213>; else goto <D.17215>;
        <D.17215>:
        compare_sorts (&a, 200, 8, compare_teststructs);
      }
    finally
      {
        a = {CLOBBER};
      }
  }
  i = i + 1;
  <D.17217>:
  if (i <= 1999) goto <D.17216>; else goto <D.17218>;
  <D.17218>:
  D.17237 = 0;
  return D.17237;
}


compare_teststructs (const void * pa, const void * pb)
{
  int D.17241;
  int a;
  int b;

  a = MEM[(const struct teststruct_t *)pa].key;
  b = MEM[(const struct teststruct_t *)pb].key;
  if (a < b) goto <D.17239>; else goto <D.17240>;
  <D.17239>:
  D.17241 = -1;
  return D.17241;
  <D.17240>:
  if (a == b) goto <D.17242>; else goto <D.17243>;
  <D.17242>:
  D.17241 = 0;
  return D.17241;
  <D.17243>:
  D.17241 = 1;
  return D.17241;
}


compare_ints (const void * pa, const void * pb)
{
  int D.17247;
  int a;
  int b;

  a = MEM[(const int *)pa];
  b = MEM[(const int *)pb];
  if (a < b) goto <D.17245>; else goto <D.17246>;
  <D.17245>:
  D.17247 = -1;
  return D.17247;
  <D.17246>:
  if (a == b) goto <D.17248>; else goto <D.17249>;
  <D.17248>:
  D.17247 = 0;
  return D.17247;
  <D.17249>:
  D.17247 = 1;
  return D.17247;
}


compare_sorts (void * base, size_t nel, size_t width, int (*<T4c5>) (const void *, const void *) compar)
{
  int D.17251;
  size_t len;
  void * b1;
  void * b2;
  static const char __PRETTY_FUNCTION__[14] = "compare_sorts";

  len = nel * width;
  b1 = malloc (len);
  b2 = malloc (len);
  memcpy (b1, base, len);
  memcpy (b2, base, len);
  qsort (b1, nel, width, compar);
  sgen_qsort (b2, nel, width, compar);
  D.17251 = memcmp (b1, b2, len);
  if (D.17251 != 0) goto <D.17252>; else goto <D.17253>;
  <D.17252>:
  __assert_fail ("!memcmp (b1, b2, len)", "test-sgen-qsort.c", 71, &__PRETTY_FUNCTION__);
  <D.17253>:
  free (b1);
  free (b2);
}


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

  D.17255 = __builtin_object_size (__dest, 0);
  D.17254 = __builtin___memcpy_chk (__dest, __src, __len, D.17255);
  return D.17254;
}


