From b10c7cd74ac9c17f0aa1cb5dbdb0e1227b421a90 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 17 Feb 2017 13:42:37 -0500 Subject: [PATCH] PR c++/79556 - C++17 ICE with non-type auto * pt.c (do_auto_deduction): Don't try to deduce from null type. From-SVN: r245543 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/pt.c | 4 ++++ gcc/testsuite/g++.dg/cpp1z/nontype-auto9.C | 8 ++++++++ 3 files changed, 15 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp1z/nontype-auto9.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a1e49484c65..65f2d19eda0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2017-02-17 Jason Merrill + PR c++/79556 - C++17 ICE with non-type auto + * pt.c (do_auto_deduction): Don't try to deduce from null type. + PR c++/79533 - C++17 ICE with temporary cast to reference * call.c (build_over_call): Conversion to a reference prevents copy elision. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 73d6be3598f..093c0f93775 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -25191,6 +25191,10 @@ do_auto_deduction (tree type, tree init, tree auto_node, /* C++17 class template argument deduction. */ return do_class_deduction (type, tmpl, init, flags, complain); + if (TREE_TYPE (init) == NULL_TREE) + /* Nothing we can do with this, even in deduction context. */ + return type; + /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto with either a new invented type template parameter U or, if the initializer is a braced-init-list (8.5.4), with diff --git a/gcc/testsuite/g++.dg/cpp1z/nontype-auto9.C b/gcc/testsuite/g++.dg/cpp1z/nontype-auto9.C new file mode 100644 index 00000000000..2daa346be06 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/nontype-auto9.C @@ -0,0 +1,8 @@ +// PR c++/79556 +// { dg-options -std=c++1z } + +template struct A; +template struct B; +template struct B { + static auto a = A::value>::value; +}; -- 2.30.2