* pt.c (lookup_template_class_1): Use coerce_innermost_template_parms.
authorJason Merrill <jason@redhat.com>
Tue, 14 Apr 2015 21:31:07 +0000 (17:31 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 14 Apr 2015 21:31:07 +0000 (17:31 -0400)
From-SVN: r222104

gcc/cp/ChangeLog
gcc/cp/pt.c

index 3b166a7607860e40b1947919e46878dd69d57394..dbf6330da935311d51fadb4b8a5bb3542ec9b064 100644 (file)
@@ -1,5 +1,7 @@
 2015-04-14  Jason Merrill  <jason@redhat.com>
 
+       * pt.c (lookup_template_class_1): Use coerce_innermost_template_parms.
+
        PR c++/65695
        * cvt.c (cp_fold_convert): Avoid wrapping PTRMEM_CST in NOP_EXPR.
 
index 28a85ebeeb7efb1e245d23b0bcb663b265c8dd4a..aed6f1cb953731a67ca2377f60a69428ed337f77 100644 (file)
@@ -7724,60 +7724,10 @@ lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
       /* Calculate the BOUND_ARGS.  These will be the args that are
         actually tsubst'd into the definition to create the
         instantiation.  */
-      if (parm_depth > 1)
-       {
-         /* We have multiple levels of arguments to coerce, at once.  */
-         int i;
-         int saved_depth = TMPL_ARGS_DEPTH (arglist);
-
-         tree bound_args = make_tree_vec (parm_depth);
-
-         for (i = saved_depth,
-                t = DECL_TEMPLATE_PARMS (gen_tmpl);
-              i > 0 && t != NULL_TREE;
-              --i, t = TREE_CHAIN (t))
-           {
-             tree a;
-             if (i == saved_depth)
-               a = coerce_template_parms (TREE_VALUE (t),
-                                          arglist, gen_tmpl,
-                                          complain,
-                                          /*require_all_args=*/true,
-                                          /*use_default_args=*/true);
-             else
-               /* Outer levels should have already been coerced.  */
-               a = TMPL_ARGS_LEVEL (arglist, i);
-
-             /* Don't process further if one of the levels fails.  */
-             if (a == error_mark_node)
-               {
-                 /* Restore the ARGLIST to its full size.  */
-                 TREE_VEC_LENGTH (arglist) = saved_depth;
-                 return error_mark_node;
-               }
-
-             SET_TMPL_ARGS_LEVEL (bound_args, i, a);
-
-             /* We temporarily reduce the length of the ARGLIST so
-                that coerce_template_parms will see only the arguments
-                corresponding to the template parameters it is
-                examining.  */
-             TREE_VEC_LENGTH (arglist)--;
-           }
-
-         /* Restore the ARGLIST to its full size.  */
-         TREE_VEC_LENGTH (arglist) = saved_depth;
-
-         arglist = bound_args;
-       }
-      else
-       arglist
-         = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
-                                  INNERMOST_TEMPLATE_ARGS (arglist),
-                                  gen_tmpl,
-                                  complain,
-                                  /*require_all_args=*/true,
-                                  /*use_default_args=*/true);
+      arglist = coerce_innermost_template_parms (parmlist, arglist, gen_tmpl,
+                                                complain,
+                                                /*require_all_args=*/true,
+                                                /*use_default_args=*/true);
 
       if (arglist == error_mark_node)
        /* We were unable to bind the arguments.  */