https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117548
Bug ID: 117548 Summary: ICE when redeclaring function with a compatible type involving C23 structure compatibility Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: luigighiron at gmail dot com Target Milestone: --- The following program causes an internal compiler error on GCC 15: typedef struct A{int q;}A; void f(A*); int main(void){ struct A{int q;}; void f(struct A*); } It seems that this code generates two possible crashes (tested on godbolt, using the options -std=c2x and the implicit option -g). Crash 1: > <source>: In function 'main': > <source>:5:17: internal compiler error: in comptypes, at c/c-typeck.cc:1429 > 5 | void f(struct A*); > | ^ > 0x258a265 diagnostic_context::diagnostic_impl(rich_location*, > diagnostic_metadata const*, diagnostic_option_id, char const*, __va_list_tag > (*) [1], diagnostic_t) > ???:0 > 0x25a0c55 internal_error(char const*, ...) > ???:0 > 0x9b0628 fancy_abort(char const*, int, char const*) > ???:0 > 0xa01d82 composite_type(tree_node*, tree_node*) > ???:0 > 0x9d7511 pushdecl(tree_node*) > ???:0 > 0x9ebd41 start_decl(c_declarator*, c_declspecs*, bool, tree_node*, bool, > unsigned int*) > ???:0 > 0xa6e2fb c_parse_file() > ???:0 > 0xaea329 c_common_parse_file() > ???:0 Crash 2: > hash table checking failed: equal operator returns true for a pair of values > with a different hash value > <source>: In function 'main': > <source>:5:17: internal compiler error: in hashtab_chk_error, at > hash-table.cc:137 > 5 | void f(struct A*); > | ^ > 0x258a265 diagnostic_context::diagnostic_impl(rich_location*, > diagnostic_metadata const*, diagnostic_option_id, char const*, __va_list_tag > (*) [1], diagnostic_t) > ???:0 > 0x25a0c55 internal_error(char const*, ...) > ???:0 > 0x9b0628 fancy_abort(char const*, int, char const*) > ???:0 > 0x9b03c1 hashtab_chk_error() > ???:0 > 0x9f3a32 hash_table<c_struct_hasher, false, > xcallocator>::find_slot_with_hash(tree_node* const&, unsigned int, > insert_option) > ???:0 > 0x9efb38 finish_struct(unsigned int, tree_node*, tree_node*, tree_node*, > c_struct_parse_info*, tree_node**) > ???:0 > 0xa01d82 composite_type(tree_node*, tree_node*) > ???:0 > 0x9d7511 pushdecl(tree_node*) > ???:0 > 0x9ebd41 start_decl(c_declarator*, c_declspecs*, bool, tree_node*, bool, > unsigned int*) > ???:0 > 0xa6e2fb c_parse_file() > ???:0 > 0xaea329 c_common_parse_file() > ???:0 Interestingly, it seems that not using the typedef on the second line here causes the crash to go away.