gcc/libgfortran
Janne Blomqvist 67c24a8bd6 PR 53796 Improve INQUIRE(RECL=...) handling
The current F2018 draft (N2137) specifies behavior of the RECL=
specifier in the INQUIRE statement, where it previously was left as
undefined. Namely:

- If the unit is not connected, RECL= should be given the value -1.
- If the unit is connected with stream access, RECL= should be given
  the value -2.

Further, as PR 53796 describes, the handling of RECL= is poor in other
ways as well. When the recl is set to the maximum possible
(GFC_INTEGER_8_HUGE / LLONG_MAX), which it does by default except for
preconnected units, and when INQUIRE(RECL=) is used with a 4 byte
integer, the value is truncated and the 4 byte value is thus
-1. Fixing this to generate an error is a lot of work, as currently
the truncation is done by the frontend, the library sees only an 8
byte value with no indication that the frontend is going to copy it to
a 4 byte one. Instead, this patch does a bit twiddling trick such that
the truncated 4 byte value is GFC_INTEGER_4_HUGE while still being
0.99999999 * GFC_INTEGER_8_HUGE which is large enough for all
practical purposes.

Finally, the patch removes GFORTRAN_DEFAULT_RECL which was used only
for preconnected units, and instead uses the same approach as describe
above.

Regtested on x86_64-pc-linux-gnu, Ok for trunk.

gcc/fortran/ChangeLog:

2017-11-28  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/53796
	* gfortran.texi: Remove mentions of GFORTRAN_DEFAULT_RECL.

libgfortran/ChangeLog:

2017-11-28  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/53796
	* io/inquire.c (inquire_via_unit): Set recl to -1 for unconnected
	units.
	* io/io.h (default_recl): New variable.
	* io/open.c (new_unit): Set recl to default_recl for sequential,
	-2 for stream access.
	* io/transfer.c (read_block_form): Test against default_recl
	instead of DEFAULT_RECL.
	(write_block): Likewise.
	* io/unit.c (init_units): Calculate max_offset, default_recl.
	* libgfortran.h (DEFAULT_RECL): Remove.
	* runtime/environ.c: Remove GFORTRAN_DEFAULT_RECL.

gcc/testsuite/ChangeLog:

2017-11-28  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/53796
	* gfortran.dg/inquire_recl_f2018.f90: New test.

From-SVN: r255215
2017-11-28 21:28:50 +02:00
..
caf check.c (positive_check): Add new function checking constant for being greater then zero. 2017-03-05 12:35:47 +01:00
config Update copyright years. 2017-01-01 13:07:43 +01:00
generated PR 36313 Replace int with gfc_charlen_type, take 3 2017-11-24 10:51:15 +02:00
ieee Update copyright years. 2017-01-01 13:07:43 +01:00
intrinsics Make shift argument to eoshift0 and eoshift2 be of type index_type 2017-11-22 22:42:39 +02:00
io PR 53796 Improve INQUIRE(RECL=...) handling 2017-11-28 21:28:50 +02:00
m4 PR 36313 Replace int with gfc_charlen_type, take 3 2017-11-24 10:51:15 +02:00
runtime PR 53796 Improve INQUIRE(RECL=...) handling 2017-11-28 21:28:50 +02:00
ChangeLog Whitespace fix for libgfortran/ChangeLog 2017-11-24 11:57:52 +02:00
ChangeLog-2002
ChangeLog-2003
ChangeLog-2004
ChangeLog-2005
ChangeLog-2006
ChangeLog-2007
ChangeLog-2008
ChangeLog-2009
ChangeLog-2010
ChangeLog-2011
ChangeLog-2012 ChangeLog rotation. 2013-01-03 10:47:48 +01:00
ChangeLog-2013 Rotate ChangeLog for 2013. 2014-06-17 06:55:59 +03:00
ChangeLog-2014 Update copyright years. 2016-01-04 15:30:50 +01:00
ChangeLog-2015 Update copyright years. 2016-01-04 15:30:50 +01:00
ChangeLog-2016 Update copyright years. 2017-01-01 13:07:43 +01:00
Makefile.am re PR fortran/36313 ([F03] {MIN,MAX}{LOC,VAL} should accept character arguments) 2017-11-22 18:08:07 +00:00
Makefile.in re PR fortran/36313 ([F03] {MIN,MAX}{LOC,VAL} should accept character arguments) 2017-11-22 18:08:07 +00:00
acinclude.m4 Enable building libgfortran with Intel CET 2017-11-17 23:44:59 +01:00
aclocal.m4 Disable hwcaps on libgfortran 2016-12-12 13:40:21 +00:00
c99_protos.h re PR fortran/79305 (real128 - undefined reference to cexpl) 2017-01-31 18:50:31 +00:00
config.h.in re PR libfortran/78379 (Processor-specific versions for matmul) 2017-05-25 21:51:27 +00:00
configure Enable building libgfortran with Intel CET 2017-11-17 23:44:59 +01:00
configure.ac Enable building libgfortran with Intel CET 2017-11-17 23:44:59 +01:00
configure.host re PR target/78478 (Compile Error for i386-rtems) 2017-01-19 22:00:53 +01:00
gfortran.map re PR fortran/36313 ([F03] {MIN,MAX}{LOC,VAL} should accept character arguments) 2017-11-22 18:08:07 +00:00
kinds-override.h Update copyright years. 2017-01-01 13:07:43 +01:00
libgfortran.h PR 53796 Improve INQUIRE(RECL=...) handling 2017-11-28 21:28:50 +02:00
libgfortran.spec.in
libtool-version re PR fortran/34640 (ICE when assigning item of a derived-component to a pointer) 2017-09-10 17:02:53 +00:00
mk-kinds-h.sh
mk-sik-inc.sh
mk-srk-inc.sh