OSDN Git Service

PR middle-end/48388
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Jul 2009 19:03:52 +0000 (19:03 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Jul 2009 19:03:52 +0000 (19:03 +0000)
* except.c (can_be_reached_by_runtime): Test for NULL aka bitmap.
* g++.dg/torture/pr40388.C: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@149516 138bc75d-0d04-0410-961f-82ee72b054a4

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

index e84fabc..5bdc4be 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 95163cc..4fce026 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 87d5708..36a9bd3 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;
+}