OSDN Git Service

PR fortran/27395
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 May 2006 12:51:33 +0000 (12:51 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 May 2006 12:51:33 +0000 (12:51 +0000)
* gimplify.c (gimplify_scan_omp_clauses): Compare OMP_CLAUSE_CODE
rather than TREE_CODE to OMP_CLAUSE_REDUCTION.  Set also GOVD_SEEN
bit for OMP_CLAUSE_REDUCTION_PLACEHOLDER.

* testsuite/libgomp.fortran/pr27395-1.f90: New test.
* testsuite/libgomp.fortran/pr27395-2.f90: New test.

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

gcc/ChangeLog
gcc/gimplify.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.fortran/pr27395-1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/pr27395-2.f90 [new file with mode: 0644]

index 6e73c30..902857b 100644 (file)
@@ -1,3 +1,10 @@
+2006-05-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/27395
+       * gimplify.c (gimplify_scan_omp_clauses): Compare OMP_CLAUSE_CODE
+       rather than TREE_CODE to OMP_CLAUSE_REDUCTION.  Set also GOVD_SEEN
+       bit for OMP_CLAUSE_REDUCTION_PLACEHOLDER.
+
 2006-05-02  Daniel Berlin  <dberlin@dberlin.org>
 
        Fix PR tree-optimization/26626
index af3d924..91b8881 100644 (file)
@@ -4510,11 +4510,11 @@ gimplify_scan_omp_clauses (tree *list_p, tree *pre_p, bool in_parallel)
              && DECL_BY_REFERENCE (TREE_OPERAND (decl, 0)))
            OMP_CLAUSE_DECL (c) = decl = TREE_OPERAND (decl, 0);
          omp_add_variable (ctx, decl, flags);
-         if (TREE_CODE (c) == OMP_CLAUSE_REDUCTION
+         if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
              && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
            {
              omp_add_variable (ctx, OMP_CLAUSE_REDUCTION_PLACEHOLDER (c),
-                               GOVD_LOCAL);
+                               GOVD_LOCAL | GOVD_SEEN);
              gimplify_omp_ctxp = ctx;
              push_gimplify_context ();
              gimplify_stmt (&OMP_CLAUSE_REDUCTION_INIT (c));
index 76d5631..d04194c 100644 (file)
@@ -1,3 +1,9 @@
+2006-05-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/27395
+       * testsuite/libgomp.fortran/pr27395-1.f90: New test.
+       * testsuite/libgomp.fortran/pr27395-2.f90: New test.
+
 2006-05-02  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/26943
diff --git a/libgomp/testsuite/libgomp.fortran/pr27395-1.f90 b/libgomp/testsuite/libgomp.fortran/pr27395-1.f90
new file mode 100644 (file)
index 0000000..380a107
--- /dev/null
@@ -0,0 +1,31 @@
+! PR fortran/27395
+! { dg-do run }
+
+program pr27395_1
+  implicit none
+  integer, parameter :: n=10,m=1001
+  integer :: i
+  integer, dimension(n) :: sumarray
+  call foo(n,m,sumarray)
+  do i=1,n
+    if (sumarray(i).ne.m*i) call abort
+  end do
+end program pr27395_1
+
+subroutine foo(n,m,sumarray)
+  use omp_lib, only : omp_get_thread_num
+  implicit none
+  integer, intent(in) :: n,m
+  integer, dimension(n), intent(out) :: sumarray
+  integer :: i,j
+  sumarray(:)=0
+!$OMP PARALLEL DEFAULT(shared) NUM_THREADS(4)
+!$OMP DO PRIVATE(j,i), REDUCTION(+:sumarray)
+  do j=1,m
+    do i=1,n
+      sumarray(i)=sumarray(i)+i
+    end do
+  end do
+!$OMP END DO
+!$OMP END PARALLEL
+end subroutine foo
diff --git a/libgomp/testsuite/libgomp.fortran/pr27395-2.f90 b/libgomp/testsuite/libgomp.fortran/pr27395-2.f90
new file mode 100644 (file)
index 0000000..b3cb255
--- /dev/null
@@ -0,0 +1,30 @@
+! PR fortran/27395
+! { dg-do run }
+
+program pr27395_2
+  implicit none
+  integer, parameter :: n=10,m=1001
+  integer :: i
+  call foo(n,m)
+end program pr27395_2
+
+subroutine foo(n,m)
+  use omp_lib, only : omp_get_thread_num
+  implicit none
+  integer, intent(in) :: n,m
+  integer :: i,j
+  integer, dimension(n) :: sumarray
+  sumarray(:)=0
+!$OMP PARALLEL DEFAULT(shared) NUM_THREADS(4)
+!$OMP DO PRIVATE(j,i), REDUCTION(+:sumarray)
+  do j=1,m
+    do i=1,n
+      sumarray(i)=sumarray(i)+i
+    end do
+  end do
+!$OMP END DO
+!$OMP END PARALLEL
+  do i=1,n
+    if (sumarray(i).ne.m*i) call abort
+  end do
+end subroutine foo