diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | lib/ftoastr.h | 17 | ||||
-rw-r--r-- | src/ChangeLog | 8 | ||||
-rw-r--r-- | src/alloc.c | 1 | ||||
-rw-r--r-- | src/conf_post.h | 5 | ||||
-rw-r--r-- | src/lisp.h | 2 |
7 files changed, 32 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog index 3789203527c..30561d6ac13 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2014-05-30 Paul Eggert <eggert@cs.ucla.edu> + + Fix port to 32-bit AIX with xlc (Bug#17598). + This doesn't fix Bug#17598, but it does fix a regression since Emacs + built with xlc until recently, and perhaps it'll help us fix Bug#17598. + * configure.ac (GC_SETJMP_WORKS): Define for AIX, too. + Merge from gnulib, incorporating: + 2014-05-30 ftoastr: work around compiler bug in IBM xlc 12.1 + * lib/ftoastr.c: Update from gnulib. + 2014-05-22 Paul Eggert <eggert@cs.ucla.edu> Fix port to 32-bit AIX (Bug#17540). diff --git a/configure.ac b/configure.ac index 0f4351fcd5d..3de3cb97c04 100644 --- a/configure.ac +++ b/configure.ac @@ -4380,7 +4380,7 @@ if test x$GCC = xyes; then else case $opsys in dnl irix: Tested on Irix 6.5. SCM worked on earlier versions. - dragonfly | freebsd | netbsd | openbsd | irix6-5 | sol2* ) + aix* | dragonfly | freebsd | netbsd | openbsd | irix6-5 | sol2* ) AC_DEFINE(GC_SETJMP_WORKS, 1) ;; esac diff --git a/lib/ftoastr.h b/lib/ftoastr.h index 6236292d9d9..26cad7369ce 100644 --- a/lib/ftoastr.h +++ b/lib/ftoastr.h @@ -72,12 +72,13 @@ enum /* _GL_FLT_PREC_BOUND is an upper bound on the precision needed to represent a float value without losing information. Likewise for - _GL_DBL_PREC_BOUND and double, and _GL_LDBL_PREC_BOUND and long double. */ + _GL_DBL_PREC_BOUND and double, and _GL_LDBL_PREC_BOUND and long double. + These are macros, not enums, to work around a bug in IBM xlc 12.1. */ #if FLT_RADIX == 10 /* decimal floating point */ - enum { _GL_FLT_PREC_BOUND = FLT_MANT_DIG }; - enum { _GL_DBL_PREC_BOUND = DBL_MANT_DIG }; - enum { _GL_LDBL_PREC_BOUND = LDBL_MANT_DIG }; +# define _GL_FLT_PREC_BOUND FLT_MANT_DIG +# define _GL_DBL_PREC_BOUND DBL_MANT_DIG +# define _GL_LDBL_PREC_BOUND LDBL_MANT_DIG #else /* An upper bound on the number of bits needed to represent a single @@ -95,13 +96,13 @@ enum DIG digits. For why the "+ 1" is needed, see "Binary to Decimal Conversion" in David Goldberg's paper "What Every Computer Scientist Should Know About Floating-Point Arithmetic" - <http://docs.sun.com/source/806-3568/ncg_goldberg.html>. */ + <http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html>. */ # define _GL_FLOAT_PREC_BOUND(dig) \ (INT_BITS_STRLEN_BOUND ((dig) * _GL_FLOAT_DIG_BITS_BOUND) + 1) - enum { _GL_FLT_PREC_BOUND = _GL_FLOAT_PREC_BOUND ( FLT_MANT_DIG) }; - enum { _GL_DBL_PREC_BOUND = _GL_FLOAT_PREC_BOUND ( DBL_MANT_DIG) }; - enum { _GL_LDBL_PREC_BOUND = _GL_FLOAT_PREC_BOUND (LDBL_MANT_DIG) }; +# define _GL_FLT_PREC_BOUND _GL_FLOAT_PREC_BOUND ( FLT_MANT_DIG) +# define _GL_DBL_PREC_BOUND _GL_FLOAT_PREC_BOUND ( DBL_MANT_DIG) +# define _GL_LDBL_PREC_BOUND _GL_FLOAT_PREC_BOUND (LDBL_MANT_DIG) #endif diff --git a/src/ChangeLog b/src/ChangeLog index a07daee1669..522f1ad965a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2014-05-30 Paul Eggert <eggert@cs.ucla.edu> + + Fix port to 32-bit AIX with xlc (Bug#17598). + * alloc.c (gdb_make_enums_visible): Remove FLOAT_TO_STRING_BUFSIZE. + * conf_post.h (FLEXIBLE_ARRAY_MEMBER) [__IBMC__]: Don't define to empty. + * lisp.h (FLOAT_TO_STRING_BUFSIZE): Make it a macro, instead of an enum, + to work around a compiler bug in IBM xlc 12.1. + 2014-05-29 Eli Zaretskii <eliz@gnu.org> * xterm.c (x_update_window_end): Don't invalidate the entire diff --git a/src/alloc.c b/src/alloc.c index ccb955a547b..12b3d4ba165 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -7003,7 +7003,6 @@ union enum CHECK_LISP_OBJECT_TYPE CHECK_LISP_OBJECT_TYPE; enum DEFAULT_HASH_SIZE DEFAULT_HASH_SIZE; enum enum_USE_LSB_TAG enum_USE_LSB_TAG; - enum FLOAT_TO_STRING_BUFSIZE FLOAT_TO_STRING_BUFSIZE; enum Lisp_Bits Lisp_Bits; enum Lisp_Compiled Lisp_Compiled; enum maxargs maxargs; diff --git a/src/conf_post.h b/src/conf_post.h index 312f2389415..446c8275613 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -297,8 +297,9 @@ extern void _DebPrint (const char *fmt, ...); /* To use the struct hack with N elements, declare the struct like this: struct s { ...; t name[FLEXIBLE_ARRAY_MEMBER]; }; - and allocate (offsetof (struct s, name) + N * sizeof (t)) bytes. */ -#if 199901 <= __STDC_VERSION__ + and allocate (offsetof (struct s, name) + N * sizeof (t)) bytes. + IBM xlc 12.1 claims to do C99 but mishandles flexible array members. */ +#if 199901 <= __STDC_VERSION__ && !defined __IBMC__ # define FLEXIBLE_ARRAY_MEMBER #elif __GNUC__ && !defined __STRICT_ANSI__ # define FLEXIBLE_ARRAY_MEMBER 0 diff --git a/src/lisp.h b/src/lisp.h index af54887a51a..a92d7694a3b 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3815,7 +3815,7 @@ extern void print_error_message (Lisp_Object, Lisp_Object, const char *, Lisp_Object); extern Lisp_Object internal_with_output_to_temp_buffer (const char *, Lisp_Object (*) (Lisp_Object), Lisp_Object); -enum FLOAT_TO_STRING_BUFSIZE { FLOAT_TO_STRING_BUFSIZE = 350 }; +#define FLOAT_TO_STRING_BUFSIZE 350 extern int float_to_string (char *, double); extern void init_print_once (void); extern void syms_of_print (void); |