From: Paolo Carlini Date: Fri, 18 Oct 2013 21:24:05 +0000 (+0000) Subject: re PR c++/58466 (ICE in cxx_eval_constant_expression) X-Git-Tag: releases/gcc-4.9.0~3355 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6e62a2b4e8d0342091bc35396c18688fdc9fd9cc;p=thirdparty%2Fgcc.git re PR c++/58466 (ICE in cxx_eval_constant_expression) /cp 2013-10-18 Paolo Carlini PR c++/58466 * pt.c (most_specialized_class): Bump processing_template_decl for get_class_bindings. /testsuite 2013-10-18 Paolo Carlini PR c++/58466 * g++.dg/cpp0x/variadic145.C: New. From-SVN: r203836 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2ef2978e1fa2..1da821b72759 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-10-18 Paolo Carlini + + PR c++/58466 + * pt.c (most_specialized_class): Bump processing_template_decl for + get_class_bindings. + 2013-10-18 Paolo Carlini * parser.c (cp_parser_lookup_name): Tidy. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index e9c3ce2ab99e..e04bdcc81cb6 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -18615,10 +18615,15 @@ most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain) if (spec_tmpl == error_mark_node) return error_mark_node; + ++processing_template_decl; + tree parms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl); spec_args = get_class_bindings (tmpl, parms, partial_spec_args, args); + + --processing_template_decl; + if (spec_args) { if (outer_args) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f92ac71eefe8..823b8efee3eb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-10-18 Paolo Carlini + + PR c++/58466 + * g++.dg/cpp0x/variadic145.C: New. + 2013-10-18 Andrew MacLeod * g++.dg/plugin/header_plugin.c: Don't include tree-flow.h. diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic145.C b/gcc/testsuite/g++.dg/cpp0x/variadic145.C new file mode 100644 index 000000000000..65e4607f9a73 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic145.C @@ -0,0 +1,10 @@ +// PR c++/58466 +// { dg-do compile { target c++11 } } + +template struct A; + +template struct B; + +template struct B> {}; + +B> b; // { dg-error "incomplete type" }