diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2016-12-16 20:27:51 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2016-12-16 20:27:51 +0000 |
commit | 5cdc4b0ef0381439be6cebd6ba8925f69e4d51d6 (patch) | |
tree | 1c1292043826432403d69b5a9ecd00fa24a8f2f8 /gcc | |
parent | c2d42d16195d87ad6fb063a0db0287ad197a972b (diff) | |
download | gcc-5cdc4b0ef0381439be6cebd6ba8925f69e4d51d6.zip gcc-5cdc4b0ef0381439be6cebd6ba8925f69e4d51d6.tar.gz gcc-5cdc4b0ef0381439be6cebd6ba8925f69e4d51d6.tar.bz2 |
re PR fortran/78662 ([F03] Incorrect parsing of quotes in the char-literal-constant of the DT data descriptor)
2016-12-16 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/78622
* io.c (format_lex): Continue of string delimiter seen.
* io/transfer.c (get_dt_format): New static function to alloc
and set the DT iotype string, handling doubled quotes.
(formatted_transfer_scalar_read,
formatted_transfer_scalar_write): Use new function.
* gfortran.dg/dtio_20.f03: New test.
From-SVN: r243765
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/io.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/dtio_20.f03 | 31 |
4 files changed, 43 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e460504..fba0d98 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2016-12-16 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR fortran/78622 + * io.c (format_lex): Continue of string delimiter seen. + 2016-12-16 Jakub Jelinek <jakub@redhat.com> PR fortran/78757 diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index d35437a..8f4f268 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -486,12 +486,13 @@ format_lex (void) if (c == delim) { c = next_char (NONSTRING); - if (c == '\0') { token = FMT_END; break; } + if (c == delim) + continue; unget_char (); break; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c0b8493..5cfda76 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-12-16 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR fortran/78622 + * gfortran.dg/dtio_20.f03: New test. + 2016-12-16 Jakub Jelinek <jakub@redhat.com> PR fortran/78757 diff --git a/gcc/testsuite/gfortran.dg/dtio_20.f03 b/gcc/testsuite/gfortran.dg/dtio_20.f03 new file mode 100644 index 0000000..dce4872 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dtio_20.f03 @@ -0,0 +1,31 @@ +MODULE m + IMPLICIT NONE + + TYPE :: t + CHARACTER :: c + CONTAINS + PROCEDURE :: write_formatted + GENERIC :: WRITE(FORMATTED) => write_formatted + END TYPE t +CONTAINS + SUBROUTINE write_formatted(dtv, unit, iotype, v_list, iostat, iomsg) + CLASS(t), INTENT(IN) :: dtv + INTEGER, INTENT(IN) :: unit + CHARACTER(*), INTENT(IN) :: iotype + INTEGER, INTENT(IN) :: v_list(:) + INTEGER, INTENT(OUT) :: iostat + CHARACTER(*), INTENT(INOUT) :: iomsg + + WRITE (unit, "(A)", IOSTAT=iostat, IOMSG=iomsg) iotype + END SUBROUTINE write_formatted +END MODULE m + +PROGRAM p + USE m + IMPLICIT NONE + CHARACTER(25) :: str + + TYPE(t) :: x + WRITE (str, "(DT'a''b')") x + if (str.ne."DTa'b") call abort +END PROGRAM p |