stmt.c (expand_start_bindings): Allow callers to pass a flag indicating that no NOTE_...
authorMark Mitchell <mark@codesourcery.com>
Fri, 17 Sep 1999 22:01:23 +0000 (22:01 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Fri, 17 Sep 1999 22:01:23 +0000 (22:01 +0000)
* stmt.c (expand_start_bindings): Allow callers to pass a flag
indicating that no NOTE_INSN_BLOCK_BEG note is required.
(expand_start_target_temps): Use it.
* except.c (expand_eh_region_start_for_decl): Likewise.
* expr.c (expand_expr): Likewise.

From-SVN: r29484

gcc/ChangeLog
gcc/except.c
gcc/expr.c
gcc/stmt.c

index 4d0035dfc8f72e818b8f0c83c4f21c9764ed650e..f3d7e9fc6e56801877dceb8a4a7ee2ee7c9a6196 100644 (file)
@@ -1,3 +1,11 @@
+Fri Sep 17 15:03:16 1999  Mark Mitchell  <mark@codesourcery.com>
+
+       * stmt.c (expand_start_bindings): Allow callers to pass a flag
+       indicating that no NOTE_INSN_BLOCK_BEG note is required.
+       (expand_start_target_temps): Use it.
+       * except.c (expand_eh_region_start_for_decl): Likewise.
+       * expr.c (expand_expr): Likewise.
+
 Fri Sep 17 15:05:27 1999  Gavin Romig-Koch  <gavin@cygnus.com>
 
        * fold-const.c (operand_equal_p): Pay attention to side effects.
index f063c9ab4acc063c17e55a3effd65f52b7e6e4f9..3ecf7fc712167bee46a11fd21c9d9296b1dea494 100644 (file)
@@ -1418,7 +1418,7 @@ expand_eh_region_start_for_decl (decl)
   /* We need a new block to record the start and end of the
      dynamic handler chain.  We also want to prevent jumping into
      a try block.  */
-  expand_start_bindings (0);
+  expand_start_bindings (2);
 
   /* But we don't need or want a new temporary level.  */
   pop_temp_slots ();
index daa06d0e849eb996273f86e21163a261cf889e31..880e347a68e46d31dd6fdb53be1cdb280b51bfe6 100644 (file)
@@ -6104,7 +6104,7 @@ expand_expr (exp, target, tmode, modifier)
 
        /* Need to open a binding contour here because
           if there are any cleanups they must be contained here.  */
-       expand_start_bindings (0);
+       expand_start_bindings (2);
 
        /* Mark the corresponding BLOCK for output in its proper place.  */
        if (TREE_OPERAND (exp, 2) != 0
@@ -6793,7 +6793,7 @@ expand_expr (exp, target, tmode, modifier)
       {
        /* Start a new binding layer that will keep track of all cleanup
           actions to be performed.  */
-       expand_start_bindings (0);
+       expand_start_bindings (2);
 
        target_temp_slot_level = temp_slot_level;
 
@@ -8185,7 +8185,7 @@ expand_expr (exp, target, tmode, modifier)
 
        /* Start a new binding layer that will keep track of all cleanup
           actions to be performed.  */
-       expand_start_bindings (0);
+       expand_start_bindings (2);
 
        target_temp_slot_level = temp_slot_level;
 
index fcfdb06e4d2daf61f1197f9d739968b028675f23..1a16adc46fc810003d233a7f28c1a01a7cc5869e 100644 (file)
@@ -3168,15 +3168,30 @@ tail_recursion_args (actuals, formals)
 /* Generate the RTL code for entering a binding contour.
    The variables are declared one by one, by calls to `expand_decl'.
 
-   EXIT_FLAG is nonzero if this construct should be visible to
-   `exit_something'.  */
+   FLAGS is a bitwise or of the following flags:
+
+     1 - Nonzero if this construct should be visible to
+         `exit_something'.
+
+     2 - Nonzero if this contour does not require a
+        NOTE_INSN_BLOCK_BEG note.  Virtually all calls from
+        language-independent code should set this flag because they
+        will not create corresponding BLOCK nodes.  (There should be
+        a one-to-one correspondence between NOTE_INSN_BLOCK_BEG notes
+        and BLOCKs.)  If this flag is set, MARK_ENDS should be zero
+        when expand_end_bindings is called.  */
 
 void
-expand_start_bindings (exit_flag)
-     int exit_flag;
+expand_start_bindings (flags)
+     int flags;
 {
   struct nesting *thisblock = ALLOC_NESTING ();
-  rtx note = emit_note (NULL_PTR, NOTE_INSN_BLOCK_BEG);
+  rtx note;
+  int exit_flag = ((flags & 1) != 0);
+  int block_flag = ((flags & 2) == 0);
+
+  note = emit_note (NULL_PTR, 
+                   block_flag ? NOTE_INSN_BLOCK_BEG : NOTE_INSN_DELETED);
 
   /* Make an entry on block_stack for the block we are entering.  */
 
@@ -3228,7 +3243,7 @@ expand_start_target_temps ()
 
   /* Start a new binding layer that will keep track of all cleanup
      actions to be performed.  */
-  expand_start_bindings (0);
+  expand_start_bindings (2);
 
   target_temp_slot_level = temp_slot_level;
 }