diff options
author | Andreas Schwab <schwab@suse.de> | 2002-01-03 09:41:00 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@gcc.gnu.org> | 2002-01-03 09:41:00 +0000 |
commit | b7e30d8ad0eefc5560ae1e0fbb67ed02a428d874 (patch) | |
tree | cbc23e02d49a928631fef7e5b64be1beb9789c5c /gcc | |
parent | ff81832f59cff40ccee928693238c92c0347a50e (diff) | |
download | gcc-b7e30d8ad0eefc5560ae1e0fbb67ed02a428d874.zip gcc-b7e30d8ad0eefc5560ae1e0fbb67ed02a428d874.tar.gz gcc-b7e30d8ad0eefc5560ae1e0fbb67ed02a428d874.tar.bz2 |
cppfiles.c (_cpp_pop_file_buffer): Change return type to bool and return true if...
* cppfiles.c (_cpp_pop_file_buffer): Change return type to bool
and return true if _cpp_push_next_buffer pushed a new include
file.
* cpplib.c (_cpp_pop_buffer): Only call obstack_free if
_cpp_pop_file_buffer did not push a new file.
* cpphash.h (_cpp_pop_file_buffer): Update declaration.
From-SVN: r48507
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cppfiles.c | 8 | ||||
-rw-r--r-- | gcc/cpphash.h | 2 | ||||
-rw-r--r-- | gcc/cpplib.c | 6 |
4 files changed, 20 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ce9576f..c65fd86 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2002-01-03 Andreas Schwab <schwab@suse.de> + + * cppfiles.c (_cpp_pop_file_buffer): Change return type to bool + and return true if _cpp_push_next_buffer pushed a new include + file. + * cpplib.c (_cpp_pop_buffer): Only call obstack_free if + _cpp_pop_file_buffer did not push a new file. + * cpphash.h (_cpp_pop_file_buffer): Update declaration. + 2002-01-02 Eric Christopher <echristo@redhat.com> * final.c (final_scan_insn): Change 0 -> NULL_RTX in diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c index 3bdc8f3..11fc325 100644 --- a/gcc/cppfiles.c +++ b/gcc/cppfiles.c @@ -748,11 +748,13 @@ _cpp_read_file (pfile, fname) /* Do appropriate cleanup when a file buffer is popped off the input stack. Push the next -include file, if any remain. */ -void +bool _cpp_pop_file_buffer (pfile, inc) cpp_reader *pfile; struct include_file *inc; { + bool pushed = false; + /* Record the inclusion-preventing macro, which could be NULL meaning no controlling macro. */ if (pfile->mi_valid && inc->cmacro == NULL) @@ -772,8 +774,10 @@ _cpp_pop_file_buffer (pfile, inc) /* Finally, push the next -included file, if any. */ if (!pfile->buffer->prev) - _cpp_push_next_buffer (pfile); + pushed = _cpp_push_next_buffer (pfile); } + + return pushed; } /* Returns the first place in the include chain to start searching for diff --git a/gcc/cpphash.h b/gcc/cpphash.h index 2f558c6..703908f 100644 --- a/gcc/cpphash.h +++ b/gcc/cpphash.h @@ -390,7 +390,7 @@ extern int _cpp_compare_file_date PARAMS ((cpp_reader *, extern void _cpp_report_missing_guards PARAMS ((cpp_reader *)); extern void _cpp_init_includes PARAMS ((cpp_reader *)); extern void _cpp_cleanup_includes PARAMS ((cpp_reader *)); -extern void _cpp_pop_file_buffer PARAMS ((cpp_reader *, +extern bool _cpp_pop_file_buffer PARAMS ((cpp_reader *, struct include_file *)); /* In cppexp.c */ diff --git a/gcc/cpplib.c b/gcc/cpplib.c index ea1d9f8..3746d98 100644 --- a/gcc/cpplib.c +++ b/gcc/cpplib.c @@ -1805,6 +1805,7 @@ _cpp_pop_buffer (pfile) { cpp_buffer *buffer = pfile->buffer; struct if_stack *ifs; + bool pushed = false; /* Walk back up the conditional stack till we reach its level at entry to this file, issuing error messages. */ @@ -1819,9 +1820,10 @@ _cpp_pop_buffer (pfile) pfile->buffer = buffer->prev; if (buffer->inc) - _cpp_pop_file_buffer (pfile, buffer->inc); + pushed = _cpp_pop_file_buffer (pfile, buffer->inc); - obstack_free (&pfile->buffer_ob, buffer); + if (!pushed) + obstack_free (&pfile->buffer_ob, buffer); } void |