OSDN Git Service

PR fortran/42866
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Jan 2010 09:47:45 +0000 (09:47 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Jan 2010 09:47:45 +0000 (09:47 +0000)
* omp-low.c (expand_omp_sections): Only use single_pred if
l2_bb is single_pred_p.

* testsuite/libgomp.fortran/allocatable5.f90: New test.

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

gcc/ChangeLog
gcc/omp-low.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.fortran/allocatable5.f90 [new file with mode: 0644]

index ca8d69a..b97384a 100644 (file)
@@ -1,3 +1,9 @@
+2010-01-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/42866
+       * omp-low.c (expand_omp_sections): Only use single_pred if
+       l2_bb is single_pred_p.
+
 2010-01-25  Christian Bruel  <christian.bruel@st.com>
 
        PR target/42841
index 3170031..bb1a86a 100644 (file)
@@ -4663,7 +4663,7 @@ expand_omp_sections (struct omp_region *region)
   l2_bb = region->exit;
   if (exit_reachable)
     {
-      if (single_pred (l2_bb) == l0_bb)
+      if (single_pred_p (l2_bb) && single_pred (l2_bb) == l0_bb)
        l2 = gimple_block_label (l2_bb);
       else
        {
index a20b497..4b20087 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/42866
+       * testsuite/libgomp.fortran/allocatable5.f90: New test.
+
 2010-01-20  Paolo Bonzini  <bonzini@gnu.org>
 
        * configure.ac: Test for executability of GFORTRAN.
diff --git a/libgomp/testsuite/libgomp.fortran/allocatable5.f90 b/libgomp/testsuite/libgomp.fortran/allocatable5.f90
new file mode 100644 (file)
index 0000000..4180930
--- /dev/null
@@ -0,0 +1,17 @@
+! PR fortran/42866
+! { dg-do run }
+
+program pr42866
+  integer, allocatable :: a(:)
+  allocate (a(16))
+  a = 0
+  !$omp parallel
+    !$omp sections reduction(+:a)
+      a = a + 1
+    !$omp section
+      a = a + 2
+    !$omp end sections
+  !$omp end parallel
+  if (any (a.ne.3)) call abort
+  deallocate (a)
+end