https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103078
Bug ID: 103078 Summary: ICE canonical types differ for identical types since r12-1822-gf9c80eb12c58126a Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: marxin at gcc dot gnu.org CC: polacek at redhat dot com Target Milestone: --- Seen when building LLVM with GCC master: $ cat barrier.ii template <typename> struct __noexcept_move_assign_container; template <class _Allocator> struct basic_string { basic_string &operator=(basic_string &&) noexcept( __noexcept_move_assign_container<_Allocator>::value); basic_string &assign(basic_string &&) noexcept( __noexcept_move_assign_container<_Allocator>::value); }; template <class _Allocator> basic_string<_Allocator> & basic_string<_Allocator>::operator=(basic_string &&) noexcept( __noexcept_move_assign_container<_Allocator>::value) {} $ g++ barrier.ii -c -std=c++2a barrier.ii:11:56: internal compiler error: canonical types differ for identical types ‘basic_string<_Allocator>& (basic_string<_Allocator>::)(basic_string<_Allocator>&&) noexcept (__noexcept_move_assign_container<_Allocator>::value)’ and ‘basic_string<_Allocator>& (basic_string<_Allocator>::)(basic_string<_Allocator>&&) noexcept (__noexcept_move_assign_container<_Allocator>::value)’ 11 | __noexcept_move_assign_container<_Allocator>::value) {} | ^ 0xc2c9b1 comptypes(tree_node*, tree_node*, int) /home/marxin/Programming/gcc/gcc/cp/typeck.c:1558 0xa5abff duplicate_decls(tree_node*, tree_node*, bool, bool) /home/marxin/Programming/gcc/gcc/cp/decl.c:2406 0xa63362 grokfndecl /home/marxin/Programming/gcc/gcc/cp/decl.c:10368 0xa69ecb grokdeclarator(cp_declarator const*, cp_decl_specifier_seq*, decl_context, int, tree_node**) /home/marxin/Programming/gcc/gcc/cp/decl.c:14147 0xa6cb9a start_function(cp_decl_specifier_seq*, cp_declarator const*, tree_node*) /home/marxin/Programming/gcc/gcc/cp/decl.c:17164 0xb6cf6f cp_parser_function_definition_from_specifiers_and_declarator /home/marxin/Programming/gcc/gcc/cp/parser.c:30969 0xb6cf6f cp_parser_init_declarator /home/marxin/Programming/gcc/gcc/cp/parser.c:22450 0xb75014 cp_parser_single_declaration /home/marxin/Programming/gcc/gcc/cp/parser.c:31600 0xb751a1 cp_parser_template_declaration_after_parameters /home/marxin/Programming/gcc/gcc/cp/parser.c:31165 0xb759cc cp_parser_explicit_template_declaration /home/marxin/Programming/gcc/gcc/cp/parser.c:31431 0xb784ed cp_parser_declaration /home/marxin/Programming/gcc/gcc/cp/parser.c:14773 0xb7906b cp_parser_toplevel_declaration /home/marxin/Programming/gcc/gcc/cp/parser.c:14863 0xb7906b cp_parser_translation_unit /home/marxin/Programming/gcc/gcc/cp/parser.c:4987 0xb7906b c_parse_file() /home/marxin/Programming/gcc/gcc/cp/parser.c:47840 0xcb3cf9 c_common_parse_file() /home/marxin/Programming/gcc/gcc/c-family/c-opts.c:1237 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions.