Patchwork RFA (middle-end): Fix PR other/44034

login
register
mail settings
Submitter Nathan Froyd
Date June 29, 2010, 8:35 p.m.
Message ID <20100629203543.GQ22606@codesourcery.com>
Download mbox | patch
Permalink /patch/57318/
State New
Headers show

Comments

Nathan Froyd - June 29, 2010, 8:35 p.m.
On Mon, Jun 28, 2010 at 03:46:08PM -0400, Joern Rennecke wrote:
> 	* target.def, doc/tm.texi.in, genhooks.c: New files.
>
> +static void
> +emit_findices (const char *doc, const char *hook_name)
> +{
> +  const char *end = strstr (doc, "\n\n");
> +  const char *fcode;
> +
> +  while ((fcode = strstr (doc, "@Fcode{")) && (!end || fcode < end))
> +    {
> +      fcode += strlen ("@Fcode{");
> +      doc = strchr (fcode, '}');
> +      if (!doc)
> +	fatal ("Malformed @Fcode for hook %s\n", hook_name);
> +      printf ("@findex %.*s\n", doc - fcode, fcode);

This construct, and others like it, cause bootstrap failures on x86-64
linux, because doc - fcode is a long and the field precision is supposed
to be an integer.  The patch below permits me to continue building, will
commit as obvious once things finish.

-Nathan

	* genhooks.c (emit_findices): Cast field precision to int.
	(emit_documentation): Likewise.

Patch

diff --git a/gcc/genhooks.c b/gcc/genhooks.c
index 66d3633..a9eecd7 100644
--- a/gcc/genhooks.c
+++ b/gcc/genhooks.c
@@ -52,7 +52,7 @@  emit_findices (const char *doc, const char *hook_name)
       doc = strchr (fcode, '}');
       if (!doc)
 	fatal ("Malformed @Fcode for hook %s\n", hook_name);
-      printf ("@findex %.*s\n", doc - fcode, fcode);
+      printf ("@findex %.*s\n", (int) (doc - fcode), fcode);
       doc = fcode;
     }
 }
@@ -238,9 +238,9 @@  emit_documentation (const char *in_fname)
 		    /* Type names like 'int' are followed by a space, sometimes
 		       also by '*'.  'void' should appear only in "(void)".  */
 		    if (*e == ' ' || *e == '*' || *q == '(')
-		      printf ("%.*s", e - q + 1, q);
+		      printf ("%.*s", (int) (e - q + 1), q);
 		    else
-		      printf ("@var{%.*s}%c", e - q, q, *e);
+		      printf ("@var{%.*s}%c", (int) (e - q), q, *e);
 		}
 	      /* POD-valued hooks sometimes come in groups with common
 		 documentation.*/
@@ -265,8 +265,8 @@  emit_documentation (const char *in_fname)
 		      /* Print paragraph, emitting @Fcode as @code.  */
 		      for (; (fcode = strstr (doc, "@Fcode{")) && fcode < p_end;
 			   doc = fcode + 2)
-			printf ("%.*s@", fcode - doc, doc);
-		      printf ("%.*s", p_end - doc, doc);
+			printf ("%.*s@", (int) (fcode - doc), doc);
+		      printf ("%.*s", (int) (p_end - doc), doc);
 		      /* Emit function indices for next paragraph.  */
 		      emit_findices (p_end, name);
 		    }