cppfiles.c (_cpp_pop_file_buffer): Change return type to bool and return true if...
authorAndreas Schwab <schwab@suse.de>
Thu, 3 Jan 2002 09:41:00 +0000 (09:41 +0000)
committerAndreas Schwab <schwab@gcc.gnu.org>
Thu, 3 Jan 2002 09:41:00 +0000 (09:41 +0000)
* 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

gcc/ChangeLog
gcc/cppfiles.c
gcc/cpphash.h
gcc/cpplib.c

index ce9576fa4673dfd5ceb2e5f360c56125015bc139..c65fd8662ce4c4471ba5b5fc4e950af38927c42f 100644 (file)
@@ -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
index 3bdc8f3fbfcca94f00c0d8a3f2480e47678b2e22..11fc32567035821334ad9d9aade5e04a32953978 100644 (file)
@@ -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
index 2f558c6f26a7acd8d9d557652afa99011b168b24..703908fc1393e540e4dadfc4ac0d16fb3fcdbb03 100644 (file)
@@ -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 */
index ea1d9f86860b2059b3671ef116aebc75c290ff2f..3746d98410edfe203249b215fbcc8b37bea69889 100644 (file)
@@ -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