Blame SOURCES/gcc32-rh226706.patch

6f1b0c
2007-02-13  Alexandre Oliva  <aoliva@redhat.com>
6f1b0c
6f1b0c
	* reload1.c (fixup_abnormal_edges): Backport relevant portion of
6f1b0c
	fix for PR rtl-optimization/23601.
6f1b0c
6f1b0c
	* g++.dg/eh/bz226706.C: New
6f1b0c
6f1b0c
--- gcc/reload1.c	2006-10-13 04:32:14.000000000 -0300
6f1b0c
+++ gcc/reload1.c	2007-02-13 03:22:08.000000000 -0200
6f1b0c
@@ -9524,7 +9524,10 @@ fixup_abnormal_edges ()
6f1b0c
 		 && insn != bb->head)
6f1b0c
 	    insn = PREV_INSN (insn);
6f1b0c
 	  if (GET_CODE (insn) != CALL_INSN && !can_throw_internal (insn))
6f1b0c
-	    abort ();
6f1b0c
+	    {
6f1b0c
+	      purge_dead_edges (bb);
6f1b0c
+	      continue;
6f1b0c
+	    }
6f1b0c
 	  bb->end = insn;
6f1b0c
 	  inserted = true;
6f1b0c
 	  insn = NEXT_INSN (insn);
6f1b0c
--- gcc/testsuite/g++.dg/eh/bz226706.C	1970-01-01 00:00:00.000000000 +0000
6f1b0c
+++ gcc/testsuite/g++.dg/eh/bz226706.C	2007-02-13 03:30:16.000000000 -0200
6f1b0c
@@ -0,0 +1,13 @@
6f1b0c
+/* { dg-do compile } */
6f1b0c
+/* { dg-options "-fnon-call-exceptions -fPIC -O2" } */
6f1b0c
+
6f1b0c
+void foo() {
6f1b0c
+     try {
6f1b0c
+        float y = 10;
6f1b0c
+        while (y > 0) {
6f1b0c
+            double z = (y / 10);
6f1b0c
+            y = z;
6f1b0c
+        }
6f1b0c
+     }
6f1b0c
+     catch (...) {}
6f1b0c
+}