summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2015-04-14 21:31:07 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2015-04-14 21:31:07 +0000
commit8447029be48bb637345016eced158f2252b0cfa1 (patch)
treea45bc47298c3ea784b0b53d92e92a95be9493cae
parente6ea917cbe2ffe3472a26089648d5ed88ec8a782 (diff)
downloadgcc-8447029be48bb637345016eced158f2252b0cfa1.tar.gz
* pt.c (lookup_template_class_1): Use coerce_innermost_template_parms.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@222104 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog2
-rw-r--r--gcc/cp/pt.c58
2 files changed, 6 insertions, 54 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3b166a76078..dbf6330da93 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 28a85ebeeb7..aed6f1cb953 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -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. */