diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2003-03-05 23:56:15 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2003-03-05 18:56:15 -0500 |
commit | cda26058313680b6eda34e5b86a59c96363f918a (patch) | |
tree | 9a89d47cfdd84a5c2671e6971e9453d469aaa4e8 | |
parent | c965b169438a609791fa0b0922b8aea3adb37c4d (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/stmt.c | 19 |
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; |