GNU bug report logs - #12381
Assume C89 or later for math functions.

Previous Next

Package: emacs;

Reported by: Paul Eggert <eggert <at> cs.ucla.edu>

Date: Fri, 7 Sep 2012 20:24:01 UTC

Severity: normal

Tags: patch

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: 12381 <at> debbugs.gnu.org
Subject: bug#12381: Assume C89 or later for math functions.
Date: Sat, 08 Sep 2012 10:07:55 +0300
> Date: Fri, 07 Sep 2012 13:22:38 -0700
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> CC: Eli Zaretskii <eliz <at> gnu.org>
> 
> In doing signal-handling cleanup I ran afoul of a lot of crufty old
> floating-point code that hasn't been needed in Emacs for many years.
> Since it's getting in the way of improving Emacs I plan to install
> the following patch to clean out the cruft.  I don't think this
> affects the Windows port but am CC'ing to Eli just in case.

You missed msdos/*.inp scripts.  sed2v2.inp does define
FLOAT_CHECK_DOMAIN for the MSDOS port (although I'm not sure the DOS
port needs this nowadays, see below).

> +2012-09-07  Paul Eggert  <eggert <at> cs.ucla.edu>
> +
> +	Assume C89 or later for math functions.
> +	This simplifies the code, and makes it a bit smaller and faster,
> +	and (most important) makes it easier to clean up signal handling
> +	since we can stop worring about floating-point exceptions in
> +	library code.  That was a problem before C89, but the problem
> +	went away many years ago on all practical Emacs targets.
> +	* data.c, image.c, lread.c, print.c:
> +	Don't include <math.h>; no longer needed.
> +	* data.c, floatfns.c (IEEE_FLOATING_POINT): Don't worry that it
> +	might be autoconfigured, as that never happens.
> +	* data.c (fmod):
> +	* doprnt.c (DBL_MAX_10_EXP):
> +	* print.c (DBL_DIG):
> +	Remove.  C89 or later always defines these.
> +	* floatfns.c (HAVE_MATHERR, FLOAT_CHECK_ERRNO, FLOAT_CHECK_DOMAIN)
> +	(in_float, float_error_arg, float_error_arg2, float_error_fn_name)
> +	(arith_error, domain_error, domain_error2):
> +	Remove all this pre-C89 cruft.  Do not include <errno.h> as that's
> +	no longer needed -- we simply return what C returns.  All uses removed.
> +	(IN_FLOAT, IN_FLOAT2): Remove.  All uses replaced with
> +	the wrapped code.
> +	(FLOAT_TO_INT, FLOAT_TO_INT2, range_error, range_error2):
> +	Remove.  All uses expanded, as these macros are no longer used
> +	more than once and are now more trouble than they're worth.
> +	(Ftan): Use tan, not sin / cos.
> +	(Flogb): Assume C89 frexp.
> +	(fmod_float): Assume C89 fmod.
> +	(matherr) [HAVE_MATHERR]: Remove; no longer needed.
> +	(init_floatfns): Remove.  All uses removed.

I think we should discuss this first.  Issues that I consider
non-trivial are:

 . Are we sure all supported systems implement the math functions as
   assumed by this patch?  I'd suggest reviewing the results of
   running the configure script on *BSD systems, on AIX, and on old
   Solaris, before making the decision.

 . Do we really want to remove a possibility of signaling an error on
   EDOM and ERANGE?  Right now, this is a configure-time option, but
   the proposed patch removes it forever.  (For that matter, is it TRT
   for Emacs to silently continue with HUGE_VAL etc., disregarding
   errors in math functions?)

 . The pieces related to 'matherr' might still be needed on platforms
   which provide that function.  I don't remember the details, but
   AFAIR the default version of that function may print an error
   message, which I think we need to prevent.

 . Last, but not least: what exactly does the patch assume about the
   math library functions?  Those assumptions are not spelled out in
   the log entries; without them, it's hard to reason about the
   possible implications of the change.  E.g., the log entry says "we
   can stop worrying about floating-point exceptions in library code",
   but AFAIK you _can_ build a C89 program that will generate SIGFPE
   in library functions.  Maybe I don't understand what exactly is
   meant by "floating-point exceptions".




This bug report was last modified 12 years and 259 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.