diff options
author | Tobias Burnus <burnus@net-b.de> | 2010-04-30 20:30:53 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2010-04-30 20:30:53 +0200 |
commit | bf65e4b1840a177da33775556f9b7f7eecf66fc4 (patch) | |
tree | d32122cc9587ce68ab2a1fe10ff3e5bcd33ef040 /gcc | |
parent | b6feb7966a779c2b681dff6a5f261be2f8574125 (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-types.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/coarray_13.f90 | 19 |
4 files changed, 35 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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e4ff4a6..664ac00 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..bbd1ad4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_13.f90 @@ -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 |