[PATCH] Fix gimple_check_failed with non-GCC compilers (PR bootstrap/38100)

Jakub Jelinek jakub@redhat.com
Thu Nov 13 15:06:00 GMT 2008


Hi!

GCC failed to build with gimple checking enabled when using non-gcc
bootstrap compiler.  The problem is that GIMPLE_CHECK macro
non-empty defintion was guarded just by #ifdef ENABLE_GIMPLE_CHECKING,
but gimple_check_failed function definition with additional
GCC_VERSION >= 2007.  I guess that this is copy&paste from tree.c
where e.g. tree_check_failed is guarded by that.  The difference
is that GIMPLE_CHECK macro doesn't return value and so doesn't need
a statement expression GCC extension.

The following patch fixes that and additionally removes an unused
gimple_range_check_failed - there are far fewer GIMPLE codes than
tree codes and I think it is not very likely we'll need a range
checking for them any time soon.

Bootstrapped/regtested on x86_64-linux, committed to trunk.

2008-11-13  Jakub Jelinek  <jakub@redhat.com>

	PR bootstrap/38100
	* gimple.h (gimple_range_check_failed): Remove prototype.
	* gimple.c (gimple_check_failed): Don't check GCC_VERSION
	in guarding #if.
	(gimple_range_check_failed): Removed.

--- gcc/gimple.c.jj	2008-10-23 13:21:41.000000000 +0200
+++ gcc/gimple.c	2008-11-13 09:45:45.000000000 +0100
@@ -1100,7 +1100,7 @@ gimple_statement_structure (gimple gs)
   return gss_for_code (gimple_code (gs));
 }
 
-#if defined ENABLE_GIMPLE_CHECKING && (GCC_VERSION >= 2007)
+#if defined ENABLE_GIMPLE_CHECKING
 /* Complain of a gimple type mismatch and die.  */
 
 void
@@ -1117,41 +1117,6 @@ gimple_check_failed (const_gimple gs, co
 		    : "",
 		  function, trim_filename (file), line);
 }
-
-
-/* Similar to gimple_check_failed, except that instead of specifying a
-   dozen codes, use the knowledge that they're all sequential.  */
-
-void
-gimple_range_check_failed (const_gimple gs, const char *file, int line,
-		           const char *function, enum gimple_code c1,
-		           enum gimple_code c2)
-{
-  char *buffer;
-  unsigned length = 0;
-  enum gimple_code c;
-
-  for (c = c1; c <= c2; ++c)
-    length += 4 + strlen (gimple_code_name[c]);
-
-  length += strlen ("expected ");
-  buffer = XALLOCAVAR (char, length);
-  length = 0;
-
-  for (c = c1; c <= c2; ++c)
-    {
-      const char *prefix = length ? " or " : "expected ";
-
-      strcpy (buffer + length, prefix);
-      length += strlen (prefix);
-      strcpy (buffer + length, gimple_code_name[c]);
-      length += strlen (gimple_code_name[c]);
-    }
-
-  internal_error ("gimple check: %s, have %s in %s, at %s:%d",
-		  buffer, gimple_code_name[gimple_code (gs)],
-		  function, trim_filename (file), line);
-}
 #endif /* ENABLE_GIMPLE_CHECKING */
 
 
--- gcc/gimple.h.jj	2008-10-23 13:21:41.000000000 +0200
+++ gcc/gimple.h	2008-11-13 09:45:54.000000000 +0100
@@ -59,9 +59,6 @@ extern const unsigned char gimple_rhs_cl
 extern void gimple_check_failed (const_gimple, const char *, int,          \
                                  const char *, enum gimple_code,           \
 				 enum tree_code) ATTRIBUTE_NORETURN;
-extern void gimple_range_check_failed (const_gimple, const char *, int,    \
-                                       const char *, enum gimple_code,     \
-				       enum gimple_code) ATTRIBUTE_NORETURN;
 
 #define GIMPLE_CHECK(GS, CODE)						\
   do {									\

	Jakub



More information about the Gcc-patches mailing list