re PR middle-end/16558 (bogus missing-return warning)

PR middle-end/16558
	PR middle-end/19583
	* gimple-low.c (block_may_fallthru): TRY_FINALLY_EXPR only falls
	through if both operands fall through.

From-SVN: r94381
This commit is contained in:
Ian Lance Taylor 2005-01-28 17:32:57 +00:00 committed by Ian Lance Taylor
parent 91e390fe3d
commit 09f8cf2de9
2 changed files with 17 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2005-01-28 Ian Lance Taylor <ian@airs.com>
PR middle-end/16558
PR middle-end/19583
* gimple-low.c (block_may_fallthru): TRY_FINALLY_EXPR only falls
through if both operands fall through.
2005-01-28 Kazu Hirata <kazu@cs.umass.edu>
* cse.c (fold_rtx) <PC>: Don't optimize.
@ -95,7 +102,7 @@
* tree-ssa-dom.c (tree_ssa_dominator_optimize): Only iterate at -O2
and better.
2005-01-27 Ian Lance Taylor <ian@c2micro.com>
2005-01-27 Ian Lance Taylor <ian@airs.com>
PR middle-end/19583
* gimple-low.c (try_catch_may_fallthru): New static function.

View File

@ -348,7 +348,15 @@ block_may_fallthru (tree block)
return try_catch_may_fallthru (stmt);
case TRY_FINALLY_EXPR:
return block_may_fallthru (TREE_OPERAND (stmt, 1));
/* The finally clause is always executed after the try clause,
so if it does not fall through, then the try-finally will not
fall through. Otherwise, if the try clause does not fall
through, then when the finally clause falls through it will
resume execution wherever the try clause was going. So the
whole try-finally will only fall through if both the try
clause and the finally clause fall through. */
return (block_may_fallthru (TREE_OPERAND (stmt, 0))
&& block_may_fallthru (TREE_OPERAND (stmt, 1)));
case MODIFY_EXPR:
if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR)