| // PR 20670: f29 corrupted when unwind stack. This tries to test that FP |
| // registers are properly saved and restored by defining 20 different FP |
| // local variables. |
| // { dg-do run } |
| // { dg-options "-O" } |
| #include <stdlib.h> |
| |
| double zero = 0.0; |
| double another_zero = 0.0; |
| |
| int |
| sub (void) |
| { |
| throw (0); |
| } |
| |
| int |
| main (void) |
| { |
| double a, b, c, d, e, f, g, h, i, j; |
| double a1, b1, c1, d1, e1, f1, g1, h1, i1, j1; |
| |
| a = zero; |
| b = a + 1; |
| c = b + 1; |
| d = c + 1; |
| e = d + 1; |
| f = e + 1; |
| g = f + 1; |
| h = g + 1; |
| i = h + 1; |
| j = i + 1; |
| |
| a1 = another_zero; |
| b1 = a1 + 1; |
| c1 = b1 + 1; |
| d1 = c1 + 1; |
| e1 = d1 + 1; |
| f1 = e1 + 1; |
| g1 = f1 + 1; |
| h1 = g1 + 1; |
| i1 = h1 + 1; |
| j1 = i1 + 1; |
| |
| try |
| { |
| sub (); |
| } |
| catch (...) |
| { |
| if (a != 0.0) |
| abort (); |
| if (b != 1.0) |
| abort (); |
| if (c != 2.0) |
| abort (); |
| if (d != 3.0) |
| abort (); |
| if (e != 4.0) |
| abort (); |
| if (f != 5.0) |
| abort (); |
| if (g != 6.0) |
| abort (); |
| if (h != 7.0) |
| abort (); |
| if (i != 8.0) |
| abort (); |
| if (j != 9.0) |
| abort (); |
| |
| if (a1 != 0.0) |
| abort (); |
| if (b1 != 1.0) |
| abort (); |
| if (c1 != 2.0) |
| abort (); |
| if (d1 != 3.0) |
| abort (); |
| if (e1 != 4.0) |
| abort (); |
| if (f1 != 5.0) |
| abort (); |
| if (g1 != 6.0) |
| abort (); |
| if (h1 != 7.0) |
| abort (); |
| if (i1 != 8.0) |
| abort (); |
| if (j1 != 9.0) |
| abort (); |
| } |
| return 0; |
| } |