2014-06-02 21:27 GMT+04:00 Jeff Law <l...@redhat.com>: > On 06/02/14 04:48, Ilya Enkovich wrote: >>> >>> Hmm, so if I understand things correctly, src_fun has no loop >>> structures attached, thus there's nothing to copy. Presumably at >>> some later point we build loop structures for the copy from scratch? >> >> I suppose it is just a simple bug with absent NULL pointer check. Here is >> original code: >> >> /* Duplicate the loop tree, if available and wanted. */ >> if (loops_for_fn (src_cfun) != NULL >> && current_loops != NULL) >> { >> copy_loops (id, entry_block_map->loop_father, >> get_loop (src_cfun, 0)); >> /* Defer to cfgcleanup to update loop-father fields of >> basic-blocks. */ >> loops_state_set (LOOPS_NEED_FIXUP); >> } >> >> /* If the loop tree in the source function needed fixup, mark the >> destination loop tree for fixup, too. */ >> if (loops_for_fn (src_cfun)->state & LOOPS_NEED_FIXUP) >> loops_state_set (LOOPS_NEED_FIXUP); >> >> As you may see we have check for absent loops structure in the first >> if-statement and no check in the second one. I hit segfault and added the >> check. > > Downthread you indicated you're not in SSA form which might explain the > inconsistency here. If so, then we need to make sure that the loop & df > structures do get set up properly later.
That is what init_data_structures pass will do for us as Richard pointed. Right? Ilya > > Jeff