diff options
author | Jason Merrill <jason@redhat.com> | 2017-03-23 14:23:25 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2017-03-23 14:23:25 -0400 |
commit | 842562b4e1bdd7a7f98e6dcf352b86f96a4e0426 (patch) | |
tree | acd2d177b2db09a1c2d9d0b8defc89fec542064e | |
parent | de2b3f5ca93a5627988f274e5e325d023e01f2a1 (diff) | |
download | gcc-842562b4e1bdd7a7f98e6dcf352b86f96a4e0426.zip gcc-842562b4e1bdd7a7f98e6dcf352b86f96a4e0426.tar.gz gcc-842562b4e1bdd7a7f98e6dcf352b86f96a4e0426.tar.bz2 |
PR c++/80150 - ICE with overloaded variadic deduction.
* pt.c (try_one_overload): Remove asserts.
From-SVN: r246422
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/pt.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/variadic-unify-3.C | 20 |
3 files changed, 27 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 22b7dfa..73a25f3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 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. * call.c (convert_like_real): Use LOOKUP_IMPLICIT. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index a4bf890..5259dad 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -19694,9 +19694,10 @@ try_one_overload (tree tparms, is equivalent to the corresponding explicitly specified argument. We may have deduced more arguments than were explicitly specified, and that's OK. */ - gcc_assert (ARGUMENT_PACK_INCOMPLETE_P (oldelt)); - gcc_assert (ARGUMENT_PACK_ARGS (oldelt) - == ARGUMENT_PACK_EXPLICIT_ARGS (oldelt)); + + /* We used to assert ARGUMENT_PACK_INCOMPLETE_P (oldelt) here, but + 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 deduced_pack = ARGUMENT_PACK_ARGS (elt); diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-unify-3.C b/gcc/testsuite/g++.dg/cpp0x/variadic-unify-3.C new file mode 100644 index 0000000..45f4d63 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic-unify-3.C @@ -0,0 +1,20 @@ +// 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); +} |