Hi!

My understanding is that RT_MUST_NOT_THROW regions shouldn't ever
propagate exceptions to outer regions, they'd terminate the program
instead.
So, we don't need to mark outer regions as possibly needing to handle
throw.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2011-04-18  Jakub Jelinek  <ja...@redhat.com>

        PR tree-optimization/48611
        * tree-eh.c (note_eh_region_may_contain_throw): Don't propagate
        beyond ERT_MUST_NOT_THROW region.

--- gcc/tree-eh.c.jj    2011-01-25 18:40:08.000000000 +0100
+++ gcc/tree-eh.c       2011-04-18 15:28:17.000000000 +0200
@@ -849,6 +849,8 @@ note_eh_region_may_contain_throw (eh_reg
 {
   while (bitmap_set_bit (eh_region_may_contain_throw_map, region->index))
     {
+      if (region->type == ERT_MUST_NOT_THROW)
+       break;
       region = region->outer;
       if (region == NULL)
        break;

        Jakub

Reply via email to