]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/37436 (arm-cross-g++. internal compiler error: in extract_insn, at recog...
authorJakub Jelinek <jakub@redhat.com>
Wed, 3 Sep 2008 13:03:56 +0000 (15:03 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 3 Sep 2008 13:03:56 +0000 (15:03 +0200)
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
gcc/gimple.h
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/gomp/pr37436.C [new file with mode: 0644]
gcc/tree-inline.c

index 894a32d47959703516a651a5884c2c932406375c..e0275e181f8f7c34b80f92b22b523beecf4b67b9 100644 (file)
@@ -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>
index ca8e64404e2656e8c2314b0806886ced1c398630..f8af057dfea81235e550afcfaa66822851d1bbdd 100644 (file)
@@ -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;
 
index 3cb12d1406f2e524acb47aa5eda26d012e6d0ff0..225c99943f76450d2297c4e7e2f309197dd85957 100644 (file)
@@ -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 (file)
index 0000000..e2cfe44
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/37436
+// { dg-do compile }
+// { dg-options "-fopenmp" }
+
+struct A
+{
+  A ();
+  int i;
+};
+
+A::A ()
+{
+#pragma omp critical
+  i++;
+}
index 5919b2be0c2dcddb766d14de8186d41d01fa4625..3b77c0e68ae6f73d7c7503ffbf25123e026f643f 100644 (file)
@@ -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 ();
        }