diff mbox

Make iterators and 'type' const in genmatch generated code

Message ID alpine.LSU.2.20.1707251612150.10808@zhemvz.fhfr.qr
State New
Headers show

Commit Message

Richard Biener July 25, 2017, 2:13 p.m. UTC
So a new pattern came up assigning to the iterator var of (for var (...)).
Disallow that, likewise protect 'type' (another commonly refered 
identifier).

Bootstrap / regtest pending on x86_64-unknown-linux-gnu.

Richard.

2017-07-25  Richard Biener  <rguenther@suse.de>

	* genmatch.c (dt_simplify::gen): Make iterator vars const.
	(decision_tree::gen): Make 'type' const.
	(write_predicate): Likewise.
diff mbox

Patch

Index: gcc/genmatch.c
===================================================================
--- gcc/genmatch.c	(revision 250518)
+++ gcc/genmatch.c	(working copy)
@@ -3461,11 +3483,11 @@  dt_simplify::gen (FILE *f, int indent, b
 	  if (! s->for_subst_vec[i].first->used)
 	    continue;
 	  if (is_a <operator_id *> (s->for_subst_vec[i].second))
-	    fprintf_indent (f, indent, "enum tree_code %s = %s;\n",
+	    fprintf_indent (f, indent, "const enum tree_code %s = %s;\n",
 			    s->for_subst_vec[i].first->id,
 			    s->for_subst_vec[i].second->id);
 	  else if (is_a <fn_id *> (s->for_subst_vec[i].second))
-	    fprintf_indent (f, indent, "combined_fn %s = %s;\n",
+	    fprintf_indent (f, indent, "const combined_fn %s = %s;\n",
 			    s->for_subst_vec[i].first->id,
 			    s->for_subst_vec[i].second->id);
 	  else
@@ -3601,13 +3623,13 @@  decision_tree::gen (FILE *f, bool gimple
 		 "%s (code_helper *res_code, tree *res_ops,\n"
 		 "                 gimple_seq *seq, tree (*valueize)(tree) "
 		 "ATTRIBUTE_UNUSED,\n"
-		 "                 tree ARG_UNUSED (type), tree *ARG_UNUSED "
+		 "                 const tree ARG_UNUSED (type), tree *ARG_UNUSED "
 		 "(captures)\n",
 		 s->fname);
       else
 	{
 	  fprintf (f, "\nstatic tree\n"
-		   "%s (location_t ARG_UNUSED (loc), tree ARG_UNUSED (type),\n",
+		   "%s (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),\n",
 		   (*iter).second->fname);
 	  for (unsigned i = 0;
 	       i < as_a <expr *>(s->s->s->match)->ops.length (); ++i)
@@ -3619,10 +3641,10 @@  decision_tree::gen (FILE *f, bool gimple
 	  if (! s->s->s->for_subst_vec[i].first->used)
 	    continue;
 	  if (is_a <operator_id *> (s->s->s->for_subst_vec[i].second))
-	    fprintf (f, ", enum tree_code ARG_UNUSED (%s)",
+	    fprintf (f, ", const enum tree_code ARG_UNUSED (%s)",
 		     s->s->s->for_subst_vec[i].first->id);
 	  else if (is_a <fn_id *> (s->s->s->for_subst_vec[i].second))
-	    fprintf (f, ", combined_fn ARG_UNUSED (%s)",
+	    fprintf (f, ", const combined_fn ARG_UNUSED (%s)",
 		     s->s->s->for_subst_vec[i].first->id);
 	}
 
@@ -3663,7 +3685,7 @@  decision_tree::gen (FILE *f, bool gimple
 	  else
 	    fprintf (f, "\nstatic tree\n"
 		     "generic_simplify_%s (location_t ARG_UNUSED (loc), enum "
-		     "tree_code ARG_UNUSED (code), tree ARG_UNUSED (type)",
+		     "tree_code ARG_UNUSED (code), const tree ARG_UNUSED (type)",
 		     e->operation->id);
 	  for (unsigned i = 0; i < n; ++i)
 	    fprintf (f, ", tree op%d", i);
@@ -3683,11 +3705,11 @@  decision_tree::gen (FILE *f, bool gimple
 	fprintf (f, "\nstatic bool\n"
 		 "gimple_simplify (code_helper *res_code, tree *res_ops,\n"
 		 "                 gimple_seq *seq, tree (*valueize)(tree),\n"
-		 "                 code_helper code, tree type");
+		 "                 code_helper code, const tree type");
       else
 	fprintf (f, "\ntree\n"
 		 "generic_simplify (location_t loc, enum tree_code code, "
-		 "tree type ATTRIBUTE_UNUSED");
+		 "const tree type ATTRIBUTE_UNUSED");
       for (unsigned i = 0; i < n; ++i)
 	fprintf (f, ", tree op%d", i);
       fprintf (f, ")\n");
@@ -3751,7 +3773,7 @@  write_predicate (FILE *f, predicate_id *
 	   p->nargs > 0 ? ", tree *res_ops" : "",
 	   gimple ? ", tree (*valueize)(tree) ATTRIBUTE_UNUSED" : "");
   /* Conveniently make 'type' available.  */
-  fprintf_indent (f, 2, "tree type = TREE_TYPE (t);\n");
+  fprintf_indent (f, 2, "const tree type = TREE_TYPE (t);\n");
 
   if (!gimple)
     fprintf_indent (f, 2, "if (TREE_SIDE_EFFECTS (t)) return false;\n");