diff options
author | Jason Merrill <jason@redhat.com> | 2015-01-13 16:04:28 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2015-01-13 16:04:28 -0500 |
commit | 8f413ae21e40877f5f6926d4de79966121edf501 (patch) | |
tree | fd1a0a2ea0b5aefb3aa9a1e237b734f7525ad71b /gcc | |
parent | 2001028ad3a44e5333333c175118837dba03c620 (diff) | |
download | gcc-8f413ae21e40877f5f6926d4de79966121edf501.zip gcc-8f413ae21e40877f5f6926d4de79966121edf501.tar.gz gcc-8f413ae21e40877f5f6926d4de79966121edf501.tar.bz2 |
re PR c++/64520 (ICE with std::initializer_list)
PR c++/64520
* pt.c (unify): Don't try to deduce to std::initializer_list<T...>.
From-SVN: r219557
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist91.C | 8 |
3 files changed, 20 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 14e1fb3..0e94fe1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2015-01-13 Jason Merrill <jason@redhat.com> + + PR c++/64520 + * pt.c (unify): Don't try to deduce to std::initializer_list<T...>. + 2015-01-12 Jason Merrill <jason@redhat.com> PR c++/64547 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index d8652fb..3ac93db 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -17854,7 +17854,13 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict, if (TREE_CODE (parm) == ARRAY_TYPE) elttype = TREE_TYPE (parm); else - elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0); + { + elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0); + /* Deduction is defined in terms of a single type, so just punt + on the (bizarre) std::initializer_list<T...>. */ + if (PACK_EXPANSION_P (elttype)) + return unify_success (explain_p); + } FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt) { diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist91.C b/gcc/testsuite/g++.dg/cpp0x/initlist91.C new file mode 100644 index 0000000..1387557 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist91.C @@ -0,0 +1,8 @@ +// PR c++/64520 +// { dg-do compile { target c++11 } } + +#include <initializer_list> +struct A { + template <typename... B> A(std::initializer_list<B...>); +}; +A a { 0 }; // { dg-error "" } |