blob: ad1bf76d4d20c9d9bcf882259da17643febd1512 [file] [log] [blame]
/* Different target attributes in general prevent inlining. However,
we make an exception for soft-float callers if the callee doesn't
actually use HW floating point. This is currently required for
compiling libitm. */
/* { dg-options "-Wno-attributes" } */
double g = 1.0;
/* Inlining ok here. foo1 doesn't use FP. */
int __attribute__ ((always_inline)) foo1 (int a)
{
return 0;
}
int __attribute__ ((target ("soft-float"))) test1 (int a)
{
return foo1 (a);
}
/* Inlining ok here. FP store doesn't need HW FP. */
int __attribute__ ((always_inline)) foo2 (int a)
{
g = 2.0;
return 0;
}
int __attribute__ ((target ("soft-float"))) test2 (int a)
{
return foo2 (a);
}
/* Inlining needs to be rejected. foo3 performs HW FP operation. */
int __attribute__ ((always_inline)) foo3 (int a) /* { dg-error "inlining failed in call to 'always_inline'" } */
{
g = (double) a / 2.0;
return 0;
}
int __attribute__ ((target ("soft-float"))) test3 (int a)
{
return foo3 (a);
}