The followong invalid code snippet triggers an ICE since GCC 7.1.0: ======================================== template<typename> struct A { friend auto foo; }; ======================================== bug.cc:3:15: error: 'foo' is neither function nor member function; cannot be declared friend friend auto foo; ^~~ bug.cc:3:15: internal compiler error: in cp_finish_decl, at cp/decl.c:6806 0x6000c1 cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int) ../../gcc/gcc/cp/decl.c:6806 0x8b0037 grokfield(cp_declarator const*, cp_decl_specifier_seq*, tree_node*, bool, tree_node*, tree_node*) ../../gcc/gcc/cp/decl2.c:1002 0x9260ee cp_parser_member_declaration ../../gcc/gcc/cp/parser.c:23871 0x92707a cp_parser_member_specification_opt ../../gcc/gcc/cp/parser.c:23345 0x92707a cp_parser_class_specifier_1 ../../gcc/gcc/cp/parser.c:22487 0x9290d9 cp_parser_class_specifier ../../gcc/gcc/cp/parser.c:22739 0x9290d9 cp_parser_type_specifier ../../gcc/gcc/cp/parser.c:16745 0x936266 cp_parser_decl_specifier_seq ../../gcc/gcc/cp/parser.c:13606 0x93a9a5 cp_parser_single_declaration ../../gcc/gcc/cp/parser.c:27051 0x93ad2c cp_parser_template_declaration_after_parameters ../../gcc/gcc/cp/parser.c:26743 0x93b5ec cp_parser_explicit_template_declaration ../../gcc/gcc/cp/parser.c:26980 0x93b5ec cp_parser_template_declaration_after_export ../../gcc/gcc/cp/parser.c:26999 0x940959 cp_parser_declaration ../../gcc/gcc/cp/parser.c:12710 0x940c41 cp_parser_declaration_seq_opt ../../gcc/gcc/cp/parser.c:12637 0x940f34 cp_parser_translation_unit ../../gcc/gcc/cp/parser.c:4559 0x940f34 c_parse_file() ../../gcc/gcc/cp/parser.c:38857 0xa3f566 c_common_parse_file() ../../gcc/gcc/c-family/c-opts.c:1132 Please submit a full bug report, [etc.]
Confirmed. The ICE originated with 240756 (GCC 7.0.0): r240756 | jason | 2016-10-04 16:42:58 -0400 (Tue, 04 Oct 2016) | 23 lines Implement P0091R2, Template argument deduction for class templates.
Mine.
Author: paolo Date: Mon Feb 19 08:49:30 2018 New Revision: 257802 URL: https://gcc.gnu.org/viewcvs?rev=257802&root=gcc&view=rev Log: /cp 2018-02-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/84348 * decl.c (grokdeclarator): Early return error_mark_node upon ill-formed friend declaration. /testsuite 2018-02-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/84348 * g++.dg/cpp0x/auto50.C: New. * g++.dg/parse/friend12.C: Adjust. Added: trunk/gcc/testsuite/g++.dg/cpp0x/auto50.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/decl.c trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/g++.dg/parse/friend12.C
Fixed in trunk.
Fixed in GCC 8.