diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 4fd84ff2c..2be47231f 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,9 @@
+2012-08-08  Eric Blake  <eblake@redhat.com>
+
+	* libc/posix/engine.c(dissect): Guard diagnostic pragma for right
+	versions of GCC only.
+	* libc/string/strcasestr.c: Ditto.
+
 2012-08-08  Corinna Vinschen  <vinschen@redhat.com>
 
 	Throughout, run newlib with -Wall -Werror option and fix bugs and
@@ -17,10 +23,10 @@
 	* libc/posix/collate.c: Throughout cast to avoid compiler warning.
 	* libc/posix/engine.c (matcher): Initialize dp to avoid compiler
 	warning.
-	* libc/posix/glob.c: Disable on Cygwin.  Explain why.
-	* libc/posix/regcomp.c: Fix "uninitialized" compiler warnings.
 	(dissect): Deliberately silence gcc compiler warning.  Add comment to
 	explain why.
+	* libc/posix/glob.c: Disable on Cygwin.  Explain why.
+	* libc/posix/regcomp.c: Fix "uninitialized" compiler warnings.
 	* libc/posix/wordexp.c (wordexp): Remove num_bytes variable since result
 	is never used.
 	* libc/posix/popen.c (popen): Ditto for variable last.
diff --git a/newlib/libc/posix/engine.c b/newlib/libc/posix/engine.c
index 5956e2747..73ce45c11 100644
--- a/newlib/libc/posix/engine.c
+++ b/newlib/libc/posix/engine.c
@@ -364,9 +364,12 @@ sopno stopst;
 	char *ssp;		/* start of string matched by subsubRE */
 	char *sep;		/* end of string matched by subsubRE */
 	char *oldssp;		/* previous ssp */
+#if defined (__GNUC__) && \
+    ((__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || __GNUC__ > 4)
 /* dp is only used for assertion testing which, for some reason, is not
    recognized as usage. */
 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 	char *dp;
 
 	AT("diss", start, stop, startst, stopst);
diff --git a/newlib/libc/string/strcasestr.c b/newlib/libc/string/strcasestr.c
index 8ff91fdd8..91783164c 100644
--- a/newlib/libc/string/strcasestr.c
+++ b/newlib/libc/string/strcasestr.c
@@ -84,8 +84,11 @@ QUICKREF
   (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l))	\
    && ((h_l) = (j) + (n_l)))
 # define CANON_ELEMENT(c) tolower (c)
+#if defined (__GNUC__) && \
+    ((__GNUC__ == 4 && __GNUC_MINOR__ >= 2) || __GNUC__ > 4)
 /* strncasecmp uses signed char, CMP_FUNC is expected to use unsigned char. */
 #pragma GCC diagnostic ignored "-Wpointer-sign"
+#endif
 # define CMP_FUNC strncasecmp
 # include "str-two-way.h"
 #endif