From 3e71e4379ce7b53afe51ead4c94e6bb016bc6e7a Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 20 Jul 2016 10:31:33 +0200 Subject: [PATCH] Work around GCC bug 54561 in a better way The new approach is less selective, but also less intrusive on C code. * src/bytecode.c, src/image.c, src/keyboard.c: Ignore -Wclobbered. * src/conf_post.h (NONVOLATILE): Remove. All uses removed. --- src/bytecode.c | 5 +++++ src/conf_post.h | 9 --------- src/image.c | 13 ++++++++----- src/keyboard.c | 7 ++++++- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/bytecode.c b/src/bytecode.c index bb7922d54a..1b02c60c61 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -32,6 +32,11 @@ along with GNU Emacs. If not, see . */ #include "xterm.h" #endif +/* Work around GCC bug 54561. */ +#if GNUC_PREREQ (4, 3, 0) +# pragma GCC diagnostic ignored "-Wclobbered" +#endif + /* * define BYTE_CODE_SAFE to enable some minor sanity checking (useful for * debugging the byte compiler...) diff --git a/src/conf_post.h b/src/conf_post.h index 99aafbffae..865d0183a5 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -368,15 +368,6 @@ extern int emacs_setenv_TZ (char const *); # define FLEXIBLE_ARRAY_MEMBER #endif -/* When used in place of 'volatile', 'NONVOLATILE' is equivalent to nothing, - except it cajoles GCC into not warning incorrectly that a variable needs to - be volatile. This works around GCC bug 54561. */ -#if defined GCC_LINT || defined lint -# define NONVOLATILE volatile -#else -# define NONVOLATILE /* empty */ -#endif - /* 'int x UNINIT;' is equivalent to 'int x;', except it cajoles GCC into not warning incorrectly about use of an uninitialized variable. */ #if defined GCC_LINT || defined lint diff --git a/src/image.c b/src/image.c index 572557dd26..1770de7e8f 100644 --- a/src/image.c +++ b/src/image.c @@ -56,6 +56,11 @@ along with GNU Emacs. If not, see . */ #include TERM_HEADER #endif /* HAVE_WINDOW_SYSTEM */ +/* Work around GCC bug 54561. */ +#if GNUC_PREREQ (4, 3, 0) +# pragma GCC diagnostic ignored "-Wclobbered" +#endif + #ifdef HAVE_X_WINDOWS typedef struct x_bitmap_record Bitmap_Record; #define GET_PIXEL(ximg, x, y) XGetPixel (ximg, x, y) @@ -5897,9 +5902,8 @@ struct png_load_context static bool png_load_body (struct frame *f, struct image *img, struct png_load_context *c) { - Lisp_Object specified_file; - Lisp_Object NONVOLATILE specified_data; - FILE *NONVOLATILE fp = NULL; + Lisp_Object specified_file, specified_data; + FILE *fp = NULL; int x, y; ptrdiff_t i; png_struct *png_ptr; @@ -6669,8 +6673,7 @@ static bool jpeg_load_body (struct frame *f, struct image *img, struct my_jpeg_error_mgr *mgr) { - Lisp_Object specified_file; - Lisp_Object NONVOLATILE specified_data; + Lisp_Object specified_file, specified_data; FILE *volatile fp = NULL; JSAMPARRAY buffer; int row_stride, x, y; diff --git a/src/keyboard.c b/src/keyboard.c index 653f52732a..8901ff055e 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -70,6 +70,11 @@ along with GNU Emacs. If not, see . */ #include TERM_HEADER #endif /* HAVE_WINDOW_SYSTEM */ +/* Work around GCC bug 54561. */ +#if GNUC_PREREQ (4, 3, 0) +# pragma GCC diagnostic ignored "-Wclobbered" +#endif + /* Variables for blockinput.h: */ /* Positive if interrupt input is blocked right now. */ @@ -2320,7 +2325,7 @@ read_char (int commandflag, Lisp_Object map, Lisp_Object prev_event, bool *used_mouse_menu, struct timespec *end_time) { - Lisp_Object NONVOLATILE c; + Lisp_Object c; ptrdiff_t jmpcount; sys_jmp_buf local_getcjmp; sys_jmp_buf save_jump; -- 2.39.2