From 53aabfbce906da1e583b951fd0b1ef0521e86d8f Mon Sep 17 00:00:00 2001 From: Neil Booth <neil@daikokuya.demon.co.uk> Date: Sat, 1 Sep 2001 10:22:17 +0000 Subject: [PATCH] cppinit.c (cpp_start_read): Free the imacros list as we traverse it. * cppinit.c (cpp_start_read): Free the imacros list as we traverse it. Don't free the chains before returning. (_cpp_push_next_buffer): Only try pushing buffers if we've completed -imacros handling. From-SVN: r45349 --- gcc/ChangeLog | 7 +++++++ gcc/cppinit.c | 12 +++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b68e849dfbe9..824a3303c6ab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2001-09-01 Neil Booth <neil@daikokuya.demon.co.uk> + + * cppinit.c (cpp_start_read): Free the imacros list as we + traverse it. Don't free the chains before returning. + (_cpp_push_next_buffer): Only try pushing buffers if we've + completed -imacros handling. + 2001-08-31 Eric Christopher <echristo@redhat.com> * gcc.c (handle_braces): Add explaination for abort. diff --git a/gcc/cppinit.c b/gcc/cppinit.c index 9e5fa8e5fd9d..8b8f56979abf 100644 --- a/gcc/cppinit.c +++ b/gcc/cppinit.c @@ -958,18 +958,19 @@ cpp_start_read (pfile, fname) /* Scan -imacros files after command line defines, but before files given with -include. */ - for (p = CPP_OPTION (pfile, pending)->imacros_head; p; p = p->next) + while ((p = CPP_OPTION (pfile, pending)->imacros_head) != NULL) { if (push_include (pfile, p)) { pfile->buffer->return_at_eof = true; cpp_scan_nooutput (pfile); } + CPP_OPTION (pfile, pending)->imacros_head = p->next; + free (p); } } free_chain (CPP_OPTION (pfile, pending)->directive_head); - free_chain (CPP_OPTION (pfile, pending)->imacros_head); _cpp_push_next_buffer (pfile); return 1; @@ -984,7 +985,12 @@ _cpp_push_next_buffer (pfile) { bool pushed = false; - if (CPP_OPTION (pfile, pending)) + /* This is't pretty; we'd rather not be relying on this as a boolean + for reverting the line map. Further, we only free the chains in + this conditional, so an early call to cpp_finish / cpp_destroy + will leak that memory. */ + if (CPP_OPTION (pfile, pending) + && CPP_OPTION (pfile, pending)->imacros_head == NULL) { while (!pushed) { -- GitLab