On Thu, Mar 31, 2005 at 01:25:45PM -0800, Per Bothner wrote:
> Geoff Keating wrote:
>  >> * Any source_location values handed out before the #include
> >>that restores the gch will become invalid.  They will be re-mapped
> >>to that in the pre-compiled header.  Presumably that's ok - there's
> >>no declartions or expressions in the main file at that point, or
> >>the restore would have failed.  Any declarations that are <builtin>
> >>or in the <command line> will presumably be the same either way.
> >
> >
> >Another way of putting this is that source_location values should be in 
> >GCed memory.  I think they all are, certainly all declarations and macro 
> >definitions are.
> 
> I think you're misunderstanding my concern.  The issue is when we're
> processing a .c file normally we generate source_location cookies
> for <builtin>, <command line>, and any tokens until we process the
> #include that restores the pch.  At that point we (need to) restore
> the line number saved in the pch.  Any source_location cookies
> that we've handed out up until then become invalid, because they
> refer to a line_table that has been replaced.  My point is that
> presumably it doesn't matter, since the source_location cookies
> and declarations corresponing to <builtin> and <command line>
> should match, when compared with those at pch-generation time.
> The ones that don't match are any source_location cookies for
> tokens in the main file itself.  However, they should just be
> tokens for white space, comments, and the initial #include that
> triggers the pch-restoration, and there should be nothing except
> garbage that use those now-invalid source_locations.

That's exactly what Geoff said.  There are two relevant properties of
GCed memory here:
  - Anything in GCed memory will be saved to the PCH
  - Anything in GCed memory will be overwritten by loading the PCH.

There will be no references left after the PCH is loaded, unless they
were living outside of GC.

-- 
Daniel Jacobowitz
CodeSourcery, LLC

Reply via email to