re PR fortran/18918 (Eventually support Fortran 2008's coarrays [co-arrays])
authorTobias Burnus <burnus@net-b.de>
Tue, 31 May 2011 18:40:55 +0000 (20:40 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Tue, 31 May 2011 18:40:55 +0000 (20:40 +0200)
2011-05-31  Tobias Burnus  <burnus@net-b.de>

        PR fortran/18918
        * trans-array.c (gfc_trans_dummy_array_bias): Handle
        cobounds of assumed-shape arrays.

2011-05-31  Tobias Burnus  <burnus@net-b.de>

        PR fortran/18918
        * gfortran.dg/coarray/dummy_1.f90: New.

From-SVN: r174504

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/coarray/dummy_1.f90 [new file with mode: 0644]

index ba7d7be0b0e8abb2cdf62fd73bb6a7b0c9e9cacc..b962ff55acc78258c439d1f5f56dac8b30682623 100644 (file)
@@ -1,3 +1,9 @@
+2011-05-31  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/18918
+       * trans-array.c (gfc_trans_dummy_array_bias): Handle
+       cobounds of assumed-shape arrays.
+
 2011-05-31  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/18918
index 0c6c63896eae0660cae77f84db7f06b57745a45f..c7aeadb3c8bda3fe334d55e4357f0ba9bd638213 100644 (file)
@@ -5232,6 +5232,8 @@ gfc_trans_dummy_array_bias (gfc_symbol * sym, tree tmpdesc,
        }
     }
 
+  gfc_trans_array_cobounds (type, &init, sym);
+
   /* Set the offset.  */
   if (TREE_CODE (GFC_TYPE_ARRAY_OFFSET (type)) == VAR_DECL)
     gfc_add_modify (&init, GFC_TYPE_ARRAY_OFFSET (type), offset);
index 6765c11dd1e23379a6a16ef2c6be176c75e9acf8..f9fae6282e4b2eef640473abddadc13fe244d556 100644 (file)
@@ -1,3 +1,8 @@
+2011-05-31  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/18918
+       * gfortran.dg/coarray/dummy_1.f90: New.
+
 2011-05-31  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/18918
diff --git a/gcc/testsuite/gfortran.dg/coarray/dummy_1.f90 b/gcc/testsuite/gfortran.dg/coarray/dummy_1.f90
new file mode 100644 (file)
index 0000000..8e4b7d7
--- /dev/null
@@ -0,0 +1,70 @@
+! { dg-do run }
+!
+! PR fortran/18918
+!
+! Check whether assumed-shape's cobounds are properly handled
+!
+    implicit none
+    integer :: B(1)[*]
+    integer :: C(8:11)[-3:10,43:*]
+    integer, allocatable :: D(:)[:,:]
+
+    allocate (D(20)[2:3,5:*])
+
+    call sub (B,5)
+    call sub (C,3)
+    call sub (D,3)
+
+    call sub2 (B, -3)
+    call sub2 (C, 44)
+    call sub2 (D, 44)
+
+    call sub3 (B)
+    call sub3 (C)
+    call sub3 (D)
+
+    call sub4 (B)
+    call sub4 (C)
+    call sub4 (D)
+
+    call sub5 (D)
+  contains
+
+  subroutine sub(A,n)
+    integer :: n
+    integer :: A(n:)[n:2*n,3*n:*]
+    if (lbound(A,dim=1) /= n) call abort ()
+    if (any (lcobound(A) /= [n, 3*n])) call abort ()
+    if (ucobound(A, dim=1) /= 2*n) call abort()
+  end subroutine sub
+
+  subroutine sub2(A,n)
+    integer :: n
+    integer :: A(:)[-n:*]
+    if (lbound(A,dim=1) /= 1) call abort ()
+    if (lcobound(A, dim=1) /= -n) call abort ()
+  end subroutine sub2
+
+  subroutine sub3(A)
+    integer :: A(:)[0,*]
+    if (lbound(A,dim=1) /= 1) call abort ()
+    if (lcobound(A, dim=1) /= 1) call abort ()
+    if (ucobound(A, dim=1) /= 0) call abort ()
+    if (lcobound(A, dim=2) /= 1) call abort ()
+  end subroutine sub3
+
+  subroutine sub4(A)
+    integer :: A(:)[*]
+    if (lbound(A,dim=1) /= 1) call abort ()
+    if (lcobound(A, dim=1) /= 1) call abort ()
+  end subroutine sub4
+
+  subroutine sub5(A)
+    integer, allocatable :: A(:)[:,:]
+
+    if (lbound(A,dim=1) /= 1) call abort ()
+    if (lcobound(A, dim=1) /= 2) call abort ()
+    if (ucobound(A, dim=1) /= 3) call abort ()
+    if (lcobound(A, dim=2) /= 5) call abort ()
+  end subroutine sub5
+  end