From 56d4428505c7dd85bf6a49dd9b22497331b39341 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 12 Feb 2002 22:39:42 +0100 Subject: jump.c (never_reached_warning): Add finish argument. * jump.c (never_reached_warning): Add finish argument. If finish is NULL, stop on CODE_LABEL, otherwise stop before first real insn after end. * rtl.h (never_reached_warning): Adjust prototype. * cse.c (cse_insn): Pass NULL as finish to never_reached_warning. * cfgrtl.c (flow_delete_block): Pass b->end as finish to never_reached_warning. * gcc.dg/Wunreachable-1.c: New test. * gcc.dg/Wunreachable-2.c: New test. From-SVN: r49713 --- gcc/jump.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'gcc/jump.c') diff --git a/gcc/jump.c b/gcc/jump.c index fcb3c61..fc6bef0 100644 --- a/gcc/jump.c +++ b/gcc/jump.c @@ -1913,13 +1913,12 @@ delete_for_peephole (from, to) so it's possible to get spurious warnings from this. */ void -never_reached_warning (avoided_insn) - rtx avoided_insn; +never_reached_warning (avoided_insn, finish) + rtx avoided_insn, finish; { rtx insn; rtx a_line_note = NULL; - int two_avoided_lines = 0; - int contains_insn = 0; + int two_avoided_lines = 0, contains_insn = 0, reached_end = 0; if (! warn_notreached) return; @@ -1929,10 +1928,11 @@ never_reached_warning (avoided_insn) for (insn = avoided_insn; insn != NULL; insn = NEXT_INSN (insn)) { - if (GET_CODE (insn) == CODE_LABEL) + if (finish == NULL && GET_CODE (insn) == CODE_LABEL) break; - else if (GET_CODE (insn) == NOTE /* A line number note? */ - && NOTE_LINE_NUMBER (insn) >= 0) + + if (GET_CODE (insn) == NOTE /* A line number note? */ + && NOTE_LINE_NUMBER (insn) >= 0) { if (a_line_note == NULL) a_line_note = insn; @@ -1941,7 +1941,14 @@ never_reached_warning (avoided_insn) != NOTE_LINE_NUMBER (insn)); } else if (INSN_P (insn)) - contains_insn = 1; + { + if (reached_end) + break; + contains_insn = 1; + } + + if (insn == finish) + reached_end = 1; } if (two_avoided_lines && contains_insn) warning_with_file_and_line (NOTE_SOURCE_FILE (a_line_note), -- cgit v1.1