aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2017-02-20 01:05:31 -0500
committerJason Merrill <jason@gcc.gnu.org>2017-02-20 01:05:31 -0500
commitcfb825648d585d15149c8e7658757ae9fc402b33 (patch)
tree47d52e084f4736321576be3da9949242fb10eef6 /gcc
parentde59c92b44f5e67a90268e2d0f6f3efd6c8e3354 (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--gcc/cp/pt.c4
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/class-deduction29.C6
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 = {};