re PR c/8828 (gcc reports some code is unreachable when it is not)

2003-02-22  Steven Bosscher  <s.bosscher@student.tudelft.nl>

	PR c/8828
	* jump.c (never_reached_warning): Don't fall through BARRRIER
	insns.  Update comments to reflect what the function really does.

From-SVN: r63275
This commit is contained in:
Steven Bosscher 2003-02-22 06:35:28 +01:00 committed by Andreas Jaeger
parent 26182e150e
commit b65538149b
2 changed files with 16 additions and 15 deletions

View File

@ -4,8 +4,8 @@
* toplev.c (process_options): If flag_detailed_statistics is set,
then set time_report as well.
PR c/8828
* jump.c (never_reached_warning): Don't fall through BARRRIER
PR c/8828
* jump.c (never_reached_warning): Don't fall through BARRRIER
insns. Update comments to reflect what the function really does.
2003-02-21 Roger Sayle <roger@eyesopen.com>

View File

@ -1706,9 +1706,9 @@ delete_computation (insn)
}
/* Delete insn INSN from the chain of insns and update label ref counts
and delete insns now unreachable.
and delete insns now unreachable.
Returns the first insn after INSN that was not deleted.
Returns the first insn after INSN that was not deleted.
Usage of this instruction is deprecated. Use delete_insn instead and
subsequent cfg_cleanup pass to delete unreachable code if needed. */
@ -1893,14 +1893,14 @@ delete_for_peephole (from, to)
is also an unconditional jump in that case. */
}
/* We have determined that INSN is never reached, and are about to
delete it. Print a warning if the user asked for one.
/* We have determined that AVOIDED_INSN is never reached, and are
about to delete it. If the insn chain between AVOIDED_INSN and
FINISH contains more than one line from the current function, and
contains at least one operation, print a warning if the user asked
for it. If FINISH is NULL, look between AVOIDED_INSN and a LABEL.
To try to make this warning more useful, this should only be called
once per basic block not reached, and it only warns when the basic
block contains more than one line from the current function, and
contains at least one operation. CSE and inlining can duplicate insns,
so it's possible to get spurious warnings from this. */
CSE and inlining can duplicate insns, so it's possible to get
spurious warnings from this. */
void
never_reached_warning (avoided_insn, finish)
@ -1910,15 +1910,16 @@ never_reached_warning (avoided_insn, finish)
rtx a_line_note = NULL;
int two_avoided_lines = 0, contains_insn = 0, reached_end = 0;
if (! warn_notreached)
if (!warn_notreached)
return;
/* Scan forwards, looking at LINE_NUMBER notes, until
we hit a LABEL or we run out of insns. */
/* Scan forwards, looking at LINE_NUMBER notes, until we hit a LABEL
in case FINISH is NULL, otherwise until we run out of insns. */
for (insn = avoided_insn; insn != NULL; insn = NEXT_INSN (insn))
{
if (finish == NULL && GET_CODE (insn) == CODE_LABEL)
if ((finish == NULL && GET_CODE (insn) == CODE_LABEL)
|| GET_CODE (insn) == BARRIER)
break;
if (GET_CODE (insn) == NOTE /* A line number note? */