https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108713
Bug ID: 108713 Summary: ICE during RTL pass: into_cfglayout for x86_64-pc-linux-gnu '-m32', C++ 'libgomp.c-c++-common/for-11.c' Product: gcc Version: 13.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: tschwinge at gcc dot gnu.org CC: jakub at gcc dot gnu.org Target Milestone: --- With GCC sources based on 2023-01-27 commit 84eb39556cc8449e04b5f48bd5c131941a7a2529, with a bunch of local OMP changes on top (but those shouldn't be touching the relevant area of code), standard bootstrap build, I've observed an ICE as follows on our x86_64-pc-linux-gnu testing system amd_ryzen1, in routine libgomp testing for '-m32': [...] spawn -ignore SIGHUP gcc -x c++ ../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-11.c -m32 -foffload-options=amdgcn-amdhsa=-march=gfx900 -I../source-gcc/libgomp/testsuite/../../include -I../source-gcc/libgomp/testsuite/.. -fmessage-length=0 -fno-diagnostics-show-caret -fdiagnostics-color=never -fopenmp -O2 -lstdc++ -lm -o ./for-11.exe during RTL pass: into_cfglayout In file included from ../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-1.h:13, from ../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-5.c:114, from ../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-11.c:4: ../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-2.h: In function 'f34_ttdpfs_ds128_auto() [clone ._omp_fn.1]': ../source-gcc/libgomp/testsuite/libgomp.c++/../libgomp.c-c++-common/for-2.h:520:17: internal compiler error: Segmentation fault 0x16a482f crash_signal [...]/source-gcc/gcc/toplev.cc:314 0x268a3e2 compact_blocks() [...]/source-gcc/gcc/cfg.cc:182 0x26951cf cleanup_cfg(int) [...]/source-gcc/gcc/cfgcleanup.cc:3131 0x11b682a execute [...]/source-gcc/gcc/cfgrtl.cc:3703 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. compiler exited with status 1 FAIL: libgomp.c++/../libgomp.c-c++-common/for-11.c (internal compiler error: Segmentation fault) [...] Nothing interesting in 'dmesg', as far as I can tell. 'gcc/cfgrtl.cc': 3693 class pass_into_cfg_layout_mode : public rtl_opt_pass 3694 { 3695 public: 3696 pass_into_cfg_layout_mode (gcc::context *ctxt) 3697 : rtl_opt_pass (pass_data_into_cfg_layout_mode, ctxt) 3698 {} 3699 3700 /* opt_pass methods: */ 3701 unsigned int execute (function *) final override 3702 { 3703 cfg_layout_initialize (0); 'gcc/cfgcleanup.cc': 3109 bool 3110 cleanup_cfg (int mode) 3111 { [...] 3131 compact_blocks (); 'gcc/cfg.cc': 167 void 168 compact_blocks (void) 169 { 170 int i; 171 172 SET_BASIC_BLOCK_FOR_FN (cfun, ENTRY_BLOCK, ENTRY_BLOCK_PTR_FOR_FN (cfun)); 173 SET_BASIC_BLOCK_FOR_FN (cfun, EXIT_BLOCK, EXIT_BLOCK_PTR_FOR_FN (cfun)); 174 175 if (df) 176 df_compact_blocks (); 177 else 178 { 179 basic_block bb; 180 181 i = NUM_FIXED_BLOCKS; 182 FOR_EACH_BB_FN (bb, cfun) 183 { 184 SET_BASIC_BLOCK_FOR_FN (cfun, i, bb); 185 bb->index = i; 186 i++; 187 } This is the first/only time I've seen this; the ICE doesn't reproduce now for a few manual re-invocations. Maybe just "cosmic rays"... A run with '-wrapper valgrind' did find a lot of stuff in IRA and LRA, but it's a GCC build without '--enable-valgrind-annotations', so I'm not sure what that means. [...] ==24856== Conditional jump or move depends on uninitialised value(s) ==24856== at 0x14B18E5: mark_pseudo_regno_live(int) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14B3260: process_bb_node_lives(ira_loop_tree_node*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x1491F28: ira_traverse_loop_tree(bool, ira_loop_tree_node*, void (*)(ira_loop_tree_node*), void (*)(ira_loop_tree_node*)) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14B45BF: ira_create_allocno_live_ranges() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x1496424: ira_build() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x148DB0E: (anonymous namespace)::pass_ira::execute(function*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A332A: execute_one_pass(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C1F: execute_pass_list_1(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C31: execute_pass_list_1(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C58: execute_pass_list(function*, opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x11D87D5: cgraph_node::expand() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x11D9E9A: symbol_table::compile() [clone .part.0] (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== ==24856== Conditional jump or move depends on uninitialised value(s) ==24856== at 0x14B17F8: make_object_live(ira_object*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14B1901: mark_pseudo_regno_live(int) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14B3260: process_bb_node_lives(ira_loop_tree_node*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x1491F28: ira_traverse_loop_tree(bool, ira_loop_tree_node*, void (*)(ira_loop_tree_node*), void (*)(ira_loop_tree_node*)) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14B45BF: ira_create_allocno_live_ranges() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x1496424: ira_build() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x148DB0E: (anonymous namespace)::pass_ira::execute(function*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A332A: execute_one_pass(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C1F: execute_pass_list_1(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C31: execute_pass_list_1(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C58: execute_pass_list(function*, opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x11D87D5: cgraph_node::expand() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== ==24856== Use of uninitialised value of size 8 ==24856== at 0x14B18EA: mark_pseudo_regno_live(int) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14B3260: process_bb_node_lives(ira_loop_tree_node*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x1491F28: ira_traverse_loop_tree(bool, ira_loop_tree_node*, void (*)(ira_loop_tree_node*), void (*)(ira_loop_tree_node*)) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14B45BF: ira_create_allocno_live_ranges() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x1496424: ira_build() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x148DB0E: (anonymous namespace)::pass_ira::execute(function*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A332A: execute_one_pass(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C1F: execute_pass_list_1(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C31: execute_pass_list_1(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C58: execute_pass_list(function*, opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x11D87D5: cgraph_node::expand() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x11D9E9A: symbol_table::compile() [clone .part.0] (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) [...] ==24856== Use of uninitialised value of size 8 ==24856== at 0x149F1DB: ira_build_conflicts() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x1496A74: ira_build() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x148DB0E: (anonymous namespace)::pass_ira::execute(function*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A332A: execute_one_pass(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C1F: execute_pass_list_1(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C31: execute_pass_list_1(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C58: execute_pass_list(function*, opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x11D87D5: cgraph_node::expand() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x11D9E9A: symbol_table::compile() [clone .part.0] (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x11DC8B7: symbol_table::finalize_compilation_unit() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x16A4AEF: compile_file() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0xE07081: toplev::main(int, char**) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== ==24856== Conditional jump or move depends on uninitialised value(s) ==24856== at 0x14F3B2D: update_pseudo_point(int, int, point_type) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14F440D: process_bb_lives(basic_block_def*, int&, bool) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14F659A: lra_create_live_ranges_1(bool, bool) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14F713F: lra_create_live_ranges(bool, bool) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14D4BEF: lra(_IO_FILE*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x14867F9: (anonymous namespace)::pass_reload::execute(function*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A332A: execute_one_pass(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C1F: execute_pass_list_1(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C31: execute_pass_list_1(opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x15A3C58: execute_pass_list(function*, opt_pass*) (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x11D87D5: cgraph_node::expand() (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) ==24856== by 0x11D9E9A: symbol_table::compile() [clone .part.0] (in [...]/install/libexec/gcc/x86_64-pc-linux-gnu/13.0.1/cc1plus) [...] ==24856== More than 100 errors detected. Subsequent errors ==24856== will still be recorded, but in less detail than before. [...] There are no missing commits for 'gcc/cfg*' files, and for 'gcc/ira* gcc/lra*' only PR103541 commit r13-5730-gf661c0bb6371f355966a67b5ce71398e80792948 "RA: Implement reuse of equivalent memory for caller saves optimization", which doesn't immediately look relevant. Do you think this is worth chasing down, or let it be, and only re-open should I run into this again?