1 /* Tail call optimizations would reverse the order of multiplications
2    in func().  */
3 
func(const double * array)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 
main()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 }
20