From: Jakub Jelinek Date: Fri, 25 Jan 2008 09:12:57 +0000 (+0100) Subject: re PR middle-end/33333 (ICE with #pragma omp parallel for in try/catch statement) X-Git-Tag: releases/gcc-4.3.0~413 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=80e67011e309ed891ee8a5e736311b61be446895;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 392999fa36f6..5b208cbf9fbe 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-01-25 Jakub Jelinek + + PR middle-end/33333 + * gimplify.c (gimplify_omp_for): Gimplify OMP_FOR_PRE_BODY. + 2008-01-25 Golovanevsky Olga * ipa-struct-reorg.c (remove_str_allocs_in_func, remove_str_allocs): diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 1075d6544275..fe708471944b 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 a722cb3b3091..392f7a5993b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2008-01-25 Jakub Jelinek + 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 000000000000..ea5079b5e39e --- /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 (...) {} +}