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.]
Started with r186346.
GCC 6 branch is being closed
The GCC 7 branch is being closed, re-targeting to GCC 8.4.
GCC 8.4.0 has been released, adjusting target milestone.
GCC 8 branch is being closed.
GCC 9.4 is being released, retargeting bugs to GCC 9.5.
GCC 9 branch is being closed
GCC 10.4 is being released, retargeting bugs to GCC 10.5.
GCC 10 branch is being closed.