modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/20030904-1.c (about)

     1  struct A
     2  {
     3    long a1;
     4    double *a2;
     5  };
     6  
     7  struct B
     8  {
     9    void *b1;
    10    double b2, b3;
    11    struct
    12    {
    13      int d1;
    14      double d2;
    15    } b4;
    16  };
    17  
    18  struct C
    19  {
    20    struct A *c1;
    21    void *c2;
    22  };
    23  
    24  long fn1 (struct A *, double);
    25  void fn2 (void *, const char *);
    26  double fn3 (double);
    27  double fn4 (double);
    28  int fn5 (void *, double, double);
    29  
    30  int
    31  foo (struct B *x)
    32  {
    33    struct C *e = x->b1;
    34    struct A *f = e->c1;
    35    long g, h, i;
    36    double *j, k;
    37    g = fn1 (f, 0.5 * (x->b2 + x->b3)), h = g + 1, i = f->a1;
    38    j = f->a2, k = x->b4.d2;
    39    fn2 (x, "something");
    40    if (g <= 0)
    41      {
    42        double l = j[2] - j[1];
    43        if (l > 0.0 && l <= 0.02)
    44          k = (x->b4.d1 == 1
    45               ? ((1.0 / l) < 25 ? 25 : (1.0 / l))
    46               : fn3 ((1.0 / l) < 25 ? 25 : (1.0 / l)));
    47      }
    48    else
    49      {
    50        double m = j[h] - j[g], n = 0.0, l = 0.0;
    51        if (g > 1)
    52          n = j[g] - j[g - 1];
    53        if (h < i)
    54          l = j[h + 1] - j[h];
    55        if (n > 0.02)
    56          n = 0;
    57        if (m > 0.02)
    58          m = 0;
    59        if (l > 0.02)
    60          l = 0;
    61        if (m < n)
    62          {
    63            double o = m;
    64            m = n;
    65            n = o;
    66          }
    67        if (l < n)
    68          {
    69            double o = l;
    70            l = n;
    71            n = o;
    72          }
    73        if (l < m)
    74          {
    75            double o = l;
    76            l = m;
    77            m = o;
    78          }
    79        if (n != 0.0)
    80          k = (x->b4.d1 == 1
    81               ? ((1 / m) < 25 ? 25 : (1 / m))
    82               : fn3 ((1 / m) < 25 ? 25 : (1 / m)));
    83        else if (m != 0.0)
    84          k = (x->b4.d1 == 1
    85               ? ((2 / (m + l)) < 25 ? 25 : (2 / (m + l)))
    86               : fn3 ((2 / (m + l)) < 25 ? 25 : (2 / (m + l))));
    87        else if (l != 0.0)
    88          k = (x->b4.d1 == 1
    89               ? ((1 / l) < 25 ? 25 : (1 / l))
    90               : fn3 ((1 / l) < 25 ? 25 : (1 / l)));
    91      }
    92    fn5 (e->c2, 0.5 * (x->b2 + x->b3), (x->b4.d1 == 1 ? k : fn4 (k)));
    93    return 1;
    94  }