The following invalid code snippet is accepted on mainline: ===================================== template<typename... T> struct A { T* x[1]; }; A<int> a; ===================================== One can also trigger ICEs with the snippet if one compiles it with "-g": bug.cc: In instantiation of 'A<int>': bug.cc:6: instantiated from here bug.cc:2: internal compiler error: in gen_type_die_with_usage, at dwarf2out.c:13432 Please submit a full bug report, [etc.] or with "-gstabs": bug.cc: In instantiation of 'A<int>': bug.cc:6: instantiated from here bug.cc:2: internal compiler error: in dbxout_type, at dbxout.c:2237 Please submit a full bug report, [etc.]
Patch here: http://gcc.gnu.org/ml/gcc-patches/2008-02/msg00529.html We could tweak this ice-on-invalid-code to create some ice-on-valid-code failures. See the e-mail with the patch.
Subject: Bug 35026 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 for 4.3