From 3c7d03129498e7426855b5d4cdd5b7109ecc2172 Mon Sep 17 00:00:00 2001 From: Wilco Dijkstra Date: Wed, 3 Jan 2018 13:14:10 +0000 Subject: Improve math_errhandling Currently math_errhandling is always set to MATH_ERRNO | MATH_ERREXCEPT even if -fno-math-errno is used. It is not defined at all when fast-math is used. Set it to 0 with fast-math - this is noncomforming but more useful than not define math_errhandling at all. Also take __NO_MATH_ERRNO__ into account and update comment. * math/math.h (math_errhandling): Set to 0 with __FAST_MATH__. Add __NO_MATH_ERRNO__ check. --- math/math.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'math/math.h') diff --git a/math/math.h b/math/math.h index 633681e..3c515f8 100644 --- a/math/math.h +++ b/math/math.h @@ -665,10 +665,16 @@ enum # define MATH_ERRNO 1 /* errno set by math functions. */ # define MATH_ERREXCEPT 2 /* Exceptions raised by math functions. */ -/* By default all functions support both errno and exception handling. - In gcc's fast math mode and if inline functions are defined this - might not be true. */ -# ifndef __FAST_MATH__ +/* By default all math functions support both errno and exception handling + (except for soft floating point implementations which may only support + errno handling). If errno handling is disabled, exceptions are still + supported by GLIBC. Set math_errhandling to 0 with -ffast-math (this is + nonconforming but it is more useful than leaving it undefined). */ +# ifdef __FAST_MATH__ +# define math_errhandling 0 +# elif defined __NO_MATH_ERRNO__ +# define math_errhandling (MATH_ERREXCEPT) +# else # define math_errhandling (MATH_ERRNO | MATH_ERREXCEPT) # endif -- cgit v1.1