diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 30e39a44b4f356367eff7dee8ce263d1d5074032..ecd9e053b8488265299c3e5293b6ed48ad2910b3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Thu Oct  8 17:00:18 1998  Richard Henderson  <rth@cygnus.com>
+
+	* flow.c (find_basic_blocks): Correctly determine when a call
+	is within an exception region.
+
 Thu Oct  8 17:15:04 1998  Jeffrey A Law  (law@cygnus.com)
 
 	* Makefile.in (cpplib.o): Use unlibsubdir.
diff --git a/gcc/flow.c b/gcc/flow.c
index 773aaf2be969d269b3f9c4dc9caef046d2f86a18..bbf21f1584fcbd04f2649a0b0484cd6ccc07fb18 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -314,6 +314,7 @@ find_basic_blocks (f, nregs, file, live_reachable_p)
     register RTX_CODE prev_code = JUMP_INSN;
     register RTX_CODE code;
     int eh_region = 0;
+    int call_had_abnormal_edge = 0;
 
     max_uid_for_flow = 0;
 
@@ -335,7 +336,7 @@ find_basic_blocks (f, nregs, file, live_reachable_p)
 	      i++;
 	    else if (prev_code == CALL_INSN)
 	      {
-		if (nonlocal_label_list != 0 || eh_region)
+		if (call_had_abnormal_edge)
 		  i++;
 		else
 		  {
@@ -360,6 +361,10 @@ find_basic_blocks (f, nregs, file, live_reachable_p)
 	if (code == CALL_INSN && in_libcall_block)
 	  code = INSN;
 
+        /* Record whether this call created an edge.  */
+        if (code == CALL_INSN)
+	  call_had_abnormal_edge = (nonlocal_label_list != 0 || eh_region);
+
 	if (code != NOTE)
 	  prev_code = code;
 	else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG)