summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2003-03-05 23:56:15 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2003-03-05 18:56:15 -0500
commitcda26058313680b6eda34e5b86a59c96363f918a (patch)
tree9a89d47cfdd84a5c2671e6971e9453d469aaa4e8
parentc965b169438a609791fa0b0922b8aea3adb37c4d (diff)
downloadgcc-cda26058313680b6eda34e5b86a59c96363f918a.tar.gz
stmt.c (fixup_gotos): Change meaning of DONT_JUMP_IN.
* stmt.c (fixup_gotos): Change meaning of DONT_JUMP_IN. (expand_end_bindings): Likewise. From-SVN: r63874
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/stmt.c19
2 files changed, 16 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 14ede67987a..8a7b8b3f6c5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Wed Mar 5 18:55:02 2003 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * stmt.c (fixup_gotos): Change meaning of DONT_JUMP_IN.
+ (expand_end_bindings): Likewise.
+
2003-03-05 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* pa.md (return_external_pic): Add !TARGET_PA_20 to constraint.
diff --git a/gcc/stmt.c b/gcc/stmt.c
index e4789a79694..74d5f3de38c 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -947,9 +947,9 @@ expand_fixups (first_insn)
Gotos that jump out of this contour must restore the
stack level and do the cleanups before actually jumping.
- DONT_JUMP_IN nonzero means report error there is a jump into this
- contour from before the beginning of the contour.
- This is also done if STACK_LEVEL is nonzero. */
+ DONT_JUMP_IN positive means report error if there is a jump into this
+ contour from before the beginning of the contour. This is also done if
+ STACK_LEVEL is nonzero unless DONT_JUMP_IN is negative. */
static void
fixup_gotos (thisblock, stack_level, cleanup_list, first_insn, dont_jump_in)
@@ -991,7 +991,8 @@ fixup_gotos (thisblock, stack_level, cleanup_list, first_insn, dont_jump_in)
It detects only a problem with the innermost block
around the label. */
if (f->target != 0
- && (dont_jump_in || stack_level || cleanup_list)
+ && (dont_jump_in > 0 || (dont_jump_in == 0 && stack_level)
+ || cleanup_list)
&& INSN_UID (first_insn) < INSN_UID (f->target_rtl)
&& INSN_UID (first_insn) > INSN_UID (f->before_jump)
&& ! DECL_ERROR_ISSUED (f->target))
@@ -3714,8 +3715,10 @@ warn_about_unused_variables (vars)
MARK_ENDS is nonzero if we should put a note at the beginning
and end of this binding contour.
- DONT_JUMP_IN is nonzero if it is not valid to jump into this contour.
- (That is true automatically if the contour has a saved stack level.) */
+ DONT_JUMP_IN is positive if it is not valid to jump into this contour,
+ zero if we can jump into this contour only if it does not have a saved
+ stack level, and negative if we are not to check for invalid use of
+ labels (because the front end does that). */
void
expand_end_bindings (vars, mark_ends, dont_jump_in)
@@ -3750,8 +3753,8 @@ expand_end_bindings (vars, mark_ends, dont_jump_in)
/* Don't allow jumping into a block that has a stack level.
Cleanups are allowed, though. */
- if (dont_jump_in
- || thisblock->data.block.stack_level != 0)
+ if (dont_jump_in > 0
+ || (dont_jump_in == 0 && thisblock->data.block.stack_level != 0))
{
struct label_chain *chain;