diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 894a32d47959..e0275e181f8f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-09-03 Jakub Jelinek + + 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 From Michael Frysinger diff --git a/gcc/gimple.h b/gcc/gimple.h index ca8e64404e26..f8af057dfea8 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 3cb12d1406f2..225c99943f76 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-09-03 Jakub Jelinek + + PR c++/37436 + * g++.dg/gomp/pr37436.C: New test. + 2008-09-03 Bernd Schmidt From Mike Frysinger diff --git a/gcc/testsuite/g++.dg/gomp/pr37436.C b/gcc/testsuite/g++.dg/gomp/pr37436.C new file mode 100644 index 000000000000..e2cfe44de8ef --- /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 5919b2be0c2d..3b77c0e68ae6 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 (); }