aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-09-03 15:03:56 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2008-09-03 15:03:56 +0200
commit05a26161b47e20ef03df11724609d82f372a37f7 (patch)
tree969a011521d5e52852f69db9aefe7bab4454aa42 /gcc
parenta6340be14474c7cdd6637413be9e25f9e5e550d1 (diff)
downloadgcc-05a26161b47e20ef03df11724609d82f372a37f7.zip
gcc-05a26161b47e20ef03df11724609d82f372a37f7.tar.gz
gcc-05a26161b47e20ef03df11724609d82f372a37f7.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/gimple.h1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr37436.C15
-rw-r--r--gcc/tree-inline.c6
5 files changed, 34 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 894a32d..e0275e1 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 ca8e644..f8af057 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 3cb12d1..225c999 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 0000000..e2cfe44
--- /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 5919b2b..3b77c0e 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 ();
}