From 13926b249f974bcb0428e4379f0338da45bbcd70 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Mon, 24 Oct 2016 21:42:29 +0000 Subject: re PR libfortran/77828 (Linking gfortran-7 compiled program with libgfortran of 5.x allowed but crashes when containing write to string) 2016-10-24 Jerry DeLisle PR fortran/77828 * io/io.h (st_parameter_dt): Reorder for readability and sanity. * io/transfer.c (data_transfer_init): Remove TODO and enable the runtime error message, rec= specifier not allowed in STREAM access. * libtool-version: Bump major version of libgfortran to 4. * ioparm.def: Reorder dt parameters to match libgfortran. * libgfortran.h: Swap definitions of GFC_INTERNAL_UNIT and GFC_INTERNAL_UNIT4. From-SVN: r241497 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/ioparm.def | 6 ++---- gcc/fortran/libgfortran.h | 4 ++-- gcc/testsuite/gfortran.dg/streamio_17.f90 | 12 ++++++++++++ 4 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/streamio_17.f90 (limited to 'gcc') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 3757881..0050bf8 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2016-10-24 Jerry DeLisle + + PR fortran/77828 + * ioparm.def: Reorder dt parameters to match libgfortran. + * libgfortran.h: Swap definitions of GFC_INTERNAL_UNIT and + GFC_INTERNAL_UNIT4. + 2016-10-24 Steven G. Kargl PR fortran/71895 diff --git a/gcc/fortran/ioparm.def b/gcc/fortran/ioparm.def index 17b7ac7..bd628ce 100644 --- a/gcc/fortran/ioparm.def +++ b/gcc/fortran/ioparm.def @@ -90,11 +90,9 @@ IOPARM (inquire, id, 1 << 7, pint4) IOPARM (inquire, iqstream, 1 << 8, char1) IOPARM (wait, common, 0, common) IOPARM (wait, id, 1 << 7, pint4) -#ifndef IOPARM_dt_list_format +IOPARM (dt, common, 0, common) #define IOPARM_dt_list_format (1 << 7) #define IOPARM_dt_namelist_read_mode (1 << 8) -#endif -IOPARM (dt, common, 0, common) IOPARM (dt, rec, 1 << 9, intio) IOPARM (dt, size, 1 << 10, pintio) IOPARM (dt, iolength, 1 << 11, pintio) @@ -103,7 +101,6 @@ IOPARM (dt, format, 1 << 12, char1) IOPARM (dt, advance, 1 << 13, char2) IOPARM (dt, internal_unit, 1 << 14, char1) IOPARM (dt, namelist_name, 1 << 15, char2) -IOPARM (dt, u, 0, pad) IOPARM (dt, id, 1 << 16, pint4) IOPARM (dt, pos, 1 << 17, intio) IOPARM (dt, asynchronous, 1 << 18, char1) @@ -115,3 +112,4 @@ IOPARM (dt, round, 1 << 23, char2) IOPARM (dt, sign, 1 << 24, char1) #define IOPARM_dt_f2003 (1 << 25) #define IOPARM_dt_dtio (1 << 26) +IOPARM (dt, u, 0, pad) diff --git a/gcc/fortran/libgfortran.h b/gcc/fortran/libgfortran.h index cc35508..8494ddc 100644 --- a/gcc/fortran/libgfortran.h +++ b/gcc/fortran/libgfortran.h @@ -70,8 +70,8 @@ along with GCC; see the file COPYING3. If not see /* Special unit numbers used to convey certain conditions. Numbers -4 thru -9 available. NEWUNIT values start at -10. */ -#define GFC_INTERNAL_UNIT4 -1 /* KIND=4 Internal Unit. */ -#define GFC_INTERNAL_UNIT -2 /* KIND=1 Internal Unit. */ +#define GFC_INTERNAL_UNIT -1 /* KIND=1 Internal Unit. */ +#define GFC_INTERNAL_UNIT4 -2 /* KIND=4 Internal Unit. */ #define GFC_INVALID_UNIT -3 /* Possible values for the CONVERT I/O specifier. */ diff --git a/gcc/testsuite/gfortran.dg/streamio_17.f90 b/gcc/testsuite/gfortran.dg/streamio_17.f90 new file mode 100644 index 0000000..41fa0b9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/streamio_17.f90 @@ -0,0 +1,12 @@ +! { dg-do run } +program stream_test +implicit none +integer :: ios +character(128) :: message +open(10, status='scratch', access='stream') +write (10, rec=1, iostat=ios, iomsg=message) "This is a test" ! +if (ios.ne.5001) call abort +if (message.ne. & + &"Record number not allowed for stream access data transfer") & + call abort +end program -- cgit v1.1