1/* Tail call optimizations would convert func() into the moral equivalent of: 2 3 double acc = 0.0; 4 for (int i = 0; i <= n; i++) 5 acc += d; 6 return acc; 7 8 which mishandles the case where 'd' is -0. They also initialised 'acc' 9 to a zero int rather than a zero double. */ 10 11double func (double d, int n) 12{ 13 if (n == 0) 14 return d; 15 else 16 return d + func (d, n - 1); 17} 18 19int main () 20{ 21 if (__builtin_copysign (1.0, func (0.0 / -5.0, 10)) != -1.0) 22 abort (); 23 exit (0); 24} 25