131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh// PR 20670: f29 corrupted when unwind stack. This tries to test that FP 231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh// registers are properly saved and restored by defining 20 different FP 331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh// local variables. 431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh// { dg-do run } 531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh// { dg-options "-O" } 631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh#include <stdlib.h> 731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh 831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehdouble zero = 0.0; 931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehdouble another_zero = 0.0; 1031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh 1131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehint 1231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehsub (void) 1331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh{ 1431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh throw (0); 1531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh} 1631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh 1731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehint 1831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehmain (void) 1931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh{ 2031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh double a, b, c, d, e, f, g, h, i, j; 2131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh double a1, b1, c1, d1, e1, f1, g1, h1, i1, j1; 2231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh 2331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh a = zero; 2431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh b = a + 1; 2531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh c = b + 1; 2631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh d = c + 1; 2731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh e = d + 1; 2831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh f = e + 1; 2931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh g = f + 1; 3031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh h = g + 1; 3131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh i = h + 1; 3231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh j = i + 1; 3331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh 3431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh a1 = another_zero; 3531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh b1 = a1 + 1; 3631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh c1 = b1 + 1; 3731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh d1 = c1 + 1; 3831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh e1 = d1 + 1; 3931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh f1 = e1 + 1; 4031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh g1 = f1 + 1; 4131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh h1 = g1 + 1; 4231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh i1 = h1 + 1; 4331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh j1 = i1 + 1; 4431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh 4531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh try 4631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh { 4731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh sub (); 4831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh } 4931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh catch (...) 5031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh { 5131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (a != 0.0) 5231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 5331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (b != 1.0) 5431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 5531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (c != 2.0) 5631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 5731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (d != 3.0) 5831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 5931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (e != 4.0) 6031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 6131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (f != 5.0) 6231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 6331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (g != 6.0) 6431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 6531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (h != 7.0) 6631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 6731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (i != 8.0) 6831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 6931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (j != 9.0) 7031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 7131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh 7231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (a1 != 0.0) 7331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 7431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (b1 != 1.0) 7531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 7631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (c1 != 2.0) 7731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 7831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (d1 != 3.0) 7931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 8031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (e1 != 4.0) 8131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 8231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (f1 != 5.0) 8331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 8431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (g1 != 6.0) 8531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 8631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (h1 != 7.0) 8731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 8831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (i1 != 8.0) 8931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 9031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh if (j1 != 9.0) 9131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh abort (); 9231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh } 9331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh return 0; 9431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh} 95