diff options
author | Jason Merrill <jason@redhat.com> | 2017-02-20 01:05:31 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2017-02-20 01:05:31 -0500 |
commit | cfb825648d585d15149c8e7658757ae9fc402b33 (patch) | |
tree | 47d52e084f4736321576be3da9949242fb10eef6 /gcc | |
parent | de59c92b44f5e67a90268e2d0f6f3efd6c8e3354 (diff) | |
download | gcc-cfb825648d585d15149c8e7658757ae9fc402b33.zip gcc-cfb825648d585d15149c8e7658757ae9fc402b33.tar.gz gcc-cfb825648d585d15149c8e7658757ae9fc402b33.tar.bz2 |
PR c++/79500 - ICE with non-template deduction guide
* pt.c (do_class_deduction): Use STRIP_TEMPLATE rather than
DECL_TEMPLATE_RESULT.
From-SVN: r245588
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/pt.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1z/class-deduction29.C | 6 |
3 files changed, 12 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 79fee99..ee222b4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2017-02-19 Jason Merrill <jason@redhat.com> + PR c++/79500 - ICE with non-template deduction guide + * pt.c (do_class_deduction): Use STRIP_TEMPLATE rather than + DECL_TEMPLATE_RESULT. + PR c++/79580 - ICE with compound literal * parser.c (cp_parser_class_head): If we're in the middle of an expression, use ts_within_enclosing_non_class. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 9e6ce8d..46e6498 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -25118,7 +25118,7 @@ do_class_deduction (tree ptype, tree tmpl, tree init, int flags, { tree t = cands; for (; t; t = OVL_NEXT (t)) - if (DECL_NONCONVERTING_P (DECL_TEMPLATE_RESULT (OVL_CURRENT (t)))) + if (DECL_NONCONVERTING_P (STRIP_TEMPLATE (OVL_CURRENT (t)))) break; if (t) { @@ -25126,7 +25126,7 @@ do_class_deduction (tree ptype, tree tmpl, tree init, int flags, for (t = cands; t; t = OVL_NEXT (t)) { tree f = OVL_CURRENT (t); - if (!DECL_NONCONVERTING_P (DECL_TEMPLATE_RESULT (f))) + if (!DECL_NONCONVERTING_P (STRIP_TEMPLATE (f))) pruned = build_overload (f, pruned); } cands = pruned; diff --git a/gcc/testsuite/g++.dg/cpp1z/class-deduction29.C b/gcc/testsuite/g++.dg/cpp1z/class-deduction29.C new file mode 100644 index 0000000..efffe3d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/class-deduction29.C @@ -0,0 +1,6 @@ +// PR c++/79500 +// { dg-options -std=c++1z } + +template<typename T> struct A {}; +A(...) -> A<int>; +A a = {}; |