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