diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 894a32d47959703516a651a5884c2c932406375c..e0275e181f8f7c34b80f92b22b523beecf4b67b9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-09-03 Jakub Jelinek <jakub@redhat.com> + + PR c++/37436 + * gimple.h (gimple_has_substatements): GIMPLE_OMP_CRITICAL has + substatements. + * tree-inline.c (remap_gimple_stmt): Handle GIMPLE_OMP_CRITICAL. + 2008-09-03 Bernd Schmidt <bernd.schmidt@analog.com> From Michael Frysinger <michael.frysinger@analog.com> diff --git a/gcc/gimple.h b/gcc/gimple.h index ca8e64404e2656e8c2314b0806886ced1c398630..f8af057dfea81235e550afcfaa66822851d1bbdd 100644 --- a/gcc/gimple.h +++ b/gcc/gimple.h @@ -1052,6 +1052,7 @@ gimple_has_substatements (gimple g) case GIMPLE_OMP_TASK: case GIMPLE_OMP_SECTIONS: case GIMPLE_OMP_SINGLE: + case GIMPLE_OMP_CRITICAL: case GIMPLE_WITH_CLEANUP_EXPR: return true; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3cb12d1406f2e524acb47aa5eda26d012e6d0ff0..225c99943f76450d2297c4e7e2f309197dd85957 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-09-03 Jakub Jelinek <jakub@redhat.com> + + PR c++/37436 + * g++.dg/gomp/pr37436.C: New test. + 2008-09-03 Bernd Schmidt <bernd.schmidt@analog.com> From Mike Frysinger <michael.frysinger@analog.com> diff --git a/gcc/testsuite/g++.dg/gomp/pr37436.C b/gcc/testsuite/g++.dg/gomp/pr37436.C new file mode 100644 index 0000000000000000000000000000000000000000..e2cfe44de8ef27f2665c692b96dc624677620af4 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr37436.C @@ -0,0 +1,15 @@ +// PR c++/37436 +// { dg-do compile } +// { dg-options "-fopenmp" } + +struct A +{ + A (); + int i; +}; + +A::A () +{ +#pragma omp critical + i++; +} diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 5919b2be0c2dcddb766d14de8186d41d01fa4625..3b77c0e68ae6f73d7c7503ffbf25123e026f643f 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1156,6 +1156,12 @@ remap_gimple_stmt (gimple stmt, copy_body_data *id) (s1, gimple_omp_single_clauses (stmt)); break; + case GIMPLE_OMP_CRITICAL: + s1 = remap_gimple_seq (gimple_omp_body (stmt), id); + copy + = gimple_build_omp_critical (s1, gimple_omp_critical_name (stmt)); + break; + default: gcc_unreachable (); }