The following invalid testcase triggers an ICE on mainline: ============================================================ struct A {}; template<typename> struct B : virtual A {}; template<typename...T> struct C : B<T> {}; ============================================================ bug.cc:5: error: parameter packs not expanded with `...': bug.cc:5: note: 'T' bug.cc: In instantiation of 'B<<expression error> >': bug.cc:5: instantiated from here bug.cc:3: internal compiler error: Segmentation fault Please submit a full bug report, [etc.] The bug appeared between 2007-11-03 and 2007-11-06.
Confirmed.
Mark, this is really only an error recovery regression. Can you relook at the current priority? Thanks, Andrew Pinski
Patch here: http://gcc.gnu.org/ml/gcc-patches/2008-01/msg00650.html
Subject: Bug 34102 Author: dgregor Date: Tue Jan 15 18:08:00 2008 New Revision: 131547 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=131547 Log: 2008-01-15 Douglas Gregor <doug.gregor@gmail.com> PR c++/34051 PR c++/34055 PR c++/34102 PR c++/34103 * typeck.c (check_return_expr): If there are bare parameter packs in the return value, set it to error_mark_node. * tree.c (cp_walk_subtrees): Walk USING_DECL nodes. * pt.c (find_parameter_packs_r): Look at the type of IDENTIFIER_NODEs (e.g., for user-defined conversions). (check_for_bare_parameter_packs): Flip the result: now returns TRUE when there were bare parameter packs, FALSE otherwise. (push_template_decl_real): Deal with flipped result of check_for_bare_parameter_packs. * semantics.c (finish_cond): If there are bare parameter packs in the conditional, set it to error_mark_node. (finish_expr_stmt): If there are bare parameter packs in the expression, set it to error_mark_node. (finish_for_expr): Ditto. (finish_switch_cond): If there are bare parameter packs in the conditional, set it to error_mark_node. (finish_mem_initializers): If there are bare parameter packs in the member initializer, set it to error_mark_node. (finish_member_declaration): Check the attributes of the declaration for bare parameter packs, and remove the attributes if any have bare parameter packs. * parser.c (cp_parser_using_declaration): Check the using declaration for bare parameter packs. (cp_parser_base_clause): If there are bare parameter packs in a base specifier, don't add it to the chain. 2008-01-15 Douglas Gregor <doug.gregor@gmail.com> PR c++/34051 PR c++/34055 PR c++/34102 PR c++/34103 * g++.dg/cpp0x/vt-34051-2.C: New. * g++.dg/cpp0x/vt-34102.C: New. * g++.dg/cpp0x/vt-34051.C: New. * g++.dg/cpp0x/vt-34055.C: New. * g++.dg/cpp0x/vt-34103.C: New. Added: trunk/gcc/testsuite/g++.dg/cpp0x/vt-34051-2.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34051.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34055.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34102.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34103.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/parser.c trunk/gcc/cp/pt.c trunk/gcc/cp/semantics.c trunk/gcc/cp/tree.c trunk/gcc/cp/typeck.c trunk/gcc/testsuite/ChangeLog
Fixed in mainline