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