https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85249
Bug ID: 85249 Summary: [6/7/8 Regression] ICE with invalid default parameter Product: gcc Version: 8.0 Status: UNCONFIRMED Keywords: error-recovery, ice-on-invalid-code Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: reichelt at gcc dot gnu.org Target Milestone: --- The following invalid code snippet triggers an ICE since GCC 4.8.0: ======================================== struct A { void operator= (const A& = A()); void foo(const A&); }; void A::foo(const A& = A()) {} ======================================== bug.cc:3:33: error: 'void A::operator=(const A&)' cannot have default arguments void operator= (const A& = A()); ^ bug.cc:7:27: internal compiler error: canonical types differ for identical types 'void (A::)(const A&)' and 'void (A::)(const A&)' void A::foo(const A& = A()) {} ^ 0x9dc198 comptypes(tree_node*, tree_node*, int) ../../gcc/gcc/cp/typeck.c:1480 0x89241a duplicate_decls(tree_node*, tree_node*, bool) ../../gcc/gcc/cp/decl.c:2226 0x899062 grokfndecl ../../gcc/gcc/cp/decl.c:9099 0x8a95f0 grokdeclarator(cp_declarator const*, cp_decl_specifier_seq*, decl_context, int, tree_node**) ../../gcc/gcc/cp/decl.c:12429 0x8ac476 start_function(cp_decl_specifier_seq*, cp_declarator const*, tree_node*) ../../gcc/gcc/cp/decl.c:15299 0x93c891 cp_parser_function_definition_from_specifiers_and_declarator ../../gcc/gcc/cp/parser.c:26711 0x93c891 cp_parser_init_declarator ../../gcc/gcc/cp/parser.c:19501 0x944508 cp_parser_simple_declaration ../../gcc/gcc/cp/parser.c:13049 0x945318 cp_parser_block_declaration ../../gcc/gcc/cp/parser.c:12874 0x9492a2 cp_parser_declaration ../../gcc/gcc/cp/parser.c:12772 0x9496b1 cp_parser_declaration_seq_opt ../../gcc/gcc/cp/parser.c:12648 0x9499a4 cp_parser_translation_unit ../../gcc/gcc/cp/parser.c:4563 0x9499a4 c_parse_file() ../../gcc/gcc/cp/parser.c:39016 0xa49636 c_common_parse_file() ../../gcc/gcc/c-family/c-opts.c:1132 Please submit a full bug report, [etc.]