From: Jeffrey A Law Date: Fri, 28 Nov 1997 03:10:10 +0000 (+0000) Subject: flow.c (find_basic_blocks): Handle cfg issues for rethrows and nested exceptions... X-Git-Tag: releases/libf2c-0.5.21~476 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=586a5f993abceb8ea62bdd39f2e0875ee11baace;p=thirdparty%2Fgcc.git flow.c (find_basic_blocks): Handle cfg issues for rethrows and nested exceptions correctly. * flow.c (find_basic_blocks): Handle cfg issues for rethrows and nested exceptions correctly. From-SVN: r16812 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index da9803756953..3587eb5eb98b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ Thu Nov 27 12:20:19 1997 Jeffrey A Law (law@cygnus.com) + * flow.c (find_basic_blocks): Handle cfg issues for rethrows and + nested exceptions correctly. + * unroll.c (find_splittable_givs): Don't split givs with a dest_reg that was created by loop. diff --git a/gcc/flow.c b/gcc/flow.c index ed66ce7c4ef5..27409de005b8 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -472,10 +472,15 @@ find_basic_blocks (f, nonlocal_label_list) /* If we encounter a CALL_INSN, note which exception handler it might pass control to. + Because we do rethrows by loading the address of a label into + __eh_pc and throwing, we need to treat labels as potentially + jumping to exception handlers. + If doing asynchronous exceptions, record the active EH handler for every insn, since most insns can throw. */ else if (eh_note && (asynchronous_exceptions + || code == CODE_LABEL || (GET_CODE (insn) == CALL_INSN && ! find_reg_note (insn, REG_RETVAL, NULL_RTX)))) active_eh_handler[INSN_UID (insn)] = XEXP (eh_note, 0);