The following invalid code snippet triggers an ICE on mainline since today: ============================================================= template<typename... T> int foo() { T t; return t; } void bar() { foo<int>(); } ============================================================= bug.cc: In function 'int foo()': bug.cc:3: error: parameter packs not expanded with `...': bug.cc:3: note: 'T' bug.cc: In function 'int foo() [with T = int]': bug.cc:9: instantiated from here bug.cc:4: internal compiler error: tree check: expected record_type or union_type or qual_union_type, have template_type_parm in lookup_conversions, at cp/search.c:2444 Please submit a full bug report, [etc.]
Patch here: http://gcc.gnu.org/ml/gcc-patches/2008-02/msg00529.html
Subject: Bug 35023 Author: dgregor Date: Fri Feb 15 17:33:02 2008 New Revision: 132348 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=132348 Log: 2008-02-15 Douglas Gregor <doug.gregor@gmail.com> PR c++/35023 PR c++/35024 PR c++/35026 * pt.c (finish_member_template_decl): If the type in a TYPE_DECL is error_mark_node, return an error early. (find_parameter_packs_r): Pass the pointer set along to recursive calls of cp_walk_subtrees; don't try to manage the pointer set ourselves. (uses_parameter_packs): Pass the pointer set to cp_walk_tree. (make_pack_expansion): Ditto. (check_for_bare_parameter_packs): Ditto. Also, don't bother taking a second pass through the tree with find_parameter_packs_r; that second pass no longer does anything. (push_template_decl_real): If we have an erroneous declaration, set its type to error_mark_node before returning an error. 2008-02-15 Douglas Gregor <doug.gregor@gmail.com> PR c++/35023 PR c++/35024 PR c++/35026 * g++.dg/cpp0x/vt-35026.C: New. * g++.dg/cpp0x/vt-35023.C: New. * g++.dg/cpp0x/vt-34055.C: Tweak expected error messages. * g++.dg/cpp0x/vt-35024.C: New. Added: trunk/gcc/testsuite/g++.dg/cpp0x/vt-35023.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-35024.C trunk/gcc/testsuite/g++.dg/cpp0x/vt-35026.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/pt.c trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/g++.dg/cpp0x/vt-34055.C
Fixed on mainline