PR c++/37436
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Sep 2008 13:03:56 +0000 (13:03 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Sep 2008 13:03:56 +0000 (13:03 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@139937 138bc75d-0d04-0410-961f-82ee72b054a4

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 894a32d..e0275e1 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 ca8e644..f8af057 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 3cb12d1..225c999 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 5919b2b..3b77c0e 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 ();
        }