/* This test case used to abort due to a reload bug with
   elimination offsets.  */

/* { dg-do run } */
/* { dg-options "-O2 -mpacked-stack" } */

extern void abort (void);

double bar (double) __attribute__ ((noinline));
double bar (double x) { return x; }

double
foo (int j, double f0, double f2, double f4, double f6, double x) __attribute__ ((noinline));

double
foo (int j, double f0, double f2, double f4, double f6, double x)
{
  if (j)
    return bar (x) + 4.0;
  else
    return bar (x);
}

int
main (void)
{
  if (foo (0, 0, 0, 0, 0, 10) != 10)
    abort ();
  if (foo (1, 0, 0, 0, 0, 10) != 14)
    abort ();

  return 0;
}

