http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56921



--- Comment #9 from rguenther at suse dot de <rguenther at suse dot de> 
2013-04-12 08:45:46 UTC ---

On Fri, 12 Apr 2013, steven at gcc dot gnu.org wrote:



> 

> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56921

> 

> --- Comment #8 from Steven Bosscher <steven at gcc dot gnu.org> 2013-04-12 
> 08:36:04 UTC ---

> (In reply to comment #7)

> > niter_desc is not marked GTY(()) but is cached from struct loop aux field.

> > niter_desc uses heap memory but points to GC memory.  Thus, caching of this

> > across passes is not safe.

> > I suppose passes are missing free_simple_loop_desc, loop-doloop.c calls

> > get_simple_loop_desc but never free_simple_loop_desc for example (which

> > then at least leaks the niter_desc memory).

> 

> Another, IMHO better, solution would be to not use loop->aux but make

> a GC-safe vec indexed by loop->num. Maybe add checking in the loop

> verifier that no struct niter_desc is left pending if its parent loop

> is removed.

> 

> That should make the loop passes GC safe.

> 

> Then mark all "aux" fields as GC unsafe and document that every pass is

> responsible for cleaning up after itself.



Yes, definitely.  I was bit once by this ->aux usage which is

not really obvious.



Richard.

Reply via email to