1 // PR 20670: f29 corrupted when unwind stack.  This tries to test that FP
2 // registers are properly saved and restored by defining 20 different FP
3 // local variables.
4 // { dg-do run }
5 // { dg-options "-O" }
6 #include <stdlib.h>
7 
8 double zero = 0.0;
9 double another_zero = 0.0;
10 
11 int
sub(void)12 sub (void)
13 {
14   throw (0);
15 }
16 
17 int
main(void)18 main (void)
19 {
20   double a, b, c, d, e, f, g, h, i, j;
21   double a1, b1, c1, d1, e1, f1, g1, h1, i1, j1;
22 
23   a = zero;
24   b = a + 1;
25   c = b + 1;
26   d = c + 1;
27   e = d + 1;
28   f = e + 1;
29   g = f + 1;
30   h = g + 1;
31   i = h + 1;
32   j = i + 1;
33 
34   a1 = another_zero;
35   b1 = a1 + 1;
36   c1 = b1 + 1;
37   d1 = c1 + 1;
38   e1 = d1 + 1;
39   f1 = e1 + 1;
40   g1 = f1 + 1;
41   h1 = g1 + 1;
42   i1 = h1 + 1;
43   j1 = i1 + 1;
44 
45   try
46     {
47       sub ();
48     }
49   catch (...)
50     {
51       if (a != 0.0)
52         abort ();
53       if (b != 1.0)
54         abort ();
55       if (c != 2.0)
56         abort ();
57       if (d != 3.0)
58         abort ();
59       if (e != 4.0)
60         abort ();
61       if (f != 5.0)
62         abort ();
63       if (g != 6.0)
64         abort ();
65       if (h != 7.0)
66         abort ();
67       if (i != 8.0)
68         abort ();
69       if (j != 9.0)
70         abort ();
71 
72       if (a1 != 0.0)
73         abort ();
74       if (b1 != 1.0)
75         abort ();
76       if (c1 != 2.0)
77         abort ();
78       if (d1 != 3.0)
79         abort ();
80       if (e1 != 4.0)
81         abort ();
82       if (f1 != 5.0)
83         abort ();
84       if (g1 != 6.0)
85         abort ();
86       if (h1 != 7.0)
87         abort ();
88       if (i1 != 8.0)
89         abort ();
90       if (j1 != 9.0)
91         abort ();
92     }
93   return 0;
94 }
95