summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2016-07-20 10:31:33 +0200
committerPaul Eggert <eggert@cs.ucla.edu>2016-07-20 10:32:24 +0200
commit3e71e4379ce7b53afe51ead4c94e6bb016bc6e7a (patch)
treef1a28805fc683c4b9cf712c73283ec4115fcdd75
parent63750fd4ed4ff8bb9b3ff8868d4e36e3422adb21 (diff)
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.
-rw-r--r--src/bytecode.c5
-rw-r--r--src/conf_post.h9
-rw-r--r--src/image.c13
-rw-r--r--src/keyboard.c7
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 <http://www.gnu.org/licenses/>. */
#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 <http://www.gnu.org/licenses/>. */
#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 <http://www.gnu.org/licenses/>. */
#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;