This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [C++ Patch/RFC] PR 60608
- From: Jason Merrill <jason at redhat dot com>
- To: Paolo Carlini <paolo dot carlini at oracle dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 14 Jul 2014 15:47:55 -0400
- Subject: Re: [C++ Patch/RFC] PR 60608
- Authentication-results: sourceware.org; auth=none
- References: <53C40355 dot 3090100 at oracle dot com>
On 07/14/2014 12:20 PM, Paolo Carlini wrote:
I have been looking a bit into this bug, using a reduced testcase which
simplifies the debugging quite a bit for me (a non-variadic variant is
ok). I cannot say to already understand all the details of the issue,
but something which strikes me as interesting, is that the DEDUCE_CALL
passed down by add_candidate gets lost and we end up calling
type_unification_real from unify with DEDUCE_EXACT. If I change it to an
unconditional DEDUCE_CALL, the testcase is accepted and the testsuite
passes with no regressions. Is that all there is to the issue?!?
Unfortunately, that goes too far. I think we want a new DEDUCE_PARMS
that is like DEDUCE_EXACT but does the same transformations as
tsubst_arg_types in this part of unify_pack_expansion:
/* If we had explicit template arguments, substitute them into the
pattern before deduction. */
if (any_explicit)
{
/* Some arguments might still be unspecified or dependent. */
bool dependent;
++processing_template_decl;
dependent = any_dependent_template_arguments_p (targs);
if (!dependent)
--processing_template_decl;
parm = tsubst (pattern, targs,
explain_p ? tf_warning_or_error : tf_none,
NULL_TREE);
if (dependent)
--processing_template_decl;
if (parm == error_mark_node)
return 1;
}
Jason