From 05a26161b47e20ef03df11724609d82f372a37f7 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 3 Sep 2008 15:03:56 +0200 Subject: [PATCH] re PR target/37436 (arm-cross-g++. internal compiler error: in extract_insn, at recog.c:1990) PR c++/37436 * gimple.h (gimple_has_substatements): GIMPLE_OMP_CRITICAL has substatements. * tree-inline.c (remap_gimple_stmt): Handle GIMPLE_OMP_CRITICAL. * g++.dg/gomp/pr37436.C: New test. From-SVN: r139937 --- gcc/ChangeLog | 7 +++++++ gcc/gimple.h | 1 + gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/gomp/pr37436.C | 15 +++++++++++++++ gcc/tree-inline.c | 6 ++++++ 5 files changed, 34 insertions(+) create mode 100644 gcc/testsuite/g++.dg/gomp/pr37436.C 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 <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 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 <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 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 (); } -- GitLab