https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117496
Bug ID: 117496 Summary: [15 Regression] infinite recursion in insert_predicates_for_cond() on cdrkit-1.1.11 Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: slyfox at gcc dot gnu.org Target Milestone: --- Noticed huge RAM usage on cdrkit-1.1.11 on today's gcc-master from r15-5033-ge97179bacd067c. Did not bisect. cvise came up with the following example: // $ cat wodim.c int main_argc, gargs_preemp, gargs_nopreemp; static void gargs(); void main_argv() { int tracks = 0; gargs(main_argc, main_argv, &tracks); } void gargs(int, char *, int *tracksp) { int tracks = *tracksp, wm; for (;;) { if (tracks == 0) wm |= 4; if (gargs_nopreemp) gargs_preemp = 0; if (tracks == 0 && wm == 0) tracks++; } } $ gcc/xgcc -Bgcc -c wodim.c.c -o bug.o -O2 xgcc: internal compiler error: Segmentation fault signal terminated program cc1 Please submit a full bug report, with preprocessed source (by using -freport-bug). See <https://gcc.gnu.org/bugs/> for instructions. $ gcc/xgcc -v Using built-in specs. COLLECT_GCC=gcc/xgcc Target: x86_64-pc-linux-gnu Configured with: /home/slyfox/dev/git/gcc/configure --disable-multilib --disable-bootstrap --disable-lto --disable-libsanitizer --enable-languages=c CFLAGS='-O1 -g0' CXXFLAGS='-O1 -g0' LDFLAGS='-O1 -g0' Thread model: posix Supported LTO compression algorithms: zlib gcc version 15.0.0 20241107 (experimental) (GCC) Program received signal SIGSEGV, Segmentation fault. 0x0000000000b0c7fe in operand_compare::hash_operand(tree_node const*, inchash::hash&, unsigned int) () (gdb) bt #0 0x0000000000b0c7fe in operand_compare::hash_operand(tree_node const*, inchash::hash&, unsigned int) () #1 0x0000000000b0c5ea in inchash::add_expr(tree_node const*, inchash::hash&, unsigned int) () #2 0x00000000011ce35b in vn_nary_op_compute_hash(vn_nary_op_s*) () #3 0x00000000011d47e5 in vn_nary_op_insert_into(vn_nary_op_s*, hash_table<vn_nary_op_hasher, false, xcallocator>*) () #4 0x00000000011d7db7 in vn_nary_op_insert_pieces_predicated(unsigned int, tree_code, tree_node*, tree_node**, tree_node*, unsigned int, edge_def*) () #5 0x00000000011d813d in insert_predicates_for_cond(tree_code, tree_node*, tree_node*, edge_def*, edge_def*) () #6 0x00000000011d8307 in insert_predicates_for_cond(tree_code, tree_node*, tree_node*, edge_def*, edge_def*) () #7 0x00000000011d8307 in insert_predicates_for_cond(tree_code, tree_node*, tree_node*, edge_def*, edge_def*) () #8 0x00000000011d8307 in insert_predicates_for_cond(tree_code, tree_node*, tree_node*, edge_def*, edge_def*) () ...