blob: 76db20ef67cc9fc5d1fb11d4c3cc201577033348 [file] [log] [blame]
/* { dg-do run } */
/* { dg-options "-fno-omit-frame-pointer" } */
/* { dg-require-effective-target alloca } */
#define alloca __builtin_alloca
extern void abort (void);
__attribute__ ((noinline)) static double
bar (double a, double b, double c, double d, char *h)
{
*h = 0;
return a * b + b + c;
}
__attribute__ ((noinline)) static int
boo (double a, double b, double c, double d)
{
return c * b + a + b;
}
__attribute__ ((noinline)) static double
foo (double a, double b, double c, double d)
{
int aa = boo (b, c, d, a);
return bar (a, b, c, d, (char *) alloca (aa))
+ bar (d, c, b, a, (char *) alloca (aa));
}
int main ()
{
double a = 2.0, b = 3.0, c = 4.0, d = 5.0;
double r1, r2;
int aa;
aa = boo (b, c, d, a);
r1 = bar (a, b, c, d, (char *) alloca (aa))
+ bar (d, c, b, a, (char *) alloca (aa));
r2 = foo (a, b, c, d);
if (r1 != r2)
abort ();
return 0;
}