diff options
author | Neil Booth <neil@daikokuya.demon.co.uk> | 2001-09-01 10:22:17 +0000 |
---|---|---|
committer | Neil Booth <neil@gcc.gnu.org> | 2001-09-01 10:22:17 +0000 |
commit | 53aabfbce906da1e583b951fd0b1ef0521e86d8f (patch) | |
tree | c8e77bbd1648ca6f454e28a95c6b55ed3309b279 /gcc/cppinit.c | |
parent | 058466a1a17e7d152d117faf9cec688167b76245 (diff) | |
download | gcc-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.c | 12 |
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) { |