------- Additional Comments From joseph at codesourcery dot com  2005-06-02 
19:08 -------
Subject: Re:  Memory management problem in new C parser

On Thu, 2 Jun 2005, ebotcazou at gcc dot gnu dot org wrote:

> Do you mean that parser_obstack is effectively a per-toplevel-decl object and
> that it is supposed to be dead at the end of the object's parsing, although in
> the present case there are objects associated with different toplevel decls
> allocated on it that point to each other?  And I presume 
> label_context_stack_vm
> is not explicitly reset to NULL on function exit because of nested functions?

Yes, the parser obstack contains objects with varying lifetime but all of 
them should be dead at the end of a toplevel decl, so it is freed at the 
end of each such decl.  There should never be objects associated with 
different toplevel decls on it, because everything that can point into it 
should be NULL at the end of such a decl.  (Various structures that can 
point into it are in variables in other files, such as these lists of 
labels and lists of decls used inside sizeof or typeof; declarators and 
associated structures also live on it but should mostly only be pointed to 
from local variables.)

Yes, nested functions mean it is not reset to NULL on function exit - and 
because GNU extensions allow a nested function to refer to explicitly 
declared labels in the containing function, it isn't clear that using the 
function context for this (resetting to NULL on function entry and 
restoring on exit; we do always have matched push_function_context / 
pop_function_context pairs for nested functions even with parse errors) 
would be right either.



-- 


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

Reply via email to