Commit 09833a1d by Jason Merrill Committed by Jason Merrill

Improve deduction failure diagnostics.

	* pt.c (unify): Don't diagnose no common base if we already have
	the same template.
	(do_auto_deduction): Explain deduction failure.

From-SVN: r229627
parent 79d9b2de
2015-10-31 Jason Merrill <jason@redhat.com>
* pt.c (unify): Don't diagnose no common base if we already have
the same template.
(do_auto_deduction): Explain deduction failure.
* pt.c (hash_tmpl_and_args): Use iterative_hash_object on template
uid.
......
......@@ -19633,7 +19633,16 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict,
explain_p, &t);
if (!t)
return unify_no_common_base (explain_p, r, parm, arg);
{
/* Don't give the derived diagnostic if we're
already dealing with the same template. */
bool same_template
= (CLASSTYPE_TEMPLATE_INFO (arg)
&& (CLASSTYPE_TI_TEMPLATE (parm)
== CLASSTYPE_TI_TEMPLATE (arg)));
return unify_no_common_base (explain_p && !same_template,
r, parm, arg);
}
}
}
else if (CLASSTYPE_TEMPLATE_INFO (arg)
......@@ -23500,6 +23509,9 @@ do_auto_deduction (tree type, tree init, tree auto_node,
error ("unable to deduce lambda return type from %qE", init);
else
error ("unable to deduce %qT from %qE", type, init);
type_unification_real (tparms, targs, parms, &init, 1, 0,
DEDUCE_CALL, LOOKUP_NORMAL,
NULL, /*explain_p=*/true);
}
return error_mark_node;
}
......
......@@ -15,5 +15,5 @@ void g() {
f<0>(s0, s2);
f(s0, s2); // { dg-error "" } no matching function
// { dg-message "(candidate|deduced conflicting types|ambiguous base class)" "candidate note" { target *-*-* } 17 }
// { dg-message "(candidate|deduced conflicting|ambiguous base class)" "candidate note" { target *-*-* } 17 }
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment