aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-01-25 10:12:57 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2008-01-25 10:12:57 +0100
commit80e67011e309ed891ee8a5e736311b61be446895 (patch)
tree40d42db12dc1add7a40ae92b21f2e250b45ff8a6 /gcc
parent765d600ac5d94a978c00cd791c95ea75d1673e66 (diff)
downloadgcc-80e67011e309ed891ee8a5e736311b61be446895.zip
gcc-80e67011e309ed891ee8a5e736311b61be446895.tar.gz
gcc-80e67011e309ed891ee8a5e736311b61be446895.tar.bz2
re PR middle-end/33333 (ICE with #pragma omp parallel for in try/catch statement)
PR middle-end/33333 * gimplify.c (gimplify_omp_for): Gimplify OMP_FOR_PRE_BODY. * g++.dg/gomp/pr33333.C: New test. From-SVN: r131820
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/gimplify.c4
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr33333.C19
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 392999f..5b208cb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2008-01-25 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/33333
+ * gimplify.c (gimplify_omp_for): Gimplify OMP_FOR_PRE_BODY.
+
2008-01-25 Golovanevsky Olga <olga@il.ibm.com>
* ipa-struct-reorg.c (remove_str_allocs_in_func, remove_str_allocs):
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 1075d65..fe70847 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -5330,6 +5330,10 @@ gimplify_omp_for (tree *expr_p, tree *pre_p)
else
var = decl;
+ /* If OMP_FOR is re-gimplified, ensure all variables in pre-body
+ are noticed. */
+ gimplify_stmt (&OMP_FOR_PRE_BODY (for_stmt));
+
ret |= gimplify_expr (&GENERIC_TREE_OPERAND (t, 1),
&OMP_FOR_PRE_BODY (for_stmt),
NULL, is_gimple_val, fb_rvalue);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a722cb3..392f7a5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2008-01-25 Jakub Jelinek <jakub@redhat.com>
+ PR middle-end/33333
+ * g++.dg/gomp/pr33333.C: New test.
+
PR preprocessor/34692
* gcc.dg/cpp/pr34692.c: New test.
* gcc.dg/gomp/pr34692.c: New test.
diff --git a/gcc/testsuite/g++.dg/gomp/pr33333.C b/gcc/testsuite/g++.dg/gomp/pr33333.C
new file mode 100644
index 0000000..ea5079b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/pr33333.C
@@ -0,0 +1,19 @@
+// PR middle-end/33333
+// { dg-do compile }
+
+struct A
+{
+ int n;
+ void foo ();
+};
+
+void
+A::foo ()
+{
+ try
+ {
+ #pragma omp parallel for
+ for (int i = 0; i < n; ++i)
+ ;
+ } catch (...) {}
+}