/* PR target/12865 */
/* Origin: Waldek Hebisch <hebisch@math.uni.wroc.pl> */

/* { dg-do run } */
/* APPLE LOCAL testsuite nested functions */
/* { dg-options "-O2 -fnested-functions" } */
/* APPLE LOCAL testsuite nested functions */
/* Weird, if one adds -lgcc, then it works, seems like ar isn't pulling all it needs to out of a single .a file (libgcc.a.  */
/* APPLE LOCAL ARM stack not executable */
/* { dg-skip-if "" { arm*-*-darwin* } { "*" } { "" } } */
/* This used to fail on various versions of Solaris 2 because the
   trampoline couldn't be made executable.  */

extern void abort(void);
extern double fabs(double);

void foo (void)
{
  const int correct[1100] = {1, 0, -2, 0, 1, 0, 1, -1, -10, -30, -67};
  int i;

  double x1 (void) {return 1; }
  double x2 (void) {return -1;}
  double x3 (void) {return -1;}
  double x4 (void) {return 1; }
  double x5 (void) {return 0; }

  typedef double pfun(void);

  double a (int k, pfun x1, pfun x2, pfun x3, pfun x4, pfun x5)
  {
    double b (void)
    {
      k = k - 1;
      return a (k, b, x1, x2, x3, x4 );
    }

    if (k <= 0)
      return x4 () + x5 ();
    else
      return b ();
  }

  for (i=0; i<=10; i++)
  {
    if (fabs(a( i, x1, x2, x3, x4, x5 ) - correct [i]) > 0.1)
      abort();
  }
}

int main (void)
{
  foo ();
  return 0;
}
