This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Deleting jump tables and CFG


Jan Hubicka <hubicka@ucw.cz> writes:

> >     I went into assumption that GGC thinks that 'u' does not point into
> >     RTL not accessible via normal INSN chain, but it does not appear to be
> >     the case, 'u' is not handled specially by ggc_mark_rtx_children, so I
> >     guess this is some kind of memory corruption.
> > 
> > I went through the same process.  But something is blowing up and it
> > definitely appears related to GC, so I'll have to investigate further.
> > But the root of the problem is clearly that the CODE_LABEL isn't in the insn
> > chain while the jumptable is.
> That should not be major problem assuming that problematic jumptable
> gets elliminated before final pass (so we don't get unreferenced
> labels).
> GGC has interesting behaviour when dealing with doubly linked chains
> that are not really doubly linked (as in the case of dead CODE_LABEL
> whose pointers point to the middle of RTL stream), perhaps you need to
> manage NEXT_INSN/PREV_INSN of that CODE_LABEL to be NULL.
> RTL_NEXT contains some tricks to get around this problem, so it may not
> be the case anyway...

Yes.  That code was written specifically to deal with this case.

(You meant RTL_PREV, not RTL_NEXT, I think.)

-- 
- Geoffrey Keating <geoffk@geoffk.org>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]