From: James E Wilson Date: Wed, 20 Apr 2005 01:44:58 +0000 (-0700) Subject: Testcase to verify that FP regs are properly saved/restored across unwind. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=47508bd3bef9137edaeda1bcb6df07763134b2df;p=platform%2Fupstream%2Fgcc.git Testcase to verify that FP regs are properly saved/restored across unwind. PR target/20670 * g++.dg/eh/fp-regs.C: New test. From-SVN: r98432 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8b2e027..b281f7d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-04-19 James E. Wilson + + PR target/20670 + * g++.dg/eh/fp-regs.C: New test. + 2005-04-20 Joseph S. Myers * gcc.dg/Wint-to-pointer-cast-1.c, diff --git a/gcc/testsuite/g++.dg/eh/fp-regs.C b/gcc/testsuite/g++.dg/eh/fp-regs.C new file mode 100644 index 0000000..b91c0f9 --- /dev/null +++ b/gcc/testsuite/g++.dg/eh/fp-regs.C @@ -0,0 +1,94 @@ +// 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 + +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; +}