From: Tobias Burnus Date: Thu, 11 Mar 2010 16:06:37 +0000 (+0100) Subject: re PR fortran/43228 (NAMELIST I/O: Reading at 2 dimensions (rank) array values.) X-Git-Tag: releases/gcc-4.5.0~419 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2f4d643dab5cdf9ac795434578b970ca6af21021;p=thirdparty%2Fgcc.git re PR fortran/43228 (NAMELIST I/O: Reading at 2 dimensions (rank) array values.) 2010-03-11 Tobias Burnus PR fortran/43228 * io/list_read.c (nml_parse_qualifier): Disable expanded_read for array sections. 2010-03-11 Tobias Burnus PR fortran/43228 * gfortran.dg/namelist_61.f90: New test. From-SVN: r157389 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9a8709ae1fef..152db4760166 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-03-11 Tobias Burnus + + PR fortran/43228 + * gfortran.dg/namelist_61.f90: New test. + 2010-03-11 Richard Guenther PR tree-optimization/43255 diff --git a/gcc/testsuite/gfortran.dg/namelist_61.f90 b/gcc/testsuite/gfortran.dg/namelist_61.f90 new file mode 100644 index 000000000000..c7214dd2bb94 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/namelist_61.f90 @@ -0,0 +1,35 @@ +! { dg-do run } +! +! PR fortran/43228 +! +integer :: a(3,3) +character(len=100) :: str +namelist /nml/a + +a = -1 +str = '&nml a(1,:) = 1 2 3 /' +read(str, nml=nml) +if (any (a(1,:) /= [1, 2, 3])) call abort () +if (any (a([2,3],:) /= -1)) call abort () + +a = -1 +str = '&nml a(1,1) = 1 2 3 4 /' +read(str, nml=nml) +if (any (a(:,1) /= [1, 2, 3])) call abort () +if (any (a(:,2) /= [4, -1, -1])) call abort () +if (any (a(:,3) /= -1)) call abort () + +str = '&nml a(1,:) = 1 2 3 , & + & a(2,:) = 4,5,6 & + & a(3,:) = 7 8 9/' +read(str, nml=nml) +if (any (a(1,:) /= [1, 2, 3])) call abort () +if (any (a(2,:) /= [4, 5, 6])) call abort () +if (any (a(3,:) /= [7, 8, 9])) call abort () + +!print *, a(:,1) +!print *, a(:,2) +!print *, a(:,3) +end + + diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index e496264c6bc4..4f59525332e6 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2010-03-11 Tobias Burnus + + PR fortran/43228 + * io/list_read.c (nml_parse_qualifier): Disable expanded_read + for array sections. + 2010-03-10 Jerry DeLisle PR libfortran/43320 diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index afd5b457f75d..830cde24d698 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -2091,6 +2091,14 @@ nml_parse_qualifier (st_parameter_dt *dtp, descriptor_dimension *ad, } } + if (is_array_section == 1 && dtp->u.p.expanded_read == 1) + { + int i; + dtp->u.p.expanded_read = 0; + for (i = 0; i < dim; i++) + ls[i].end = ls[i].start; + } + /* Check the values of the triplet indices. */ if ((ls[dim].start > (ssize_t) GFC_DIMENSION_UBOUND(ad[dim])) || (ls[dim].start < (ssize_t) GFC_DIMENSION_LBOUND(ad[dim]))