aboutsummaryrefslogtreecommitdiff
path: root/gcc/cppinit.c
diff options
context:
space:
mode:
authorNeil Booth <neil@daikokuya.demon.co.uk>2001-09-01 10:22:17 +0000
committerNeil Booth <neil@gcc.gnu.org>2001-09-01 10:22:17 +0000
commit53aabfbce906da1e583b951fd0b1ef0521e86d8f (patch)
treec8e77bbd1648ca6f454e28a95c6b55ed3309b279 /gcc/cppinit.c
parent058466a1a17e7d152d117faf9cec688167b76245 (diff)
downloadgcc-53aabfbce906da1e583b951fd0b1ef0521e86d8f.zip
gcc-53aabfbce906da1e583b951fd0b1ef0521e86d8f.tar.gz
gcc-53aabfbce906da1e583b951fd0b1ef0521e86d8f.tar.bz2
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
Diffstat (limited to 'gcc/cppinit.c')
-rw-r--r--gcc/cppinit.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index 9e5fa8e..8b8f569 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)
{