diff options
Diffstat (limited to 'math/test-tgmath-ret.c')
-rw-r--r-- | math/test-tgmath-ret.c | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/math/test-tgmath-ret.c b/math/test-tgmath-ret.c index d7bcb5c1b2..8ab718074f 100644 --- a/math/test-tgmath-ret.c +++ b/math/test-tgmath-ret.c @@ -20,11 +20,14 @@ #include <math.h> #include <complex.h> #include <tgmath.h> +#include <stdint.h> #include <stdio.h> static float fx; static double dx; static long double lx; +static int rm = FP_INT_UPWARD; +static unsigned int width = 64; static int errors = 0; static void @@ -36,28 +39,28 @@ our_error (const char *c) /* First function where the return type is constant. */ -#define CHECK_RET_CONST_TYPE(func, rettype, arg, name) \ - if (sizeof (func (arg)) != sizeof (rettype)) \ +#define CHECK_RET_CONST_TYPE(func, rettype, arg, name, ...) \ + if (sizeof (func (arg, ## __VA_ARGS__)) != sizeof (rettype)) \ our_error ("Return size of " #func " is wrong with " #name " argument"); -#define CHECK_RET_CONST_FLOAT(func, rettype) \ - CHECK_RET_CONST_TYPE (func, rettype, fx, float) -#define CHECK_RET_CONST_DOUBLE(func, rettype) \ - CHECK_RET_CONST_TYPE (func, rettype, dx, double) +#define CHECK_RET_CONST_FLOAT(func, rettype, ...) \ + CHECK_RET_CONST_TYPE (func, rettype, fx, float, ## __VA_ARGS__) +#define CHECK_RET_CONST_DOUBLE(func, rettype, ...) \ + CHECK_RET_CONST_TYPE (func, rettype, dx, double, ## __VA_ARGS__) #ifdef NO_LONG_DOUBLE -# define CHECK_RET_CONST_LDOUBLE(func, rettype) +# define CHECK_RET_CONST_LDOUBLE(func, rettype, ...) #else -# define CHECK_RET_CONST_LDOUBLE(func, rettype) \ - CHECK_RET_CONST_TYPE (func, rettype, lx, long double) +# define CHECK_RET_CONST_LDOUBLE(func, rettype, ...) \ + CHECK_RET_CONST_TYPE (func, rettype, lx, long double, ## __VA_ARGS__) #endif -#define CHECK_RET_CONST(func, rettype) \ -static void \ -check_return_ ##func (void) \ -{ \ - CHECK_RET_CONST_FLOAT (func, rettype) \ - CHECK_RET_CONST_DOUBLE (func, rettype) \ - CHECK_RET_CONST_LDOUBLE (func, rettype) \ +#define CHECK_RET_CONST(func, rettype, ...) \ +static void \ +check_return_ ##func (void) \ +{ \ + CHECK_RET_CONST_FLOAT (func, rettype, ## __VA_ARGS__) \ + CHECK_RET_CONST_DOUBLE (func, rettype, ## __VA_ARGS__) \ + CHECK_RET_CONST_LDOUBLE (func, rettype, ## __VA_ARGS__) \ } CHECK_RET_CONST(ilogb, int) @@ -66,6 +69,10 @@ CHECK_RET_CONST(lrint, long) CHECK_RET_CONST(lround, long) CHECK_RET_CONST(llrint, long long) CHECK_RET_CONST(llround, long long) +CHECK_RET_CONST(fromfp, intmax_t, rm, width) +CHECK_RET_CONST(ufromfp, uintmax_t, rm, width) +CHECK_RET_CONST(fromfpx, intmax_t, rm, width) +CHECK_RET_CONST(ufromfpx, uintmax_t, rm, width) static int do_test (void) @@ -76,6 +83,10 @@ do_test (void) check_return_lround (); check_return_llrint (); check_return_llround (); + check_return_fromfp (); + check_return_ufromfp (); + check_return_fromfpx (); + check_return_ufromfpx (); printf ("%Zd\n", sizeof(carg (lx))); |