aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2010-10-26 19:05:08 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2010-10-26 19:05:08 +0000
commit5609699aff5bb12377bf7c187594ecee17264ee3 (patch)
treedb30d851481038a71124decce133cf0cb5e3baeb /libgfortran/io
parent892ae21cc72abd2c3b954a621b303fc2f37adc2a (diff)
downloadgcc-5609699aff5bb12377bf7c187594ecee17264ee3.zip
gcc-5609699aff5bb12377bf7c187594ecee17264ee3.tar.gz
gcc-5609699aff5bb12377bf7c187594ecee17264ee3.tar.bz2
re PR fortran/46010 (I/O: Namelist-reading bug)
2010-10-26 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/46010 * io/list_read.c (nml_parse_qualifier): Add additional conditions for setting the end index for loop specification. Fix some whitespace. * io/write.c (write_default_char4): Const-ify the source argument. From-SVN: r165979
Diffstat (limited to 'libgfortran/io')
-rw-r--r--libgfortran/io/list_read.c10
-rw-r--r--libgfortran/io/write.c2
2 files changed, 7 insertions, 5 deletions
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index 113b469..7fa57f5 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -2105,8 +2105,10 @@ nml_parse_qualifier (st_parameter_dt *dtp, descriptor_dimension *ad,
/* If -std=f95/2003 or an array section is specified,
do not allow excess data to be processed. */
- if (is_array_section == 1
- || !(compile_options.allow_std & GFC_STD_GNU))
+ if (is_array_section == 1
+ || !(compile_options.allow_std & GFC_STD_GNU)
+ || !dtp->u.p.ionml->touched
+ || dtp->u.p.ionml->type == BT_DERIVED)
ls[dim].end = ls[dim].start;
else
dtp->u.p.expanded_read = 1;
@@ -2121,12 +2123,12 @@ 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]))
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index 0a6aee1..5afbbd5 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -65,7 +65,7 @@ memcpy4 (gfc_char4_t *dest, const char *source, int k)
/* Write out default char4. */
static void
-write_default_char4 (st_parameter_dt *dtp, gfc_char4_t *source,
+write_default_char4 (st_parameter_dt *dtp, const gfc_char4_t *source,
int src_len, int w_len)
{
char *p;