aboutsummaryrefslogtreecommitdiff
path: root/libcpp/directives.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-03-06 17:18:40 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2013-03-06 17:18:40 +0100
commit28937f1196166ef33c303ff09f0d7f4936faec81 (patch)
tree81d6fae2161fe976ca587b7a58d10fda41f7e93b /libcpp/directives.c
parentb681bb9507df9bf700eac671e3c999bd735b1939 (diff)
downloadgcc-28937f1196166ef33c303ff09f0d7f4936faec81.zip
gcc-28937f1196166ef33c303ff09f0d7f4936faec81.tar.gz
gcc-28937f1196166ef33c303ff09f0d7f4936faec81.tar.bz2
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
Diffstat (limited to 'libcpp/directives.c')
-rw-r--r--libcpp/directives.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libcpp/directives.c b/libcpp/directives.c
index 46b8608..65b2034 100644
--- a/libcpp/directives.c
+++ b/libcpp/directives.c
@@ -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);
}