[lto] Use num_parm_types and nth_parm_type in type_unification_real_args.

Kazu Hirata kazu@codesourcery.com
Mon Aug 14 06:07:00 GMT 2006


Hi,

Tested on x86_64-pc-linux-gnu.  Committed to the LTO branch as
obvious.

Kazu Hirata

2006-08-13  Kazu Hirata  <kazu@codesourcery.com>

	* pt.c (type_unification_real_args): Use num_parm_types and
	nth_parm_type.

Index: cp/pt.c
===================================================================
--- cp/pt.c	(revision 116111)
+++ cp/pt.c	(working copy)
@@ -9474,13 +9474,13 @@ type_unification_real_args (tree fn,
 			    unification_kind_t strict,
 			    int flags)
 {
-  tree parm, arg;
   int i;
   int ntparms = TREE_VEC_LENGTH (tparms);
   int sub_strict;
   int saw_undeduced = 0;
-  tree parms, args;
+  tree args;
   tree xparmdecls, parmdecls;
+  int parms_len;
 
   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
@@ -9522,22 +9522,21 @@ type_unification_real_args (tree fn,
     }
 
  again:
-  parms = xparms;
+  parms_len = num_parm_types (xparms);
   args = xargs;
   parmdecls = xparmdecls;
 
-  while (parms
-	 && !(parms
-	      && TREE_VALUE (parms) == void_type_node
-	      && TREE_CHAIN (parms) == NULL_TREE)
-	 && args
-	 && !(args
-	      && TREE_VALUE (args) == void_type_node
-	      && TREE_CHAIN (args) == NULL_TREE))
+  for (i = 0; (i < parms_len
+	       && !(i + 1 == parms_len
+		    && nth_parm_type (xparms, i) == void_type_node)
+	       && args
+	       && !(args
+		    && TREE_VALUE (args) == void_type_node
+		    && TREE_CHAIN (args) == NULL_TREE));
+       i++)
     {
-      parm = TREE_VALUE (parms);
-      parms = TREE_CHAIN (parms);
-      arg = TREE_VALUE (args);
+      tree parm = nth_parm_type (xparms, i);
+      tree arg = TREE_VALUE (args);
       args = TREE_CHAIN (args);
       if (parmdecls)
 	parmdecls = TREE_CHAIN (parmdecls);
@@ -9611,15 +9610,13 @@ type_unification_real_args (tree fn,
       && !(args
 	   && TREE_VALUE (args) == void_type_node
 	   && TREE_CHAIN (args) == NULL_TREE)
-      && (parms
-	  && TREE_VALUE (parms) == void_type_node
-	  && TREE_CHAIN (parms) == NULL_TREE))
+      && (i + 1 == parms_len
+	  && nth_parm_type (xparms, i) == void_type_node))
     return 1;
   /* Fail if parms are left and they don't have default values.  */
-  if (parms
-      && !(parms
-	   && TREE_VALUE (parms) == void_type_node
-	   && TREE_CHAIN (parms) == NULL_TREE)
+  if (i < parms_len
+      && !(i + 1 == parms_len
+	   && nth_parm_type (xparms, i) == void_type_node)
       && parmdecls && DECL_INITIAL (parmdecls) == NULL_TREE)
     return 1;
 



More information about the Gcc-patches mailing list