From: Jason Merrill Date: Sat, 8 Aug 2015 22:01:21 +0000 (-0400) Subject: re PR c++/67142 ([C++1z] ICE: tree check: expected template_decl, have field_decl... X-Git-Tag: basepoints/gcc-7~5183 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d6729a4291a69749ea7faf55bba2c4520ca6a6a9;p=thirdparty%2Fgcc.git re PR c++/67142 ([C++1z] ICE: tree check: expected template_decl, have field_decl in equal, at cp/pt.c:1665) PR c++/67142 * pt.c (equal): Make sure tmpl is actually a template. From-SVN: r226737 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 40ed123c961c..32392395a220 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2015-08-08 Jason Merrill + PR c++/67142 + * pt.c (equal): Make sure tmpl is actually a template. + PR c++/67114 * call.c (joust): Only call more_constrained on decls. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 1b6417465319..e05d77517bab 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1662,6 +1662,8 @@ spec_hasher::equal (spec_entry *e1, spec_entry *e2) equal = (e1->tmpl == e2->tmpl && comp_template_args (e1->args, e2->args)); if (equal && flag_concepts + /* tmpl could be a FIELD_DECL for a capture pack. */ + && TREE_CODE (e1->tmpl) == TEMPLATE_DECL && VAR_P (DECL_TEMPLATE_RESULT (e1->tmpl)) && uses_template_parms (e1->args)) { diff --git a/gcc/testsuite/g++.dg/cpp1z/regress2.C b/gcc/testsuite/g++.dg/cpp1z/regress2.C new file mode 100644 index 000000000000..d9bf0daa7dd3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/regress2.C @@ -0,0 +1,17 @@ +// PR c++/67142 +// { dg-options -std=c++1z } + +namespace detail { +template int split_at; +} +struct A { + decltype(0) operator()(); +}; +template A make; +struct Tuple; +auto check = + [](auto, auto, auto) { [](auto... xs) { [=] { make(xs...); }; }(); }; +int main() { + namespace vd = detail; + check(vd::split_at<0>, make, make); +}