aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-09-17 22:01:23 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1999-09-17 22:01:23 +0000
commit8e91754ed432246436075871d84d87de2390c405 (patch)
tree9b627a788d95d6fe1744e179f42c17925b07a34f /gcc
parent05ca5990713469bc7ca0b473c10d9698d688cf6b (diff)
downloadgcc-8e91754ed432246436075871d84d87de2390c405.zip
gcc-8e91754ed432246436075871d84d87de2390c405.tar.gz
gcc-8e91754ed432246436075871d84d87de2390c405.tar.bz2
stmt.c (expand_start_bindings): Allow callers to pass a flag indicating that no NOTE_INSN_BLOCK_BEG note is...
* 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/except.c2
-rw-r--r--gcc/expr.c6
-rw-r--r--gcc/stmt.c27
4 files changed, 33 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4d0035d..f3d7e9f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/except.c b/gcc/except.c
index f063c9a..3ecf7fc 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -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 ();
diff --git a/gcc/expr.c b/gcc/expr.c
index daa06d0..880e347 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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;
diff --git a/gcc/stmt.c b/gcc/stmt.c
index fcfdb06..1a16adc 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -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;
}