Посоны, я тут компилятор повесил, gcc-9.2 под arm.
После нескольких итерация пришёл к выводу, что виноваты флаги оптимизации, с -O1 и -O2 висит, с -O0 - нет. Ещё поковырял и нашёл, что виноват -fvar-tracking
. Висит процесс cc1plus
. Подсоединившись отладчиком вижу вот это:
#0 0x000000000074f58f in find_base_term(rtx_def*, vec<std::pair<cselib_val*, elt_loc_list*>, va_heap, vl_ptr>&) ()
#1 0x000000000074f6c1 in find_base_term(rtx_def*, vec<std::pair<cselib_val*, elt_loc_list*>, va_heap, vl_ptr>&) ()
#2 0x000000000074f54b in find_base_term(rtx_def*, vec<std::pair<cselib_val*, elt_loc_list*>, va_heap, vl_ptr>&) ()
#3 0x000000000074f6c1 in find_base_term(rtx_def*, vec<std::pair<cselib_val*, elt_loc_list*>, va_heap, vl_ptr>&) ()
#4 0x000000000074f54b in find_base_term(rtx_def*, vec<std::pair<cselib_val*, elt_loc_list*>, va_heap, vl_ptr>&) ()
#5 0x000000000074f6c1 in find_base_term(rtx_def*, vec<std::pair<cselib_val*, elt_loc_list*>, va_heap, vl_ptr>&) ()
#6 0x000000000074f54b in find_base_term(rtx_def*, vec<std::pair<cselib_val*, elt_loc_list*>, va_heap, vl_ptr>&) ()
#7 0x000000000074f9a4 in find_base_term(rtx_def*) ()
#8 0x0000000000752b9d in true_dependence_1(rtx_def const*, machine_mode, rtx_def*, rtx_def const*, rtx_def*, bool) ()
#9 0x0000000000db1935 in drop_overlapping_mem_locs(variable**, overlapping_mems*) ()
#10 0x0000000000db1a7a in clobber_overlapping_mems(dataflow_set*, rtx_def*) ()
#11 0x0000000000db207b in val_store(dataflow_set*, rtx_def*, rtx_def*, rtx_insn*, bool) ()
#12 0x0000000000db29a5 in vt_emit_notes() ()
#13 0x0000000000db4d65 in (anonymous namespace)::pass_variable_tracking::execute(function*) ()
#14 0x0000000000a7087a in execute_one_pass(opt_pass*) ()
#15 0x0000000000a70fc8 in execute_pass_list_1(opt_pass*) ()
#16 0x0000000000a70fda in execute_pass_list_1(opt_pass*) ()
#17 0x0000000000a70fda in execute_pass_list_1(opt_pass*) ()
#18 0x0000000000a71019 in execute_pass_list(function*, opt_pass*) ()
#19 0x00000000007bc01f in cgraph_node::expand() ()
#20 0x00000000007bcec5 in symbol_table::compile() [clone .part.64] ()
#21 0x00000000007beffd in symbol_table::finalize_compilation_unit() ()
#22 0x0000000000b2e64d in compile_file() ()
#23 0x0000000000587fb5 in toplev::main(int, char**) ()
#24 0x000000000058a41b in main ()
Компилируемый код работал на gcc-6.2. Как дальше искать виновника? Регрессия компилятора или в коде косяк? В файле 850 строк, выложить не могу. Думаю, как локализовать то, на чём компилер висит.