1  /* Tail call optimizations would reverse the order of multiplications
       2     in func().  */
       3  
       4  double func (const double *array)
       5  {
       6    double d = *array;
       7    if (d == 1.0)
       8      return d;
       9    else
      10      return d * func (array + 1);
      11  }
      12  
      13  int main ()
      14  {
      15    double values[] = { __DBL_MAX__, 2.0, 0.5, 1.0 };
      16    if (func (values) != __DBL_MAX__)
      17      abort ();
      18    exit (0);
      19  }