Commit 842562b4 by Jason Merrill Committed by Jason Merrill

PR c++/80150 - ICE with overloaded variadic deduction.

	* pt.c (try_one_overload): Remove asserts.

From-SVN: r246422
parent de2b3f5c
2017-03-23 Jason Merrill <jason@redhat.com> 2017-03-23 Jason Merrill <jason@redhat.com>
PR c++/80150 - ICE with overloaded variadic deduction.
* pt.c (try_one_overload): Remove asserts.
PR c++/77563 - missing ambiguous conversion error. PR c++/77563 - missing ambiguous conversion error.
* call.c (convert_like_real): Use LOOKUP_IMPLICIT. * call.c (convert_like_real): Use LOOKUP_IMPLICIT.
......
...@@ -19694,9 +19694,10 @@ try_one_overload (tree tparms, ...@@ -19694,9 +19694,10 @@ try_one_overload (tree tparms,
is equivalent to the corresponding explicitly specified argument. is equivalent to the corresponding explicitly specified argument.
We may have deduced more arguments than were explicitly specified, We may have deduced more arguments than were explicitly specified,
and that's OK. */ and that's OK. */
gcc_assert (ARGUMENT_PACK_INCOMPLETE_P (oldelt));
gcc_assert (ARGUMENT_PACK_ARGS (oldelt) /* We used to assert ARGUMENT_PACK_INCOMPLETE_P (oldelt) here, but
== ARGUMENT_PACK_EXPLICIT_ARGS (oldelt)); that's wrong if we deduce the same argument pack from multiple
function arguments: it's only incomplete the first time. */
tree explicit_pack = ARGUMENT_PACK_ARGS (oldelt); tree explicit_pack = ARGUMENT_PACK_ARGS (oldelt);
tree deduced_pack = ARGUMENT_PACK_ARGS (elt); tree deduced_pack = ARGUMENT_PACK_ARGS (elt);
......
// PR c++/80150
// { dg-do compile { target c++11 } }
template <typename R, typename... Args>
bool compare_functions(R(*funcA)(Args...), R(*funcB)(Args...), Args... args) {
return false;
}
int foo(int x) {
return x;
}
float foo(float x) {
return x;
}
int main() {
int a = 10;
compare_functions<int>(foo, foo, a);
}
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