aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2002-01-03 09:41:00 +0000
committerAndreas Schwab <schwab@gcc.gnu.org>2002-01-03 09:41:00 +0000
commitb7e30d8ad0eefc5560ae1e0fbb67ed02a428d874 (patch)
treecbc23e02d49a928631fef7e5b64be1beb9789c5c /gcc
parentff81832f59cff40ccee928693238c92c0347a50e (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/cppfiles.c8
-rw-r--r--gcc/cpphash.h2
-rw-r--r--gcc/cpplib.c6
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