re PR middle-end/56461 (GCC is leaking lots of memory)

PR middle-end/56461
	* internal.h (struct cpp_buffer): Add to_free field.
	(_cpp_pop_file_buffer): Add third argument.
	* files.c (_cpp_stack_file): Set buffer->to_free.
	(_cpp_pop_file_buffer): Add to_free argument.  Free to_free
	if non-NULL, and if equal to file->buffer_start, also clear
	file->buffer{,_start,_valid}.
	* directives.c (_cpp_pop_buffer): Pass buffer->to_free
	to _cpp_pop_file_buffer.

From-SVN: r196497
This commit is contained in:
Jakub Jelinek 2013-03-06 17:18:40 +01:00 committed by Jakub Jelinek
parent b681bb9507
commit 28937f1196
4 changed files with 30 additions and 8 deletions

View file

@ -2558,6 +2558,7 @@ _cpp_pop_buffer (cpp_reader *pfile)
cpp_buffer *buffer = pfile->buffer;
struct _cpp_file *inc = buffer->file;
struct if_stack *ifs;
const unsigned char *to_free;
/* Walk back up the conditional stack till we reach its level at
entry to this file, issuing error messages. */
@ -2571,6 +2572,7 @@ _cpp_pop_buffer (cpp_reader *pfile)
/* _cpp_do_file_change expects pfile->buffer to be the new one. */
pfile->buffer = buffer->prev;
to_free = buffer->to_free;
free (buffer->notes);
/* Free the buffer object now; we may want to push a new buffer
@ -2579,7 +2581,7 @@ _cpp_pop_buffer (cpp_reader *pfile)
if (inc)
{
_cpp_pop_file_buffer (pfile, inc);
_cpp_pop_file_buffer (pfile, inc, to_free);
_cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
}