re PR middle-end/26913 (ICE with -fopenmp and -O1)
authorJakub Jelinek <jakub@redhat.com>
Wed, 26 Apr 2006 08:24:28 +0000 (10:24 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 26 Apr 2006 08:24:28 +0000 (10:24 +0200)
PR middle-end/26913
* tree-cfg.c (find_outermost_region_in_block): Handle RESX_EXPR.

* g++.dg/gomp/pr26913.C: New test.

From-SVN: r113270

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/gomp/pr26913.C [new file with mode: 0644]
gcc/tree-cfg.c

index 0a3504d15bfe24b2854c646eb48ed1cc587cf2e7..ebec042da7028acb5b1e15cdcae33551cadaf174 100644 (file)
@@ -1,5 +1,8 @@
 2006-04-26  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/26913
+       * tree-cfg.c (find_outermost_region_in_block): Handle RESX_EXPR.
+
        PR c/25996
        * c-parser.c (c_parser_omp_for_loop): Don't call c_finish_omp_for if
        either decl or init is error_mark_node.
index c59270d4be8f4206403e53f9792513e6489ccdbd..e3f19e04c628b784d302b3df661b1ddd5c21662a 100644 (file)
@@ -1,5 +1,8 @@
 2006-04-26  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/26913
+       * g++.dg/gomp/pr26913.C: New test.
+
        PR c/25996
        * gcc.dg/gomp/pr25996.c: New test.
        * g++.dg/gomp/pr25996.C: New test.
diff --git a/gcc/testsuite/g++.dg/gomp/pr26913.C b/gcc/testsuite/g++.dg/gomp/pr26913.C
new file mode 100644 (file)
index 0000000..4f5bb28
--- /dev/null
@@ -0,0 +1,19 @@
+// PR middle-end/26913
+
+struct A
+{
+  ~A () throw ();
+};
+
+void foo (A);
+
+A bar () throw ();
+
+void baz ()
+{
+#pragma omp parallel
+  {
+    A a;
+    foo (bar ());
+  }
+}
index 7913e5288053949fe382a66df42d921b7b0ed05a..9ae48eb4b2b6a6e64ec9bc777a2b1228bee44b83 100644 (file)
@@ -4744,7 +4744,10 @@ find_outermost_region_in_block (struct function *src_cfun,
       tree stmt = bsi_stmt (si);
       int stmt_region;
 
-      stmt_region = lookup_stmt_eh_region_fn (src_cfun, stmt);
+      if (TREE_CODE (stmt) == RESX_EXPR)
+       stmt_region = TREE_INT_CST_LOW (TREE_OPERAND (stmt, 0));
+      else
+       stmt_region = lookup_stmt_eh_region_fn (src_cfun, stmt);
       if (stmt_region > 0)
        {
          if (region < 0)