/* Check that conversion functions link correctly with -ffast-math.  */

/* { dg-do link } */
/* { dg-options "-ffast-math -lm" }  */
/* Bionic doesn't have rintl */
/* { dg-require-effective-target non_bionic } */

#include "builtins-config.h"

double floor (double);
float floorf (float);
long double floorl (long double);

double ceil (double);
float ceilf (float);
long double ceill (long double);

double round (double);
float roundf (float);
long double roundl (long double);

double rint (double);
float rintf (float);
long double rintl (long double);

int ifloor (double a) { return (int) floor (a); }
#ifdef HAVE_C99_RUNTIME
int ifloorf (float a) { return (int) floorf (a); }
int ifloorl (long double a) { return (int) floorl (a); }
#endif

long lfloor (double a) { return (long) floor (a); }
#ifdef HAVE_C99_RUNTIME
long lfloorf (float a) { return (long) floorf (a); }
long lfloorl (long double a) { return (long) floorl (a); }
#endif

long long llfloor (double a) { return (long long) floor (a); }
#ifdef HAVE_C99_RUNTIME
long long llfloorf (float a) { return (long long) floorf (a); }
long long llfloorl (long double a) { return (long long) floorl (a); }
#endif

int iceil (double a) { return (int) ceil (a); }
#ifdef HAVE_C99_RUNTIME
int iceilf (float a) { return (int) ceilf (a); }
int iceill (long double a) { return (int) ceill (a); }
#endif

long lceil (double a) { return (long) ceil (a); }
#ifdef HAVE_C99_RUNTIME
long lceilf (float a) { return (long) ceilf (a); }
long lceill (long double a) { return (long) ceill (a); }
#endif

long long llceil (double a) { return (long long) ceil (a); }
#ifdef HAVE_C99_RUNTIME
long long llceilf (float a) { return (long long) ceilf (a); }
long long llceill (long double a) { return (long long) ceill (a); }
#endif

#ifdef HAVE_C99_RUNTIME
int iround (double a) { return (int) round (a); }
int iroundf (float a) { return (int) roundf (a); }
int iroundl (long double a) { return (int) roundl (a); }
#endif

#ifdef HAVE_C99_RUNTIME
int irint (double a) { return (int) rint (a); }
int irintf (float a) { return (int) rintf (a); }
int irintl (long double a) { return (int) rintl (a); }
#endif

int main () { return 0; }
