1/* PR target/12865 */ 2/* Origin: Waldek Hebisch <hebisch@math.uni.wroc.pl> */ 3 4/* { dg-do run } */ 5/* { dg-options "-O2" } */ 6 7/* This used to fail on various versions of Solaris 2 because the 8 trampoline couldn't be made executable. */ 9 10extern void abort(void); 11extern double fabs(double); 12 13void foo (void) 14{ 15 const int correct[1100] = {1, 0, -2, 0, 1, 0, 1, -1, -10, -30, -67}; 16 int i; 17 18 double x1 (void) {return 1; } 19 double x2 (void) {return -1;} 20 double x3 (void) {return -1;} 21 double x4 (void) {return 1; } 22 double x5 (void) {return 0; } 23 24 typedef double pfun(void); 25 26 double a (int k, pfun x1, pfun x2, pfun x3, pfun x4, pfun x5) 27 { 28 double b (void) 29 { 30 k = k - 1; 31 return a (k, b, x1, x2, x3, x4 ); 32 } 33 34 if (k <= 0) 35 return x4 () + x5 (); 36 else 37 return b (); 38 } 39 40 for (i=0; i<=10; i++) 41 { 42 if (fabs(a( i, x1, x2, x3, x4, x5 ) - correct [i]) > 0.1) 43 abort(); 44 } 45} 46 47int main (void) 48{ 49 foo (); 50 return 0; 51} 52