aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2010-04-30 20:30:53 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2010-04-30 20:30:53 +0200
commitbf65e4b1840a177da33775556f9b7f7eecf66fc4 (patch)
treed32122cc9587ce68ab2a1fe10ff3e5bcd33ef040 /gcc/fortran
parentb6feb7966a779c2b681dff6a5f261be2f8574125 (diff)
downloadgcc-bf65e4b1840a177da33775556f9b7f7eecf66fc4.zip
gcc-bf65e4b1840a177da33775556f9b7f7eecf66fc4.tar.gz
gcc-bf65e4b1840a177da33775556f9b7f7eecf66fc4.tar.bz2
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-30 Tobias Burnus Mburnus@net-b.de> PR fortran/18918 PR fortran/43931 * gfortran.dg/coarray_13.f90: New test. From-SVN: r158941
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/trans-types.c8
2 files changed, 10 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 39368cb..e612ebb 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index 9d53784..31a250d 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -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);