aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-11-07 10:00:31 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-11-07 10:00:31 +0000
commiteb0b164e5f7b8fff929e73fdd0a15a6d769ebc1c (patch)
treeeef9290cacb79e93abde57c6839883342556a4e9
parent02b7230d3cbfb2208dd723dcd3fd84ba74678004 (diff)
downloadgcc-eb0b164e5f7b8fff929e73fdd0a15a6d769ebc1c.zip
gcc-eb0b164e5f7b8fff929e73fdd0a15a6d769ebc1c.tar.gz
gcc-eb0b164e5f7b8fff929e73fdd0a15a6d769ebc1c.tar.bz2
Don't treat rint as setting errno
builtins.def says that rint sets errno, but it looks like this might be a mistake. C99 says that rint doesn't set errno and the builtins.c expansion code doesn't try to keep errno up to date. Perhaps this was because earlier versions of POSIX said that rint sets errno on overflow: http://pubs.opengroup.org/onlinepubs/009695399/functions/rintf.html However, this is another instance of the observation that "rounding functions could never overflow" (because anything using exponents that large is already integral). The page above also says that differences with C99 are unintentional and the ERANGE clause has been removed from later versions of POSIX: http://pubs.opengroup.org/onlinepubs/9699919799/functions/rint.html Also, the version of POSIX that lists ERANGE for rint does the same for nearbyint: http://pubs.opengroup.org/onlinepubs/009695399/functions/nearbyintf.html and we already treat nearbyint as not setting errno. This too has been clarified in later versions of POSIX: http://pubs.opengroup.org/onlinepubs/9699919799/functions/nearbyint.html Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi. gcc/ * builtins.def (BUILTIN_RINT, BUILTIN_RINTF, BUILTIN_RINTL): Use ATTR_MATHFN_FPROUNDING rather than ATTR_MATHFN_FPROUNDING_ERRNO. From-SVN: r229918
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/builtins.def6
2 files changed, 8 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6e7ab8e..41ed630 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2015-11-07 Richard Sandiford <richard.sandiford@arm.com>
+ * builtins.def (BUILTIN_RINT, BUILTIN_RINTF, BUILTIN_RINTL): Use
+ ATTR_MATHFN_FPROUNDING rather than ATTR_MATHFN_FPROUNDING_ERRNO.
+
+2015-11-07 Richard Sandiford <richard.sandiford@arm.com>
+
* tree-call-cdce.c (shrink_wrap_one_built_in_call): Try to update
the dominance info; free it if we can't.
(pass_call_cdce::execute): Don't free the dominance info here.
diff --git a/gcc/builtins.def b/gcc/builtins.def
index 886b45c..076da40 100644
--- a/gcc/builtins.def
+++ b/gcc/builtins.def
@@ -475,9 +475,9 @@ DEF_C99_BUILTIN (BUILT_IN_REMAINDERL, "remainderl", BT_FN_LONGDOUBLE_LONG
DEF_C99_BUILTIN (BUILT_IN_REMQUO, "remquo", BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
DEF_C99_BUILTIN (BUILT_IN_REMQUOF, "remquof", BT_FN_FLOAT_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
DEF_C99_BUILTIN (BUILT_IN_REMQUOL, "remquol", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_BUILTIN (BUILT_IN_RINT, "rint", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN (BUILT_IN_RINTF, "rintf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN (BUILT_IN_RINTL, "rintl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN (BUILT_IN_RINT, "rint", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN (BUILT_IN_RINTF, "rintf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN (BUILT_IN_RINTL, "rintl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
DEF_C99_BUILTIN (BUILT_IN_ROUND, "round", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_C99_BUILTIN (BUILT_IN_ROUNDF, "roundf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_C99_BUILTIN (BUILT_IN_ROUNDL, "roundl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)