OSDN Git Service

2010-04-30 Tobias Burnus Mburnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Apr 2010 18:30:53 +0000 (18:30 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Apr 2010 18:30:53 +0000 (18:30 +0000)
        PR fortran/18918
        PR fortran/43931
        *  trans-types.c (gfc_get_array_descriptor_base): Fix index
        calculation for array descriptor types.

2010-04-30  Tobias Burnus  Mburnus@net-b.de>

        PR fortran/18918
        PR fortran/43931
        * gfortran.dg/coarray_13.f90: New test.

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

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

index 39368cb..e612ebb 100644 (file)
@@ -1,3 +1,10 @@
+2010-04-30  Tobias Burnus  Mburnus@net-b.de>
+
+       PR fortran/18918
+       PR fortran/43931
+       *  trans-types.c (gfc_get_array_descriptor_base): Fix index
+       calculation for array descriptor types.
+
 2010-04-29  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/43896
index 9d53784..31a250d 100644 (file)
@@ -1542,7 +1542,7 @@ gfc_get_array_descriptor_base (int dimen, int codimen, bool restricted)
 {
   tree fat_type, fieldlist, decl, arraytype;
   char name[16 + 2*GFC_RANK_DIGITS + 1 + 1];
-  int idx = 2 * (dimen - 1) + restricted;
+  int idx = 2 * (codimen + dimen - 1) + restricted;
 
   gcc_assert (dimen >= 1 && codimen + dimen <= GFC_MAX_DIMENSIONS);
   if (gfc_array_descriptor_base[idx])
@@ -1551,8 +1551,7 @@ gfc_get_array_descriptor_base (int dimen, int codimen, bool restricted)
   /* Build the type node.  */
   fat_type = make_node (RECORD_TYPE);
 
-  sprintf (name, "array_descriptor" GFC_RANK_PRINTF_FORMAT "_"
-          GFC_RANK_PRINTF_FORMAT, dimen, codimen);
+  sprintf (name, "array_descriptor" GFC_RANK_PRINTF_FORMAT, dimen + codimen);
   TYPE_NAME (fat_type) = get_identifier (name);
 
   /* Add the data member as the first element of the descriptor.  */
@@ -1629,8 +1628,7 @@ gfc_get_array_type_bounds (tree etype, int dimen, int codimen, tree * lbound,
     type_name = IDENTIFIER_POINTER (tmp);
   else
     type_name = "unknown";
-  sprintf (name, "array" GFC_RANK_PRINTF_FORMAT "_"
-          GFC_RANK_PRINTF_FORMAT "_%.*s", dimen, codimen,
+  sprintf (name, "array" GFC_RANK_PRINTF_FORMAT "_%.*s", dimen + codimen,
           GFC_MAX_SYMBOL_LEN, type_name);
   TYPE_NAME (fat_type) = get_identifier (name);
 
index e4ff4a6..664ac00 100644 (file)
@@ -1,3 +1,9 @@
+2010-04-30  Tobias Burnus  Mburnus@net-b.de>
+
+       PR fortran/18918
+       PR fortran/43931
+       * gfortran.dg/coarray_13.f90: New test.
+
 2010-04-30  Richard Guenther  <rguenther@suse.de>
 
        PR lto/43946
diff --git a/gcc/testsuite/gfortran.dg/coarray_13.f90 b/gcc/testsuite/gfortran.dg/coarray_13.f90
new file mode 100644 (file)
index 0000000..bbd1ad4
--- /dev/null
@@ -0,0 +1,19 @@
+! { dg-do run }
+! { dg-options "-fcoarray=single" }
+!
+! Coarray support -- allocatable array coarrays
+! PR fortran/18918
+! PR fortran/43931
+!
+program test
+  implicit none
+  call one()
+contains
+  subroutine one()
+    integer, allocatable :: a(:)[:,:,:]
+    allocate(a(1)[-4:9,8,4:*])
+  end subroutine one
+  subroutine four(C)
+    integer, allocatable :: C(:)[:]
+ end subroutine four
+end program test