re PR middle-end/40388 (another null pointer in remove_unreachable_regions)
authorJan Hubicka <jh@suse.cz>
Sat, 11 Jul 2009 19:03:52 +0000 (21:03 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sat, 11 Jul 2009 19:03:52 +0000 (19:03 +0000)
PR middle-end/48388
* except.c (can_be_reached_by_runtime): Test for NULL aka bitmap.
* g++.dg/torture/pr40388.C: New testcase.

From-SVN: r149516

gcc/ChangeLog
gcc/except.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/torture/pr40388.C [new file with mode: 0644]

index e84fabcd950fe50e15d3152fc4180c0e1eed70b2..5bdc4be4272bb735559f131bb9162b4ac993a4cc 100644 (file)
@@ -1,3 +1,8 @@
+2009-07-11  Jan Hubicka  <jh@suse.cz>
+
+       PR middle-end/48388
+       * except.c (can_be_reached_by_runtime): Test for NULL aka bitmap.
+
 2009-07-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/40713
index 95163cc356b6f07a5895e2db7069ac03993340c1..4fce0260ab90138a755cf06e53fe4e95220eeda0 100644 (file)
@@ -565,7 +565,7 @@ can_be_reached_by_runtime (sbitmap contains_stmt, struct eh_region_d *r)
       if (i->type != ERT_MUST_NOT_THROW)
        {
          bool found = TEST_BIT (contains_stmt, i->region_number);
-         if (!found)
+         if (!found && i->aka)
            EXECUTE_IF_SET_IN_BITMAP (i->aka, 0, n, bi)
              if (TEST_BIT (contains_stmt, n))
              {
index 87d57084e95d1aff818571606ea2f84004dd0bcc..36a9bd328fc70f26e6be5984e8fa088579f5b62e 100644 (file)
@@ -1,3 +1,8 @@
+2009-07-11  Jan Hubicka  <jh@suse.cz>
+
+       PR middle-end/48388
+       * g++.dg/torture/pr40388.C: New testcase.
+
 2009-07-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/40668
diff --git a/gcc/testsuite/g++.dg/torture/pr40388.C b/gcc/testsuite/g++.dg/torture/pr40388.C
new file mode 100644 (file)
index 0000000..0d74b9f
--- /dev/null
@@ -0,0 +1,42 @@
+void foo();
+
+struct A
+{
+  ~A()
+  {
+    try
+    {
+      foo();
+      foo();
+    }
+    catch (...)
+    {
+    }
+  }
+};
+
+void bar()
+{
+  A a1, a2;
+}
+void foo();
+
+struct A
+{
+  ~A()
+  {
+    try
+    {
+      foo();
+      foo();
+    }
+    catch (...)
+    {
+    }
+  }
+};
+
+void bar()
+{
+  A a1, a2;
+}