diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gimple-low.c | 19 |
2 files changed, 16 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8243c2f..37d3e05 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-02-09 Ian Lance Taylor <ian@airs.com> + + PR middle-end/19583 + * gimple-low.c (try_catch_may_fallthru): In EH_FILTER_EXPR case, + just check whether EH_FILTER_FAILURE falls through. + 2005-02-09 Andreas Krebbel <krebbel1@de.ibm.com> * gcc/haifa-sched.c (schedule_block): Make queued sched group diff --git a/gcc/gimple-low.c b/gcc/gimple-low.c index 6e60aeb..f3e70ee 100644 --- a/gcc/gimple-low.c +++ b/gcc/gimple-low.c @@ -291,15 +291,16 @@ try_catch_may_fallthru (tree stmt) return false; case EH_FILTER_EXPR: - /* If the exception does not match EH_FILTER_TYPES, we will - execute EH_FILTER_FAILURE, and we will fall through if that - falls through. If the exception does match EH_FILTER_TYPES, - we will fall through. We don't know which exceptions may be - generated, so we just check for EH_FILTER_TYPES being NULL, - in which case we know that that the exception does not - match. */ - return (EH_FILTER_TYPES (tsi_stmt (i)) != NULL - || block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i)))); + /* The exception filter expression only matters if there is an + exception. If the exception does not match EH_FILTER_TYPES, + we will execute EH_FILTER_FAILURE, and we will fall through + if that falls through. If the exception does match + EH_FILTER_TYPES, the stack unwinder will continue up the + stack, so we will not fall through. We don't know whether we + will throw an exception which matches EH_FILTER_TYPES or not, + so we just ignore EH_FILTER_TYPES and assume that we might + throw an exception which doesn't match. */ + return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i))); default: /* This case represents statements to be executed when an |