[bootstrap-O3,fortran] silence warning in simplify_transformation_to_array

Jakub Jelinek jakub@redhat.com
Fri Jan 6 10:21:00 GMT 2017


On Fri, Jan 06, 2017 at 09:34:46AM +0100, Christophe Lyon wrote:
> I makes my aarch64*linux* and arm*linux* builds for fail, because:
> gcc/fortran/simplify.c:613: error: #pragma GCC diagnostic not allowed
> inside functions
> gcc/fortran/simplify.c:620: error: #pragma GCC diagnostic not allowed
> inside functions
> gcc/fortran/simplify.c:624: error: #pragma GCC diagnostic not allowed
> inside functions
> 
> My host compiler is RHEL6's, that is 4.4.7....
> 
> I'm not sure what current minimum gcc version is required to build gcc?

So, do we want something like (untested) following patch then, so that we
use the pragmas only on recent GCC versions?

2017-01-06  Jakub Jelinek  <jakub@redhat.com>

	* system.h (GCC_DIAGNOSTIC_PUSH_IGNORED, GCC_DIAGNOSTIC_POP,
	GCC_DIAGNOSTIC_STRINGIFY): Define.

	* simplify.c (simplify_transformation_to_array): Use
	GCC_DIAGNOSTIC_PUSH_IGNORED and GCC_DIAGNOSTIC_POP instead of
	#pragma GCC diagnostic {push,ignored,pop}.

--- gcc/system.h.jj	2017-01-01 12:45:36.000000000 +0100
+++ gcc/system.h	2017-01-06 11:14:02.576406680 +0100
@@ -1140,6 +1140,18 @@ helper_const_non_const_cast (const char
 #define VALGRIND_FREELIKE_BLOCK(x,y)
 #endif
 
+/* Macros to temporarily ignore some warnings.  */
+#if GCC_VERSION >= 6000
+#define GCC_DIAGNOSTIC_STRINGIFY(x) #x
+#define GCC_DIAGNOSTIC_PUSH_IGNORED(x) \
+  _Pragma ("GCC diagnostic push") \
+  _Pragma (GCC_DIAGNOSTIC_STRINGIFY (GCC diagnostic ignored #x))
+#define GCC_DIAGNOSTIC_POP _Pragma ("GCC diagnostic pop")
+#else
+#define GCC_DIAGNOSTIC_PUSH_IGNORED(x)
+#define GCC_DIAGNOSTIC_POP
+#endif
+
 /* In LTO -fwhole-program build we still want to keep the debug functions available
    for debugger.  Mark them as used to prevent removal.  */
 #if (GCC_VERSION > 4000)
--- gcc/fortran/simplify.c.jj	2017-01-06 09:23:31.000000000 +0100
+++ gcc/fortran/simplify.c	2017-01-06 11:15:01.003630017 +0100
@@ -610,18 +610,17 @@ simplify_transformation_to_array (gfc_ex
 	  n++;
 	  if (n < result->rank)
 	    {
-#pragma GCC diagnostic push
 	      /* If the nested loop is unrolled GFC_MAX_DIMENSIONS
 		 times, we'd warn for the last iteration, because the
 		 array index will have already been incremented to the
 		 array sizes, and we can't tell that this must make
 		 the test against result->rank false, because ranks
 		 must not exceed GFC_MAX_DIMENSIONS.  */
-#pragma GCC diagnostic ignored "-Warray-bounds"
+	      GCC_DIAGNOSTIC_PUSH_IGNORED (-Warray-bounds)
 	      count[n]++;
 	      base += sstride[n];
 	      dest += dstride[n];
-#pragma GCC diagnostic pop
+	      GCC_DIAGNOSTIC_POP
 	    }
 	  else
 	    done = true;

	Jakub



More information about the Gcc-patches mailing list