From: Jason Merrill Date: Fri, 17 Feb 2017 18:42:37 +0000 (-0500) Subject: PR c++/79556 - C++17 ICE with non-type auto X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b10c7cd74ac9c17f0aa1cb5dbdb0e1227b421a90;p=gcc.git 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 --- 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; +};