The following invalid testcase triggers an ICE on mainline: ============================================================ template<typename> struct A {}; template<typename...T> void foo(A<T>, A<T>); template<typename...T> void foo(A<T>, A<T>) {} ============================================================ bug.cc:3: error: parameter packs not expanded with `...': bug.cc:3: note: 'T' bug.cc:5: error: parameter packs not expanded with `...': bug.cc:5: note: 'T' bug.cc:5: internal compiler error: canonical types differ for identical types A<<expression error> > and A<<expression error> > Please submit a full bug report, [etc.] The bug appeared between 2007-11-03 and 2007-11-06.
Confirmed.
Mark, Why was this marked as a P2 as this is only an error recovery regression? Thanks, Andrew Pinski
My mistake. I moved too quickly, and thought this was ICE-on-invalid without a previous valid error. P4.
Patch here: http://gcc.gnu.org/ml/gcc-patches/2008-01/msg00650.html
Subject: Bug 34103 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
(In reply to comment #6) > Fixed in mainline Not yet: FAIL: g++.dg/cpp0x/vt-34103.C (internal compiler error) FAIL: g++.dg/cpp0x/vt-34103.C (test for excess errors) /home/uros/gcc-svn/trunk/gcc/testsuite/g++.dg/cpp0x/vt-34103.C:7: note: 'T' /home/uros/gcc-svn/trunk/gcc/testsuite/g++.dg/cpp0x/vt-34103.C:7: internal compiler error: canonical types differ for identical types A<<expression error> > and A<<expression error> > Please submit a full bug report,
I'm unable to reproduce this failure now. What platform are you on and what configure flags did you use?
I also see those two ICEs on x86_64-unknown-linux-gnu. P2 as this shows in testresults on a primary platform.
(In reply to comment #8) > I'm unable to reproduce this failure now. What platform are you on and what > configure flags did you use? Target: i686-pc-linux-gnu Configured with: ../gcc-svn/trunk/configure --with-mpfr=/usr/local --enable-languages=c,c++,fortran gcc version 4.3.0 20080116 (experimental) [trunk revision 131569] (GCC)
I see the failure on i386-apple-darwin8.11.1 also. (In reply to comment #8) > I'm unable to reproduce this failure now. What platform are you on and what > configure flags did you use? Make sure you did not turn off checking.
I also see the ICE reported in comment #12 on hppa-unknown-linux-gnu.
Subject: Re: [4.3 regression] ICE with invalid variadic template functions > I also see the ICE reported in comment #12 on hppa-unknown-linux-gnu. Sorry, comment #7. Dave
At rev. 131891, the test gives the same ICE on ppc/Intel Darwin9, 32 and 64 modes.
Thanks everyone; I can reproduce this on i686-pc-linux-gnu. Patch in the works.
Subject: Bug 34103 Author: dgregor Date: Tue Jan 29 13:59:59 2008 New Revision: 131938 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=131938 Log: 2008-01-29 Douglas Gregor <doug.gregor@gmail.com> PR c++/34055 PR c++/34103 PR c++/34219 PR c++/34606 PR c++/34753 PR c++/34754 PR c++/34755 PR c++/34919 PR c++/34961 * c-pretty-print.c (pp_c_type_qualifier_list): Don't try to print qualifiers for an ERROR_MARK_NODE or a NULL_TREE. 2008-01-29 Douglas Gregor <doug.gregor@gmail.com> PR c++/34055 PR c++/34103 PR c++/34219 PR c++/34606 PR c++/34753 PR c++/34754 PR c++/34755 PR c++/34919 PR c++/34961 * typeck.c (check_return_expr): Tweak call to check_for_bare_parameter_packs. * class.c (add_method): Be careful with error_mark_nodes. * cp-tree.h (check_for_bare_parameter_packs): Remove "*" from signature. * pt.c (struct find_parameter_pack_data): Remove SET_PACKS_TO_ERROR. (find_parameter_packs_r): Don't use SET_PACKS_TO_ERROR. (uses_parameter_packs): Don't set SET_PACKS_TO_ERROR. (make_pack_expansion): Ditto. (check_for_bare_parameter_packs): Parameter is now a tree, not a tree*. (process_template_parm): Tweak call to check_for_bare_parameter_packs. (push_template_decl_real): Tweak calls to check_for_bare_parameter_packs. If bare parameter packs are found in the list of exceptions, clear out that list after giving an error. * semantics.c (finish_cond): Tweak call to check_for_bare_parameter_packs. (finish_expr_stmt): Ditto. (finish_for_expr): Ditto. (finish_switch_cond): Ditto. (finish_mem_initializers): Ditto. (finish_member_declaration): Ditto. (finish_static_assert): Check for bare parameter packs in the condition. * decl2.c (cplus_decl_attributes): Check for bare parameter packs in the attributes of a declaration. * parser.c (cp_parser_using_declaration): Tweak call to check_for_bare_parameter_packs. (cp_parser_base_clause): Ditto. 2008-01-29 Douglas Gregor <doug.gregor@gmail.com> PR c++/34055 PR c++/34103 PR c++/34219 PR c++/34606 PR c++/34753 PR c++/34754 PR c++/34755 PR c++/34919 PR c++/34961 * g++.dg/cpp0x/vt-34219-2.C: New. * g++.dg/cpp0x/pr32126.C: Tweak expected error messages. * g++.dg/cpp0x/vt-34961.C: New. * g++.dg/cpp0x/vt-34055.C: Tweak error messages; add new test cases from the re-opened PR. * g++.dg/cpp0x/vt-34753.C: New. * g++.dg/cpp0x/vt-34919.C: New. * g++.dg/cpp0x/vt-34754.C: New. * g++.dg/cpp0x/vt-34606.C: New. * g++.dg/cpp0x/vt-34219.C: New. * g++.dg/cpp0x/pr32125.C: Tweak expected error messages. * g++.dg/cpp0x/vt-34755.C: New. * g++.dg/cpp0x/pr31438.C: Ditto. * g++.dg/cpp0x/variadic81.C: Ditto. Added: trunk/gcc/testsuite/g++.dg/cpp0x/vt-34219-2.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34219.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34606.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34753.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34754.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34755.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34919.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34961.C Modified: trunk/gcc/ChangeLog trunk/gcc/c-pretty-print.c trunk/gcc/cp/ChangeLog trunk/gcc/cp/class.c trunk/gcc/cp/cp-tree.h trunk/gcc/cp/decl.c trunk/gcc/cp/decl2.c trunk/gcc/cp/parser.c trunk/gcc/cp/pt.c trunk/gcc/cp/semantics.c trunk/gcc/cp/typeck.c trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/g++.dg/cpp0x/pr31438.C trunk/gcc/testsuite/g++.dg/cpp0x/pr32125.C trunk/gcc/testsuite/g++.dg/cpp0x/pr32126.C trunk/gcc/testsuite/g++.dg/cpp0x/variadic81.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-34055.C
Fixed on mainline