diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2008-09-26 06:19:42 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2008-09-26 06:19:42 +0000 |
commit | 105b7136967d687fbb900a2d25e4fe6a876db57d (patch) | |
tree | 43e49465ce4691d29bcfe44a26c6ad96f9dac836 /libgfortran/io/read.c | |
parent | 5e1bdeb75f6f1f724a5e046c4ac39254dbf8ab0f (diff) | |
download | gcc-105b7136967d687fbb900a2d25e4fe6a876db57d.zip gcc-105b7136967d687fbb900a2d25e4fe6a876db57d.tar.gz gcc-105b7136967d687fbb900a2d25e4fe6a876db57d.tar.bz2 |
re PR fortran/37498 (Incorrect array value returned - 4.3 ABI Broken)
2008-09-25 Jerry DeLisle <jvdelisle@gcc.gnu.org
PR libfortran/37498
* list_read.c (eat_separator): Revert previous patch and move
delim_status, decimal_status, and pad_status to gfc_unit.
(parse_real): Ditto. (read_real): Ditto.
* read.c (read_a): Likewise. (read_a_char4): Likewise.
(read_f): Likewise.
* inquire.c (inquire_via_unit): Add missing check for
IOPARM_INQUIRE_HAS_FLAGS2. (inquire_via_filename): Likewise.
* io.h (unit_sign_s): Move delim_status, decimal_status, and pad_status
to gfc_unit.
* transfer.c (read_sf): Ditto. (read_block_form): Ditto.
(formatted_transfer_scalar): Ditto. (data_transfer_init): Ditto.
* write.c (write_default_char4): Ditto. (write_utf8_char4): Ditto.
(write_character): Ditto. (write_real_g0): Ditto.
(list_formatted_write_scalar): Ditto. (nml_write_obj): Ditto.
(namelist_write): Ditto.
* write_float.def (calculate_sign): Ditto. (output_float): Ditto.
From-SVN: r140684
Diffstat (limited to 'libgfortran/io/read.c')
-rw-r--r-- | libgfortran/io/read.c | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c index e35a7b1..5fb1e3c 100644 --- a/libgfortran/io/read.c +++ b/libgfortran/io/read.c @@ -440,9 +440,8 @@ read_a (st_parameter_dt *dtp, const fnode *f, char *p, int length) else read_default_char1 (dtp, p, length, w); - dtp->u.p.sf_read_comma = 1; - if (dtp->common.flags & IOPARM_DT_HAS_F2003) - dtp->u.p.sf_read_comma = dtp->u.p.decimal_status == DECIMAL_COMMA ? 0 : 1; + dtp->u.p.sf_read_comma = + dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA ? 0 : 1; } @@ -468,9 +467,8 @@ read_a_char4 (st_parameter_dt *dtp, const fnode *f, char *p, int length) else read_default_char4 (dtp, p, length, w); - dtp->u.p.sf_read_comma = 1; - if (dtp->common.flags & IOPARM_DT_HAS_F2003) - dtp->u.p.sf_read_comma = dtp->u.p.decimal_status == DECIMAL_COMMA ? 0 : 1; + dtp->u.p.sf_read_comma = + dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA ? 0 : 1; } /* eat_leading_spaces()-- Given a character pointer and a width, @@ -842,9 +840,9 @@ read_f (st_parameter_dt *dtp, const fnode *f, char *dest, int length) switch (*p) { case ',': - if ((dtp->common.flags & IOPARM_DT_HAS_F2003) - && (dtp->u.p.decimal_status == DECIMAL_COMMA && *p == ',')) - *p = '.'; + if (dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA + && *p == ',') + *p = '.'; else goto bad_float; /* Fall through */ @@ -1079,17 +1077,9 @@ read_f (st_parameter_dt *dtp, const fnode *f, char *dest, int length) void read_x (st_parameter_dt * dtp, int n) { - if (dtp->common.flags & IOPARM_DT_HAS_F2003) - { - if ((dtp->u.p.pad_status == PAD_NO || is_internal_unit (dtp)) - && dtp->u.p.current_unit->bytes_left < n) - n = dtp->u.p.current_unit->bytes_left; - } - else - { - if (is_internal_unit (dtp) && dtp->u.p.current_unit->bytes_left < n) - n = dtp->u.p.current_unit->bytes_left; - } + if ((dtp->u.p.current_unit->pad_status == PAD_NO || is_internal_unit (dtp)) + && dtp->u.p.current_unit->bytes_left < n) + n = dtp->u.p.current_unit->bytes_left; dtp->u.p.sf_read_comma = 0; if (n > 0) |