Age | Commit message (Collapse) | Author |
|
Backport from trunk
PR libgfortran/83811
* gfortran.dg/fmt_e.f90: New test.
* gfortran.dg/fmt_e.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256675 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk.
It turns out that Linux never reads or writes more than 2147479552
bytes in a single syscall. For writes this is not a problem as
libgfortran already contains a loop around write() to handle short
writes. But for reads we cannot do this, since then read will hang if
we have a short read when reading from the terminal. Also, there are
reports that macOS fails I/O's larger than 2 GB. Thus, to work around
these issues do large reads/writes in chunks.
The testcase from the PR
program largewr
integer(kind=1) :: a(2_8**31+1)
a = 0
a(size(a, kind=8)) = 1
open(10, file="largewr.dat", access="stream", form="unformatted")
write (10) a
close(10)
a(size(a, kind=8)) = 2
open(10, file="largewr.dat", access="stream", form="unformatted")
read (10) a
if (a(size(a, kind=8)) == 1) then
print *, "All is well"
else
print *, "Oh no"
end if
end program largewr
fails on trunk but works with the patch.
Regtested on x86_64-pc-linux-gnu, committed to trunk.
libgfortran/ChangeLog:
2018-01-03 Janne Blomqvist <jb@gcc.gnu.org>
PR libgfortran/83649
* io/unix.c (MAX_CHUNK): New define.
(raw_read): For reads larger than MAX_CHUNK, loop.
(raw_write): Write no more than MAX_CHUNK bytes per iteration.
---
libgfortran/io/unix.c | 50 ++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 42 insertions(+), 8 deletions(-)
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index a07a3c9..7a982b3 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -292,18 +292,49 @@ raw_flush (unix_stream *s __attribute__ ((unused)))
return 0;
}
+/* Write/read at most 2 GB - 4k chunks at a time. Linux never reads or
+ writes more than this, and there are reports that macOS fails for
+ larger than 2 GB as well. */
+#define MAX_CHUNK 2147479552
+
static ssize_t
raw_read (unix_stream *s, void *buf, ssize_t nbyte)
{
/* For read we can't do I/O in a loop like raw_write does, because
that will break applications that wait for interactive I/O. We
- still can loop around EINTR, though. */
- while (true)
+ still can loop around EINTR, though. This however causes a
+ problem for large reads which must be chunked, see comment above.
+ So assume that if the size is larger than the chunk size, we're
+ reading from a file and not the terminal. */
+ if (nbyte <= MAX_CHUNK)
{
- ssize_t trans = read (s->fd, buf, nbyte);
- if (trans == -1 && errno == EINTR)
- continue;
- return trans;
+ while (true)
+ {
+ ssize_t trans = read (s->fd, buf, nbyte);
+ if (trans == -1 && errno == EINTR)
+ continue;
+ return trans;
+ }
+ }
+ else
+ {
+ ssize_t bytes_left = nbyte;
+ char *buf_st = buf;
+ while (bytes_left > 0)
+ {
+ ssize_t to_read = bytes_left < MAX_CHUNK ? bytes_left: MAX_CHUNK;
+ ssize_t trans = read (s->fd, buf_st, to_read);
+ if (trans == -1)
+ {
+ if (errno == EINTR)
+ continue;
+ else
+ return trans;
+ }
+ buf_st += trans;
+ bytes_left -= trans;
+ }
+ return nbyte - bytes_left;
}
}
@@ -317,10 +348,13 @@ raw_write (unix_stream *s, const void *buf, ssize_t nbyte)
buf_st = (char *) buf;
/* We must write in a loop since some systems don't restart system
- calls in case of a signal. */
+ calls in case of a signal. Also some systems might fail outright
+ if we try to write more than 2 GB in a single syscall, so chunk
+ up large writes. */
while (bytes_left > 0)
{
- trans = write (s->fd, buf_st, bytes_left);
+ ssize_t to_write = bytes_left < MAX_CHUNK ? bytes_left: MAX_CHUNK;
+ trans = write (s->fd, buf_st, to_write);
if (trans == -1)
{
if (errno == EINTR)
--
2.7.4
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256172 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk
PR libgfortran/83613
* io/unit.c (init_units): Don't forget to unlock the unit locks
after being inserted.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256041 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk
PR libgfortran/81937
* io/list_read.c (next_char_internal): Don't attempt to read
from the internal unit stream if no bytes are left. Decrement
bytes_left in the right place.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255752 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk
PR libgfortran/78549
* io/inquire.c (inquire_via_unit): Adjust test for existence for
pre-connected internal units.
* io/transfer.c (finalize_transfer): When done with a transfer
to internal units, free the format buffer and close the stream.
(st_read_done): Delete freeing the stream, now handled using
sclose in finalize_transfer. (st_write_done): Likewise.
* io/unit.c (get_unit): Return NULL for special reserved unit
numbers, signifying not accessible to the user.
(init_units): Insert the two special internal units into the
unit treap. This makes these unit structures available without
further allocations for later use by internal unit I/O. These
units are automatically deleted by normal program termination.
* io/unix.c (mem_close): Add a guard check to protect from double free.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255751 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk
PR libgfortran/83168
* io/write.c (select_string): Bump size by one to avoid
overrun.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255373 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Dominique d'Humieres <dominiq@lps.ens.fr>
Backport from trunk
PR libgfortran/83191
* io/transfer.c (list_formatted_read_scalar): Do not set
namelist_mode bit here. (namelist_read): Likewise.
(data_transfer_init): Clear the mode bit here.
(finalize_transfer): Do set the mode bit just before any calls
to namelist_read or namelist_write. It can now be referred to
in complex_write.
* io/write.c (write_complex): Suppress the leading blanks when
namelist_mode bit is not set to 1.
* gfortran.dg/namelist_95.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255368 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk
PR libgfortran/83225
* io/io.h (is_internal_unit): Use the unit_is_internal bit.
* io/transfer.c (data_transfer_init): Set the bit to true for
internal units. Use that bit for checks for internal unit
initializations.
* io/unit.c (insert_unit): As a precaution, set the
internal_unit_kind to zero when a unit structure is first created.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255364 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk
PR libgfortran/78549
* io/io.h (newunit_free): Add declaration. Clean some whitespace.
* io/transfer.c (st_read_done, st_write_done): Call newunit_free.
* io/unit.c (newunit_free): Change type from static void to void.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255108 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Rimvydas (RJ)
Backport from trunk
PR libgfortran/81938
io/format.c (free_format_data): Don't try to free vlist
descriptors past the end of the fnode array.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@254169 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk
PR libgfortran/78387
* io/list_read.c (nml_read_obj): Remove use of stash.
* io/transfer.c (st_read_done, st_write_done): Likewise.
* io/unit.c (stash_internal_unit): Delete function.
(get_unit): Remove use of stash.
(init_units): Likewise.
(close_units): Likewise.
* io/write.c (nml_write_obj): Likewise:
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@252992 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk
PR libgfortran/53029
* io/list_read.c(list_formatted_read_scalar: Set the err return
value to the common.flags error values.
* gfortran.dg/read_5.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@249719 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
libgfortran/
Backport from trunk
PR libfortran/81195
* io/unit.c (get_unit): Call __gthread_mutex_lock before newunit_stack
and newunit_tos references. Call __gthread_mutex_unlock afterward.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@249668 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk
PR libgfortran/80741
* transfer.c (finalize_transfer): Reset last_char to 'empty'.
* file_pos.c (formatted_backspace): Likewise.
(st_endfile): Likewise.
(st_rewind): Likewise.
(st_flush): Likewise.
* trans-io.c (transfer_namelist_element): Change check from
NULL_TREE to null_pointer_node.
* gfortran.dg/read_4.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@248390 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk
PR fortran/80333
* trans-io.c (nml_get_addr_expr): If we are dealing with class
type data set tmp tree to get that address.
(transfer_namelist_element): Set the array spec to point to the
the class data.
* gfortran.dg/dtio_30.f03: New test.
* list_read.c (nml_read_obj): Compute pointer into class/type
arrays from the nl->dim information. Update it for each iteration
of the loop for the given object.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@248388 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Backport from trunk
PR libgfortran/80727
* transfer.c (read_sf_internal): Remove bogus code to detect EOR.
(read_block_form): For internal units, generate EOR if no more
bytes left in unit and we are trying to read with ADVANCE='NO'.
* gfortran.dg/read_3.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@248167 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
* close.c: Fix white space in pointer declarations and comment
formats where applicable.
* fbuf.c: Likewise.
* fbuf.h: Likewise.
* format.c: Likewise.
* inquire.c: Likewise.
* intrinsics.c: Likewise.
* list_read.c: Likewise.
* lock.c: Likewise.
* open.c: Likewise.
* read.c: Likewise.
* transfer.c: Likewise.
* unit.c: Likewise.
* unix.c: Likewise.
* unix.h: Likewise.
* write.c: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@246842 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR libgfortran/78670
* io/list_read.c (nml_get_obj_data): Delete code which calls the
child read procedure. (nml_read_obj): Insert the code which
calls the child procedure. Don't need to touch nodes if using
dtio since parent will not be traversing the components.
PR libgfortran/78670
* gfortran.dg/dtio_25.f90: Use 'a1' format when trying to read
a character of length 1. Update test for success.
* gfortran.dg/dtio_28.f03: New test.
* gfortran.dg/dtio_4.f90: Update to open test file with status =
'scratch' to delete the file when done.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@246576 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR fortran/78661
* trans-io.c (transfer_namelist_element): Perform a polymorphic call
to a DTIO procedure if necessary.
2017-03-28 Janus Weil <janus@gcc.gnu.org>
PR fortran/78661
* gfortran.dg/dtio_25.f90: Modified test case.
* gfortran.dg/dtio_27.f90: New test case.
2017-03-28 Janus Weil <janus@gcc.gnu.org>
PR fortran/78661
* io/write.c (nml_write_obj): Build a class container only if necessary.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@246546 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
* io/list_read.c: Insert /* Fall through. */ in the macro
CASE_SEPARATORS in order to silence warnings.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@246507 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR libgfortran/78881
* io/io.h (st_parameter_dt): Rename unused component last_char to
child_saved_iostat. Move comment to gfc_unit.
* io/list_read.c (list_formatted_read_scalar): After call to
child READ procedure, save the returned iostat value for later
check. (finish_list_read): Only finish READ if child_saved_iostat
was OK.
* io/transfer.c (read_sf_internal): If there is a saved character
in last character, seek back one. Add a new check for EOR
condition. (read_sf): If there is a saved character
in last character, seek back one. (formatted_transfer_scalar_read):
Initialize last character before invoking child procedure.
(data_transfer_init): If child dtio, set advance
status to nonadvancing. Move update of size and check for EOR
condition to before child dtio return.
* gfortran.dg/dtio_26.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@246478 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR libgfortran/78854
* io/list_read.c (nml_get_obj_data): Stash internal unit for
later use by child procedures.
* io/write.c (nml_write_obj): Likewise.
* io/tranfer.c (data_transfer_init): Minor whitespace.
* io/unit.c (set_internal_uit): Look for the stashed internal
unit and use it if found.
* gfortran.dg/dtio_25.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@246070 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR fortran/79382
* decl.c (access_attr_decl): Test for presence of generic DTIO
interface and emit error if not present.
2017-02-16 Paul Thomas <pault@gcc.gnu.org>
PR fortran/79382
* io/transfer.c (check_dtio_proc): New function.
(formatted_transfer_scalar_read): Use it.
(formatted_transfer_scalar_write): ditto.
2017-02-16 Paul Thomas <pault@gcc.gnu.org>
PR fortran/79382
* gfortran.dg/dtio_10.f90 : Change test of error message.
* gfortran.dg/dtio_23.f90 : New test.
* gfortran.dg/dtio_24.f90 : New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@245596 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@244454 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
In order to handle large character lengths on (L)LP64 targets, switch
the GFortran character length from an int to a size_t.
This is an ABI change, as procedures with character arguments take
hidden arguments with the character length.
I also changed the _size member in vtables from int to size_t, as
there were some cases where character lengths and sizes were
apparently mixed up and caused regressions otherwise. Although I
haven't tested, this might enable very large derived types as well.
Also, as there are some places in the frontend were negative character
lengths are used as special flag values, in the frontend the character
length is handled as a signed variable of the same size as a size_t,
although in the runtime library it really is size_t.
I haven't changed the character length variables for the co-array
intrinsics, as this is something that may need to be synchronized with
OpenCoarrays.
This is v4 of the patch. v3 was applied but had to reverted due to
breaking bootstrap. The fix is in resolve.c:resolve_charlen, where
it's necessary to check that an expression is constant before using
mpz_sgn.
Overview of v3 of the patch: All the issues pointed out by FX's review
of v2 have been fixed. In particular, there are now new functions
gfc_mpz_get_hwi and gfc_mpz_set_hwi, similar to the GMP functions
mpz_get_si and mpz_set_si, except that they get/set a HOST_WIDE_INT
instead of a long value. Similarly, gfc_get_int_expr now takes a
HOST_WIDE_INT instead of a long, gfc_extract_long is replaced by
gfc_extract_hwi. Also, the preliminary work to handle
gfc_charlen_type_node being unsigned has been removed.
Regtested on x86_64-pc-linux-gnu and i686-pc-linux-gnu.
frontend:
2017-01-13 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/78534
PR fortran/66310
* class.c (gfc_find_derived_vtab): Use gfc_size_kind instead of
hardcoded kind.
(find_intrinsic_vtab): Likewise.
* expr.c (gfc_get_character_expr): Length parameter of type
gfc_charlen_t.
(gfc_get_int_expr): Value argument of type HOST_WIDE_INT.
(gfc_extract_hwi): New function.
(simplify_const_ref): Make string_len of type gfc_charlen_t.
(gfc_simplify_expr): Use HOST_WIDE_INT for substring refs.
* gfortran.h (gfc_mpz_get_hwi): New prototype.
(gfc_mpz_set_hwi): Likewise.
(gfc_charlen_t): New typedef.
(gfc_expr): Use gfc_charlen_t for character lengths.
(gfc_size_kind): New extern variable.
(gfc_extract_hwi): New prototype.
(gfc_get_character_expr): Use gfc_charlen_t for character length.
(gfc_get_int_expr): Use HOST_WIDE_INT type for value argument.
* iresolve.c (gfc_resolve_repeat): Pass string length directly without
temporary, use gfc_charlen_int_kind.
* match.c (select_intrinsic_set_tmp): Use HOST_WIDE_INT for charlen.
* misc.c (gfc_mpz_get_hwi): New function.
(gfc_mpz_set_hwi): New function.
* module.c (atom_int): Change type from int to HOST_WIDE_INT.
(parse_integer): Don't complain about large integers.
(write_atom): Use HOST_WIDE_INT for integers.
(mio_integer): Handle integer type mismatch.
(mio_hwi): New function.
(mio_intrinsic_op): Use HOST_WIDE_INT.
(mio_array_ref): Likewise.
(mio_expr): Likewise.
* resolve.c (resolve_select_type): Use HOST_WIDE_INT for charlen,
use snprintf.
(resolve_substring_charlen): Use gfc_charlen_int_kind.
(resolve_charlen): Use mpz_sgn to determine sign.
* simplify.c (gfc_simplify_repeat): Use HOST_WIDE_INT/gfc_charlen_t
instead of long.
* target-memory.c (size_character): Length argument of type
gfc_charlen_t.
(gfc_encode_character): Likewise.
(gfc_interpret_character): Use gfc_charlen_t.
* target-memory.h (gfc_encode_character): Modify prototype.
* trans-array.c (get_array_ctor_var_strlen): Use
gfc_conv_mpz_to_tree_type.
* trans-const.c (gfc_conv_mpz_to_tree_type): New function.
* trans-const.h (gfc_conv_mpz_to_tree_type): New prototype.
* trans-expr.c (gfc_class_len_or_zero_get): Build const of type
gfc_charlen_type_node.
(gfc_conv_intrinsic_to_class): Use gfc_charlen_int_kind instead of
4, fold_convert to correct type.
(gfc_conv_class_to_class): Build const of type size_type_node for
size.
(gfc_copy_class_to_class): Likewise.
(gfc_conv_string_length): Use same type in expression.
(gfc_conv_substring): Likewise, use HOST_WIDE_INT for charlen.
(gfc_conv_string_tmp): Make sure len is of the right type.
(gfc_conv_concat_op): Use same type in expression.
(gfc_conv_procedure_call): Likewise.
(alloc_scalar_allocatable_for_subcomponent_assignment):
fold_convert to right type.
(gfc_trans_subcomponent_assign): Likewise.
(trans_class_vptr_len_assignment): Build const of correct type.
(gfc_trans_pointer_assignment): Likewise.
(alloc_scalar_allocatable_for_assignment): fold_convert to right
type in expr.
(trans_class_assignment): Build const of correct type.
* trans-intrinsic.c (gfc_conv_associated): Likewise.
(gfc_conv_intrinsic_repeat): Do calculation in sizetype.
* trans-io.c (gfc_build_io_library_fndecls): Use
gfc_charlen_type_node for character lengths.
* trans-stmt.c (gfc_trans_label_assign): Build const of
gfc_charlen_type_node.
(gfc_trans_character_select): Likewise.
(gfc_trans_allocate): Likewise, don't typecast strlen result.
(gfc_trans_deallocate): Don't typecast strlen result.
* trans-types.c (gfc_size_kind): New variable.
(gfc_init_types): Determine gfc_charlen_int_kind and gfc_size_kind
from size_type_node.
testsuite:
2017-01-13 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/78534
PR fortran/66310
* gfortran.dg/repeat_4.f90: Use integers of kind C_SIZE_T.
* gfortran.dg/repeat_7.f90: New test for PR 66310.
* gfortran.dg/scan_2.f90: Handle potential cast in assignment.
* gfortran.dg/string_1.f90: Limit to ilp32 targets.
* gfortran.dg/string_1_lp64.f90: New test.
* gfortran.dg/string_3.f90: Limit to ilp32 targets.
* gfortran.dg/string_3_lp64.f90: New test.
libgfortran:
2017-01-13 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/78534
* intrinsics/args.c (getarg_i4): Use gfc_charlen_type.
(get_command_argument_i4): Likewise.
(get_command_i4): Likewise.
* intrinsics/chmod.c (chmod_internal): Likewise.
* intrinsics/env.c (get_environment_variable_i4): Likewise.
* intrinsics/extends_type_of.c (struct vtype): Use size_t for size
member.
* intrinsics/gerror.c (gerror): Use gfc_charlen_type.
* intrinsics/getlog.c (getlog): Likewise.
* intrinsics/hostnm.c (hostnm_0): Likewise.
* intrinsics/string_intrinsics_inc.c (string_len_trim): Rework to
work if gfc_charlen_type is unsigned.
(string_scan): Likewise.
* io/transfer.c (transfer_character): Modify prototype.
(transfer_character_write): Likewise.
(transfer_character_wide): Likewise.
(transfer_character_wide_write): Likewise.
(transfer_array): Typecast to avoid signed-unsigned comparison.
* io/unit.c (is_trim_ok): Use gfc_charlen_type.
* io/write.c (namelist_write): Likewise.
* libgfortran.h (gfc_charlen_type): Change typedef to size_t.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@244448 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
r244011 caused regressions on 32-bit hosts.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@244027 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
In order to handle large character lengths on (L)LP64 targets, switch
the GFortran character length from an int to a size_t.
This is an ABI change, as procedures with character arguments take
hidden arguments with the character length.
I also changed the _size member in vtables from int to size_t, as
there were some cases where character lengths and sizes were
apparently mixed up and caused regressions otherwise. Although I
haven't tested, this might enable very large derived types as well.
Also, as there are some places in the frontend were negative character
lengths are used as special flag values, in the frontend the character
length is handled as a signed variable of the same size as a size_t,
although in the runtime library it really is size_t.
I haven't changed the character length variables for the co-array
intrinsics, as this is something that may need to be synchronized with
OpenCoarrays.
This is v3 of the patch. All the issues pointed out by FX's review of
v2 have been fixed. In particular, there are now new functions
gfc_mpz_get_hwi and gfc_mpz_set_hwi, similar to the GMP functions
mpz_get_si and mpz_set_si, except that they get/set a HOST_WIDE_INT
instead of a long value. Similarly, gfc_get_int_expr now takes a
HOST_WIDE_INT instead of a long, gfc_extract_long is replaced by
gfc_extract_hwi. Also, the preliminary work to handle
gfc_charlen_type_node being unsigned has been removed.
Regtested on x86_64-pc-linux-gnu.
frontend:
2017-01-03 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/78534
PR fortran/66310
* class.c (gfc_find_derived_vtab): Use gfc_size_kind instead of
hardcoded kind.
(find_intrinsic_vtab): Likewise.
* expr.c (gfc_get_character_expr): Length parameter of type
gfc_charlen_t.
(gfc_get_int_expr): Value argument of type HOST_WIDE_INT.
(gfc_extract_hwi): New function.
(simplify_const_ref): Make string_len of type gfc_charlen_t.
(gfc_simplify_expr): Use HOST_WIDE_INT for substring refs.
* gfortran.h (gfc_mpz_get_hwi): New prototype.
(gfc_mpz_set_hwi): Likewise.
(gfc_charlen_t): New typedef.
(gfc_expr): Use gfc_charlen_t for character lengths.
(gfc_size_kind): New extern variable.
(gfc_extract_hwi): New prototype.
(gfc_get_character_expr): Use gfc_charlen_t for character length.
(gfc_get_int_expr): Use HOST_WIDE_INT type for value argument.
* iresolve.c (gfc_resolve_repeat): Pass string length directly without
temporary, use gfc_charlen_int_kind.
* match.c (select_intrinsic_set_tmp): Use HOST_WIDE_INT for charlen.
* misc.c (gfc_mpz_get_hwi): New function.
(gfc_mpz_set_hwi): New function.
* module.c (atom_int): Change type from int to HOST_WIDE_INT.
(parse_integer): Don't complain about large integers.
(write_atom): Use HOST_WIDE_INT for integers.
(mio_integer): Handle integer type mismatch.
(mio_hwi): New function.
(mio_intrinsic_op): Use HOST_WIDE_INT.
(mio_array_ref): Likewise.
(mio_expr): Likewise.
* resolve.c (resolve_select_type): Use HOST_WIDE_INT for charlen,
use snprintf.
(resolve_charlen): Use mpz_sgn to determine sign.
* simplify.c (gfc_simplify_repeat): Use HOST_WIDE_INT/gfc_charlen_t
instead of long.
* target-memory.c (size_character): Length argument of type
gfc_charlen_t.
(gfc_encode_character): Likewise.
(gfc_interpret_character): Use gfc_charlen_t.
* target-memory.h (gfc_encode_character): Modify prototype.
* trans-array.c (get_array_ctor_var_strlen): Use
gfc_conv_mpz_to_tree_type.
* trans-const.c (gfc_conv_mpz_to_tree_type): New function.
* trans-const.h (gfc_conv_mpz_to_tree_type): New prototype.
* trans-expr.c (gfc_class_len_or_zero_get): Build const of type
gfc_charlen_type_node.
(gfc_conv_intrinsic_to_class): Use gfc_charlen_int_kind instead of
4, fold_convert to correct type.
(gfc_conv_class_to_class): Build const of type size_type_node for
size.
(gfc_copy_class_to_class): Likewise.
(gfc_conv_string_length): Use same type in expression.
(gfc_conv_substring): Likewise, use HOST_WIDE_INT for charlen.
(gfc_conv_string_tmp): Make sure len is of the right type.
(gfc_conv_concat_op): Use same type in expression.
(gfc_conv_procedure_call): Likewise.
(alloc_scalar_allocatable_for_subcomponent_assignment):
fold_convert to right type.
(gfc_trans_subcomponent_assign): Likewise.
(trans_class_vptr_len_assignment): Build const of correct type.
(gfc_trans_pointer_assignment): Likewise.
(alloc_scalar_allocatable_for_assignment): fold_convert to right
type in expr.
(trans_class_assignment): Build const of correct type.
* trans-intrinsic.c (gfc_conv_associated): Likewise.
(gfc_conv_intrinsic_repeat): Do calculation in sizetype.
* trans-io.c (gfc_build_io_library_fndecls): Use
gfc_charlen_type_node for character lengths.
* trans-stmt.c (gfc_trans_label_assign): Build const of
gfc_charlen_type_node.
(gfc_trans_character_select): Likewise.
(gfc_trans_allocate): Likewise, don't typecast strlen result.
(gfc_trans_deallocate): Don't typecast strlen result.
* trans-types.c (gfc_size_kind): New variable.
(gfc_init_types): Determine gfc_charlen_int_kind and gfc_size_kind
from size_type_node.
testsuite:
2017-01-03 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/78534
PR fortran/66310
* gfortran.dg/dependency_49.f90: Change scan-tree-dump-times
due to gfc_trans_string_copy change to avoid
-Wstringop-overflow.
* gfortran.dg/repeat_4.f90: Use integers of kind C_SIZE_T.
* gfortran.dg/repeat_7.f90: New test for PR 66310.
* gfortran.dg/scan_2.f90: Handle potential cast in assignment.
* gfortran.dg/string_1.f90: Limit to ilp32 targets.
* gfortran.dg/string_1_lp64.f90: New test.
* gfortran.dg/string_3.f90: Limit to ilp32 targets.
* gfortran.dg/string_3_lp64.f90: New test.
* gfortran.dg/transfer_intrinsic_1.f90: Change
scan-tree-dump-times due to gfc_trans_string_copy change to
avoid -Wstringop-overflow.
libgfortran:
2017-01-03 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/78534
* intrinsics/args.c (getarg_i4): Use gfc_charlen_type.
(get_command_argument_i4): Likewise.
(get_command_i4): Likewise.
* intrinsics/chmod.c (chmod_internal): Likewise.
* intrinsics/env.c (get_environment_variable_i4): Likewise.
* intrinsics/extends_type_of.c (struct vtype): Use size_t for size
member.
* intrinsics/gerror.c (gerror): Use gfc_charlen_type.
* intrinsics/getlog.c (getlog): Likewise.
* intrinsics/hostnm.c (hostnm_0): Likewise.
* intrinsics/string_intrinsics_inc.c (string_len_trim): Rework to
work if gfc_charlen_type is unsigned.
(string_scan): Likewise.
* io/transfer.c (transfer_character): Modify prototype.
(transfer_character_write): Likewise.
(transfer_character_wide): Likewise.
(transfer_character_wide_write): Likewise.
(transfer_array): Typecast to avoid signed-unsigned comparison.
* io/unit.c (is_trim_ok): Use gfc_charlen_type.
* io/write.c (namelist_write): Likewise.
* libgfortran.h (gfc_charlen_type): Change typedef to size_t.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@244011 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@243994 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
* intrinsics/access.c: Do not include <stdlib.h> header.
* intrinsics/chdir.c: Do not include <stdlib.h> header.
* intrinsics/chmod.c: Do not include <stdlib.h> header.
* intrinsics/date_and_time.c: Do not include <stdlib.h> header.
* intrinsics/env.c: Do not include <stdlib.h> header.
* intrinsics/execute_command_line.c: Do not include <stdlib.h> header.
* intrinsics/exit.c: Do not include <stdlib.h> header.
* intrinsics/getcwd.c: Do not include <stdlib.h> header.
* intrinsics/getlog.c: Do not include <stdlib.h> header.
* intrinsics/link.c: Do not include <stdlib.h> header.
* intrinsics/move_alloc.c: Do not include <stdlib.h> header.
* intrinsics/perror.c: Do not include <stdlib.h> header.
* intrinsics/random.c: Do not include <stdlib.h> header.
* intrinsics/rename.c: Do not include <stdlib.h> header.
* intrinsics/reshape_generic.c: Do not include <stdlib.h> header.
* intrinsics/stat.c: Do not include <stdlib.h> header.
* intrinsics/symlnk.c: Do not include <stdlib.h> header.
* intrinsics/system.c: Do not include <stdlib.h> header.
* intrinsics/unlink.c: Do not include <stdlib.h> header.
* io/fbuf.c: Do not include <stdlib.h> header.
* io/format.c: Do not include <stdlib.h> header.
* io/intrinsics.c: Do not include <stdlib.h> header.
* io/list_read.c: Do not include <stdlib.h> header.
* io/lock.c: Do not include <stdlib.h> header.
* io/open.c: Do not include <stdlib.h> header.
* io/read.c: Do not include <stdlib.h> header.
* io/transfer.c: Do not include <stdlib.h> header.
* io/unit.c: Do not include <stdlib.h> header.
* io/unix.c: Do not include <stdlib.h> header.
* io/write.c: Do not include <stdlib.h> header.
* m4/all.m4: Do not include <stdlib.h> header.
* m4/any.m4: Do not include <stdlib.h> header.
* m4/bessel.m4: Do not include <stdlib.h> header.
* m4/count.m4: Do not include <stdlib.h> header.
* m4/cshift0.m4: Do not include <stdlib.h> header.
* m4/cshift1.m4: Do not include <stdlib.h> header.
* m4/eoshift1.m4: Do not include <stdlib.h> header.
* m4/eoshift3.m4: Do not include <stdlib.h> header.
* m4/iall.m4: Do not include <stdlib.h> header.
* m4/iany.m4: Do not include <stdlib.h> header.
* m4/in_pack.m4: Do not include <stdlib.h> header.
* m4/in_unpack.m4: Do not include <stdlib.h> header.
* m4/iparity.m4: Do not include <stdlib.h> header.
* m4/matmul.m4: Do not include <stdlib.h> header.
* m4/matmull.m4: Do not include <stdlib.h> header.
* m4/maxloc0.m4: Do not include <stdlib.h> header.
* m4/maxloc1.m4: Do not include <stdlib.h> header.
* m4/maxval.m4: Do not include <stdlib.h> header.
* m4/minloc0.m4: Do not include <stdlib.h> header.
* m4/minloc1.m4: Do not include <stdlib.h> header.
* m4/minval.m4: Do not include <stdlib.h> header.
* m4/norm2.m4: Do not include <stdlib.h> header.
* m4/pack.m4: Do not include <stdlib.h> header.
* m4/parity.m4: Do not include <stdlib.h> header.
* m4/product.m4: Do not include <stdlib.h> header.
* m4/reshape.m4: Do not include <stdlib.h> header.
* m4/shape.m4: Do not include <stdlib.h> header.
* m4/spread.m4: Do not include <stdlib.h> header.
* m4/sum.m4: Do not include <stdlib.h> header.
* m4/unpack.m4: Do not include <stdlib.h> header.
* runtime/environ.c: Do not include <stdlib.h> header.
* runtime/error.c: Do not include <stdlib.h> header.
* runtime/memory.c: Do not include <stdlib.h> header.
* runtime/minimal.c: Do not include <stdlib.h> header.
* runtime/string.c: Do not include <stdlib.h> header.
* generated/all_l1.c: Regenerate.
* generated/all_l16.c: Regenerate.
* generated/all_l2.c: Regenerate.
* generated/all_l4.c: Regenerate.
* generated/all_l8.c: Regenerate.
* generated/any_l1.c: Regenerate.
* generated/any_l16.c: Regenerate.
* generated/any_l2.c: Regenerate.
* generated/any_l4.c: Regenerate.
* generated/any_l8.c: Regenerate.
* generated/bessel_r10.c: Regenerate.
* generated/bessel_r16.c: Regenerate.
* generated/bessel_r4.c: Regenerate.
* generated/bessel_r8.c: Regenerate.
* generated/count_16_l.c: Regenerate.
* generated/count_1_l.c: Regenerate.
* generated/count_2_l.c: Regenerate.
* generated/count_4_l.c: Regenerate.
* generated/count_8_l.c: Regenerate.
* generated/cshift0_c10.c: Regenerate.
* generated/cshift0_c16.c: Regenerate.
* generated/cshift0_c4.c: Regenerate.
* generated/cshift0_c8.c: Regenerate.
* generated/cshift0_i1.c: Regenerate.
* generated/cshift0_i16.c: Regenerate.
* generated/cshift0_i2.c: Regenerate.
* generated/cshift0_i4.c: Regenerate.
* generated/cshift0_i8.c: Regenerate.
* generated/cshift0_r10.c: Regenerate.
* generated/cshift0_r16.c: Regenerate.
* generated/cshift0_r4.c: Regenerate.
* generated/cshift0_r8.c: Regenerate.
* generated/cshift1_16.c: Regenerate.
* generated/cshift1_4.c: Regenerate.
* generated/cshift1_8.c: Regenerate.
* generated/eoshift1_16.c: Regenerate.
* generated/eoshift1_4.c: Regenerate.
* generated/eoshift1_8.c: Regenerate.
* generated/eoshift3_16.c: Regenerate.
* generated/eoshift3_4.c: Regenerate.
* generated/eoshift3_8.c: Regenerate.
* generated/iall_i1.c: Regenerate.
* generated/iall_i16.c: Regenerate.
* generated/iall_i2.c: Regenerate.
* generated/iall_i4.c: Regenerate.
* generated/iall_i8.c: Regenerate.
* generated/iany_i1.c: Regenerate.
* generated/iany_i16.c: Regenerate.
* generated/iany_i2.c: Regenerate.
* generated/iany_i4.c: Regenerate.
* generated/iany_i8.c: Regenerate.
* generated/in_pack_c10.c: Regenerate.
* generated/in_pack_c16.c: Regenerate.
* generated/in_pack_c4.c: Regenerate.
* generated/in_pack_c8.c: Regenerate.
* generated/in_pack_i1.c: Regenerate.
* generated/in_pack_i16.c: Regenerate.
* generated/in_pack_i2.c: Regenerate.
* generated/in_pack_i4.c: Regenerate.
* generated/in_pack_i8.c: Regenerate.
* generated/in_pack_r10.c: Regenerate.
* generated/in_pack_r16.c: Regenerate.
* generated/in_pack_r4.c: Regenerate.
* generated/in_pack_r8.c: Regenerate.
* generated/in_unpack_c10.c: Regenerate.
* generated/in_unpack_c16.c: Regenerate.
* generated/in_unpack_c4.c: Regenerate.
* generated/in_unpack_c8.c: Regenerate.
* generated/in_unpack_i1.c: Regenerate.
* generated/in_unpack_i16.c: Regenerate.
* generated/in_unpack_i2.c: Regenerate.
* generated/in_unpack_i4.c: Regenerate.
* generated/in_unpack_i8.c: Regenerate.
* generated/in_unpack_r10.c: Regenerate.
* generated/in_unpack_r16.c: Regenerate.
* generated/in_unpack_r4.c: Regenerate.
* generated/in_unpack_r8.c: Regenerate.
* generated/iparity_i1.c: Regenerate.
* generated/iparity_i16.c: Regenerate.
* generated/iparity_i2.c: Regenerate.
* generated/iparity_i4.c: Regenerate.
* generated/iparity_i8.c: Regenerate.
* generated/matmul_c10.c: Regenerate.
* generated/matmul_c16.c: Regenerate.
* generated/matmul_c4.c: Regenerate.
* generated/matmul_c8.c: Regenerate.
* generated/matmul_i1.c: Regenerate.
* generated/matmul_i16.c: Regenerate.
* generated/matmul_i2.c: Regenerate.
* generated/matmul_i4.c: Regenerate.
* generated/matmul_i8.c: Regenerate.
* generated/matmul_l16.c: Regenerate.
* generated/matmul_l4.c: Regenerate.
* generated/matmul_l8.c: Regenerate.
* generated/matmul_r10.c: Regenerate.
* generated/matmul_r16.c: Regenerate.
* generated/matmul_r4.c: Regenerate.
* generated/matmul_r8.c: Regenerate.
* generated/maxloc0_16_i1.c: Regenerate.
* generated/maxloc0_16_i16.c: Regenerate.
* generated/maxloc0_16_i2.c: Regenerate.
* generated/maxloc0_16_i4.c: Regenerate.
* generated/maxloc0_16_i8.c: Regenerate.
* generated/maxloc0_16_r10.c: Regenerate.
* generated/maxloc0_16_r16.c: Regenerate.
* generated/maxloc0_16_r4.c: Regenerate.
* generated/maxloc0_16_r8.c: Regenerate.
* generated/maxloc0_4_i1.c: Regenerate.
* generated/maxloc0_4_i16.c: Regenerate.
* generated/maxloc0_4_i2.c: Regenerate.
* generated/maxloc0_4_i4.c: Regenerate.
* generated/maxloc0_4_i8.c: Regenerate.
* generated/maxloc0_4_r10.c: Regenerate.
* generated/maxloc0_4_r16.c: Regenerate.
* generated/maxloc0_4_r4.c: Regenerate.
* generated/maxloc0_4_r8.c: Regenerate.
* generated/maxloc0_8_i1.c: Regenerate.
* generated/maxloc0_8_i16.c: Regenerate.
* generated/maxloc0_8_i2.c: Regenerate.
* generated/maxloc0_8_i4.c: Regenerate.
* generated/maxloc0_8_i8.c: Regenerate.
* generated/maxloc0_8_r10.c: Regenerate.
* generated/maxloc0_8_r16.c: Regenerate.
* generated/maxloc0_8_r4.c: Regenerate.
* generated/maxloc0_8_r8.c: Regenerate.
* generated/maxloc1_16_i1.c: Regenerate.
* generated/maxloc1_16_i16.c: Regenerate.
* generated/maxloc1_16_i2.c: Regenerate.
* generated/maxloc1_16_i4.c: Regenerate.
* generated/maxloc1_16_i8.c: Regenerate.
* generated/maxloc1_16_r10.c: Regenerate.
* generated/maxloc1_16_r16.c: Regenerate.
* generated/maxloc1_16_r4.c: Regenerate.
* generated/maxloc1_16_r8.c: Regenerate.
* generated/maxloc1_4_i1.c: Regenerate.
* generated/maxloc1_4_i16.c: Regenerate.
* generated/maxloc1_4_i2.c: Regenerate.
* generated/maxloc1_4_i4.c: Regenerate.
* generated/maxloc1_4_i8.c: Regenerate.
* generated/maxloc1_4_r10.c: Regenerate.
* generated/maxloc1_4_r16.c: Regenerate.
* generated/maxloc1_4_r4.c: Regenerate.
* generated/maxloc1_4_r8.c: Regenerate.
* generated/maxloc1_8_i1.c: Regenerate.
* generated/maxloc1_8_i16.c: Regenerate.
* generated/maxloc1_8_i2.c: Regenerate.
* generated/maxloc1_8_i4.c: Regenerate.
* generated/maxloc1_8_i8.c: Regenerate.
* generated/maxloc1_8_r10.c: Regenerate.
* generated/maxloc1_8_r16.c: Regenerate.
* generated/maxloc1_8_r4.c: Regenerate.
* generated/maxloc1_8_r8.c: Regenerate.
* generated/maxval_i1.c: Regenerate.
* generated/maxval_i16.c: Regenerate.
* generated/maxval_i2.c: Regenerate.
* generated/maxval_i4.c: Regenerate.
* generated/maxval_i8.c: Regenerate.
* generated/maxval_r10.c: Regenerate.
* generated/maxval_r16.c: Regenerate.
* generated/maxval_r4.c: Regenerate.
* generated/maxval_r8.c: Regenerate.
* generated/minloc0_16_i1.c: Regenerate.
* generated/minloc0_16_i16.c: Regenerate.
* generated/minloc0_16_i2.c: Regenerate.
* generated/minloc0_16_i4.c: Regenerate.
* generated/minloc0_16_i8.c: Regenerate.
* generated/minloc0_16_r10.c: Regenerate.
* generated/minloc0_16_r16.c: Regenerate.
* generated/minloc0_16_r4.c: Regenerate.
* generated/minloc0_16_r8.c: Regenerate.
* generated/minloc0_4_i1.c: Regenerate.
* generated/minloc0_4_i16.c: Regenerate.
* generated/minloc0_4_i2.c: Regenerate.
* generated/minloc0_4_i4.c: Regenerate.
* generated/minloc0_4_i8.c: Regenerate.
* generated/minloc0_4_r10.c: Regenerate.
* generated/minloc0_4_r16.c: Regenerate.
* generated/minloc0_4_r4.c: Regenerate.
* generated/minloc0_4_r8.c: Regenerate.
* generated/minloc0_8_i1.c: Regenerate.
* generated/minloc0_8_i16.c: Regenerate.
* generated/minloc0_8_i2.c: Regenerate.
* generated/minloc0_8_i4.c: Regenerate.
* generated/minloc0_8_i8.c: Regenerate.
* generated/minloc0_8_r10.c: Regenerate.
* generated/minloc0_8_r16.c: Regenerate.
* generated/minloc0_8_r4.c: Regenerate.
* generated/minloc0_8_r8.c: Regenerate.
* generated/minloc1_16_i1.c: Regenerate.
* generated/minloc1_16_i16.c: Regenerate.
* generated/minloc1_16_i2.c: Regenerate.
* generated/minloc1_16_i4.c: Regenerate.
* generated/minloc1_16_i8.c: Regenerate.
* generated/minloc1_16_r10.c: Regenerate.
* generated/minloc1_16_r16.c: Regenerate.
* generated/minloc1_16_r4.c: Regenerate.
* generated/minloc1_16_r8.c: Regenerate.
* generated/minloc1_4_i1.c: Regenerate.
* generated/minloc1_4_i16.c: Regenerate.
* generated/minloc1_4_i2.c: Regenerate.
* generated/minloc1_4_i4.c: Regenerate.
* generated/minloc1_4_i8.c: Regenerate.
* generated/minloc1_4_r10.c: Regenerate.
* generated/minloc1_4_r16.c: Regenerate.
* generated/minloc1_4_r4.c: Regenerate.
* generated/minloc1_4_r8.c: Regenerate.
* generated/minloc1_8_i1.c: Regenerate.
* generated/minloc1_8_i16.c: Regenerate.
* generated/minloc1_8_i2.c: Regenerate.
* generated/minloc1_8_i4.c: Regenerate.
* generated/minloc1_8_i8.c: Regenerate.
* generated/minloc1_8_r10.c: Regenerate.
* generated/minloc1_8_r16.c: Regenerate.
* generated/minloc1_8_r4.c: Regenerate.
* generated/minloc1_8_r8.c: Regenerate.
* generated/minval_i1.c: Regenerate.
* generated/minval_i16.c: Regenerate.
* generated/minval_i2.c: Regenerate.
* generated/minval_i4.c: Regenerate.
* generated/minval_i8.c: Regenerate.
* generated/minval_r10.c: Regenerate.
* generated/minval_r16.c: Regenerate.
* generated/minval_r4.c: Regenerate.
* generated/minval_r8.c: Regenerate.
* generated/norm2_r10.c: Regenerate.
* generated/norm2_r16.c: Regenerate.
* generated/norm2_r4.c: Regenerate.
* generated/norm2_r8.c: Regenerate.
* generated/pack_c10.c: Regenerate.
* generated/pack_c16.c: Regenerate.
* generated/pack_c4.c: Regenerate.
* generated/pack_c8.c: Regenerate.
* generated/pack_i1.c: Regenerate.
* generated/pack_i16.c: Regenerate.
* generated/pack_i2.c: Regenerate.
* generated/pack_i4.c: Regenerate.
* generated/pack_i8.c: Regenerate.
* generated/pack_r10.c: Regenerate.
* generated/pack_r16.c: Regenerate.
* generated/pack_r4.c: Regenerate.
* generated/pack_r8.c: Regenerate.
* generated/parity_l1.c: Regenerate.
* generated/parity_l16.c: Regenerate.
* generated/parity_l2.c: Regenerate.
* generated/parity_l4.c: Regenerate.
* generated/parity_l8.c: Regenerate.
* generated/product_c10.c: Regenerate.
* generated/product_c16.c: Regenerate.
* generated/product_c4.c: Regenerate.
* generated/product_c8.c: Regenerate.
* generated/product_i1.c: Regenerate.
* generated/product_i16.c: Regenerate.
* generated/product_i2.c: Regenerate.
* generated/product_i4.c: Regenerate.
* generated/product_i8.c: Regenerate.
* generated/product_r10.c: Regenerate.
* generated/product_r16.c: Regenerate.
* generated/product_r4.c: Regenerate.
* generated/product_r8.c: Regenerate.
* generated/reshape_c10.c: Regenerate.
* generated/reshape_c16.c: Regenerate.
* generated/reshape_c4.c: Regenerate.
* generated/reshape_c8.c: Regenerate.
* generated/reshape_i16.c: Regenerate.
* generated/reshape_i4.c: Regenerate.
* generated/reshape_i8.c: Regenerate.
* generated/reshape_r10.c: Regenerate.
* generated/reshape_r16.c: Regenerate.
* generated/reshape_r4.c: Regenerate.
* generated/reshape_r8.c: Regenerate.
* generated/shape_i1.c: Regenerate.
* generated/shape_i16.c: Regenerate.
* generated/shape_i2.c: Regenerate.
* generated/shape_i4.c: Regenerate.
* generated/shape_i8.c: Regenerate.
* generated/spread_c10.c: Regenerate.
* generated/spread_c16.c: Regenerate.
* generated/spread_c4.c: Regenerate.
* generated/spread_c8.c: Regenerate.
* generated/spread_i1.c: Regenerate.
* generated/spread_i16.c: Regenerate.
* generated/spread_i2.c: Regenerate.
* generated/spread_i4.c: Regenerate.
* generated/spread_i8.c: Regenerate.
* generated/spread_r10.c: Regenerate.
* generated/spread_r16.c: Regenerate.
* generated/spread_r4.c: Regenerate.
* generated/spread_r8.c: Regenerate.
* generated/sum_c10.c: Regenerate.
* generated/sum_c16.c: Regenerate.
* generated/sum_c4.c: Regenerate.
* generated/sum_c8.c: Regenerate.
* generated/sum_i1.c: Regenerate.
* generated/sum_i16.c: Regenerate.
* generated/sum_i2.c: Regenerate.
* generated/sum_i4.c: Regenerate.
* generated/sum_i8.c: Regenerate.
* generated/sum_r10.c: Regenerate.
* generated/sum_r16.c: Regenerate.
* generated/sum_r4.c: Regenerate.
* generated/sum_r8.c: Regenerate.
* generated/unpack_c10.c: Regenerate.
* generated/unpack_c16.c: Regenerate.
* generated/unpack_c4.c: Regenerate.
* generated/unpack_c8.c: Regenerate.
* generated/unpack_i1.c: Regenerate.
* generated/unpack_i16.c: Regenerate.
* generated/unpack_i2.c: Regenerate.
* generated/unpack_i4.c: Regenerate.
* generated/unpack_i8.c: Regenerate.
* generated/unpack_r10.c: Regenerate.
* generated/unpack_r16.c: Regenerate.
* generated/unpack_r4.c: Regenerate.
* generated/unpack_r8.c: Regenerate.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@243846 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
* intrinsics/access.c: Remove unused headers.
* intrinsics/chdir.c: Remove unused headers.
* intrinsics/chmod.c: Remove unused headers.
* intrinsics/cshift0.c: Remove unused headers.
* intrinsics/ctime.c: Remove unused headers.
* intrinsics/eoshift0.c: Remove unused headers.
* intrinsics/eoshift2.c: Remove unused headers.
* intrinsics/extends_type_of.c: Remove unused headers.
* intrinsics/link.c: Remove unused headers.
* intrinsics/pack_generic.c: Remove unused headers.
* intrinsics/perror.c: Remove unused headers.
* intrinsics/rename.c: Remove unused headers.
* intrinsics/reshape_generic.c: Remove unused headers.
* intrinsics/sleep.c: Remove unused headers.
* intrinsics/spread_generic.c: Remove unused headers.
* intrinsics/stat.c: Remove unused headers.
* intrinsics/string_intrinsics.c: Remove unused headers.
* intrinsics/symlnk.c: Remove unused headers.
* intrinsics/system.c: Remove unused headers.
* intrinsics/umask.c: Remove unused headers.
* intrinsics/unlink.c: Remove unused headers.
* intrinsics/unpack_generic.c: Remove unused headers.
* io/read.c: Remove unused headers.
* io/transfer.c: Remove unused headers.
* io/unix.c: Remove unused headers.
* io/write.c: Remove unused headers.
* m4/all.m4: Remove unused headers.
* m4/any.m4: Remove unused headers.
* m4/bessel.m4: Remove unused headers.
* m4/count.m4: Remove unused headers.
* m4/cshift0.m4: Remove unused headers.
* m4/cshift1.m4: Remove unused headers.
* m4/eoshift1.m4: Remove unused headers.
* m4/eoshift3.m4: Remove unused headers.
* m4/iall.m4: Remove unused headers.
* m4/iany.m4: Remove unused headers.
* m4/in_pack.m4: Remove unused headers.
* m4/in_unpack.m4: Remove unused headers.
* m4/iparity.m4: Remove unused headers.
* m4/maxloc0.m4: Remove unused headers.
* m4/maxloc1.m4: Remove unused headers.
* m4/maxval.m4: Remove unused headers.
* m4/minloc0.m4: Remove unused headers.
* m4/minloc1.m4: Remove unused headers.
* m4/minval.m4: Remove unused headers.
* m4/norm2.m4: Remove unused headers.
* m4/pack.m4: Remove unused headers.
* m4/parity.m4: Remove unused headers.
* m4/product.m4: Remove unused headers.
* m4/reshape.m4: Remove unused headers.
* m4/shape.m4: Remove unused headers.
* m4/spread.m4: Remove unused headers.
* m4/sum.m4: Remove unused headers.
* m4/unpack.m4: Remove unused headers.
* runtime/backtrace.c: Remove unused headers.
* runtime/convert_char.c: Remove unused headers.
* runtime/in_pack_generic.c: Remove unused headers.
* runtime/in_unpack_generic.c: Remove unused headers.
* runtime/main.c: Remove unused headers.
* runtime/stop.c: Remove unused headers.
* generated/all_l1.c: Regenerate.
* generated/all_l16.c: Regenerate.
* generated/all_l2.c: Regenerate.
* generated/all_l4.c: Regenerate.
* generated/all_l8.c: Regenerate.
* generated/any_l1.c: Regenerate.
* generated/any_l16.c: Regenerate.
* generated/any_l2.c: Regenerate.
* generated/any_l4.c: Regenerate.
* generated/any_l8.c: Regenerate.
* generated/bessel_r10.c: Regenerate.
* generated/bessel_r16.c: Regenerate.
* generated/bessel_r4.c: Regenerate.
* generated/bessel_r8.c: Regenerate.
* generated/count_16_l.c: Regenerate.
* generated/count_1_l.c: Regenerate.
* generated/count_2_l.c: Regenerate.
* generated/count_4_l.c: Regenerate.
* generated/count_8_l.c: Regenerate.
* generated/cshift0_c10.c: Regenerate.
* generated/cshift0_c16.c: Regenerate.
* generated/cshift0_c4.c: Regenerate.
* generated/cshift0_c8.c: Regenerate.
* generated/cshift0_i1.c: Regenerate.
* generated/cshift0_i16.c: Regenerate.
* generated/cshift0_i2.c: Regenerate.
* generated/cshift0_i4.c: Regenerate.
* generated/cshift0_i8.c: Regenerate.
* generated/cshift0_r10.c: Regenerate.
* generated/cshift0_r16.c: Regenerate.
* generated/cshift0_r4.c: Regenerate.
* generated/cshift0_r8.c: Regenerate.
* generated/cshift1_16.c: Regenerate.
* generated/cshift1_4.c: Regenerate.
* generated/cshift1_8.c: Regenerate.
* generated/eoshift1_16.c: Regenerate.
* generated/eoshift1_4.c: Regenerate.
* generated/eoshift1_8.c: Regenerate.
* generated/eoshift3_16.c: Regenerate.
* generated/eoshift3_4.c: Regenerate.
* generated/eoshift3_8.c: Regenerate.
* generated/iall_i1.c: Regenerate.
* generated/iall_i16.c: Regenerate.
* generated/iall_i2.c: Regenerate.
* generated/iall_i4.c: Regenerate.
* generated/iall_i8.c: Regenerate.
* generated/iany_i1.c: Regenerate.
* generated/iany_i16.c: Regenerate.
* generated/iany_i2.c: Regenerate.
* generated/iany_i4.c: Regenerate.
* generated/iany_i8.c: Regenerate.
* generated/in_pack_c10.c: Regenerate.
* generated/in_pack_c16.c: Regenerate.
* generated/in_pack_c4.c: Regenerate.
* generated/in_pack_c8.c: Regenerate.
* generated/in_pack_i1.c: Regenerate.
* generated/in_pack_i16.c: Regenerate.
* generated/in_pack_i2.c: Regenerate.
* generated/in_pack_i4.c: Regenerate.
* generated/in_pack_i8.c: Regenerate.
* generated/in_pack_r10.c: Regenerate.
* generated/in_pack_r16.c: Regenerate.
* generated/in_pack_r4.c: Regenerate.
* generated/in_pack_r8.c: Regenerate.
* generated/in_unpack_c10.c: Regenerate.
* generated/in_unpack_c16.c: Regenerate.
* generated/in_unpack_c4.c: Regenerate.
* generated/in_unpack_c8.c: Regenerate.
* generated/in_unpack_i1.c: Regenerate.
* generated/in_unpack_i16.c: Regenerate.
* generated/in_unpack_i2.c: Regenerate.
* generated/in_unpack_i4.c: Regenerate.
* generated/in_unpack_i8.c: Regenerate.
* generated/in_unpack_r10.c: Regenerate.
* generated/in_unpack_r16.c: Regenerate.
* generated/in_unpack_r4.c: Regenerate.
* generated/in_unpack_r8.c: Regenerate.
* generated/iparity_i1.c: Regenerate.
* generated/iparity_i16.c: Regenerate.
* generated/iparity_i2.c: Regenerate.
* generated/iparity_i4.c: Regenerate.
* generated/iparity_i8.c: Regenerate.
* generated/maxloc0_16_i1.c: Regenerate.
* generated/maxloc0_16_i16.c: Regenerate.
* generated/maxloc0_16_i2.c: Regenerate.
* generated/maxloc0_16_i4.c: Regenerate.
* generated/maxloc0_16_i8.c: Regenerate.
* generated/maxloc0_16_r10.c: Regenerate.
* generated/maxloc0_16_r16.c: Regenerate.
* generated/maxloc0_16_r4.c: Regenerate.
* generated/maxloc0_16_r8.c: Regenerate.
* generated/maxloc0_4_i1.c: Regenerate.
* generated/maxloc0_4_i16.c: Regenerate.
* generated/maxloc0_4_i2.c: Regenerate.
* generated/maxloc0_4_i4.c: Regenerate.
* generated/maxloc0_4_i8.c: Regenerate.
* generated/maxloc0_4_r10.c: Regenerate.
* generated/maxloc0_4_r16.c: Regenerate.
* generated/maxloc0_4_r4.c: Regenerate.
* generated/maxloc0_4_r8.c: Regenerate.
* generated/maxloc0_8_i1.c: Regenerate.
* generated/maxloc0_8_i16.c: Regenerate.
* generated/maxloc0_8_i2.c: Regenerate.
* generated/maxloc0_8_i4.c: Regenerate.
* generated/maxloc0_8_i8.c: Regenerate.
* generated/maxloc0_8_r10.c: Regenerate.
* generated/maxloc0_8_r16.c: Regenerate.
* generated/maxloc0_8_r4.c: Regenerate.
* generated/maxloc0_8_r8.c: Regenerate.
* generated/maxloc1_16_i1.c: Regenerate.
* generated/maxloc1_16_i16.c: Regenerate.
* generated/maxloc1_16_i2.c: Regenerate.
* generated/maxloc1_16_i4.c: Regenerate.
* generated/maxloc1_16_i8.c: Regenerate.
* generated/maxloc1_16_r10.c: Regenerate.
* generated/maxloc1_16_r16.c: Regenerate.
* generated/maxloc1_16_r4.c: Regenerate.
* generated/maxloc1_16_r8.c: Regenerate.
* generated/maxloc1_4_i1.c: Regenerate.
* generated/maxloc1_4_i16.c: Regenerate.
* generated/maxloc1_4_i2.c: Regenerate.
* generated/maxloc1_4_i4.c: Regenerate.
* generated/maxloc1_4_i8.c: Regenerate.
* generated/maxloc1_4_r10.c: Regenerate.
* generated/maxloc1_4_r16.c: Regenerate.
* generated/maxloc1_4_r4.c: Regenerate.
* generated/maxloc1_4_r8.c: Regenerate.
* generated/maxloc1_8_i1.c: Regenerate.
* generated/maxloc1_8_i16.c: Regenerate.
* generated/maxloc1_8_i2.c: Regenerate.
* generated/maxloc1_8_i4.c: Regenerate.
* generated/maxloc1_8_i8.c: Regenerate.
* generated/maxloc1_8_r10.c: Regenerate.
* generated/maxloc1_8_r16.c: Regenerate.
* generated/maxloc1_8_r4.c: Regenerate.
* generated/maxloc1_8_r8.c: Regenerate.
* generated/maxval_i1.c: Regenerate.
* generated/maxval_i16.c: Regenerate.
* generated/maxval_i2.c: Regenerate.
* generated/maxval_i4.c: Regenerate.
* generated/maxval_i8.c: Regenerate.
* generated/maxval_r10.c: Regenerate.
* generated/maxval_r16.c: Regenerate.
* generated/maxval_r4.c: Regenerate.
* generated/maxval_r8.c: Regenerate.
* generated/minloc0_16_i1.c: Regenerate.
* generated/minloc0_16_i16.c: Regenerate.
* generated/minloc0_16_i2.c: Regenerate.
* generated/minloc0_16_i4.c: Regenerate.
* generated/minloc0_16_i8.c: Regenerate.
* generated/minloc0_16_r10.c: Regenerate.
* generated/minloc0_16_r16.c: Regenerate.
* generated/minloc0_16_r4.c: Regenerate.
* generated/minloc0_16_r8.c: Regenerate.
* generated/minloc0_4_i1.c: Regenerate.
* generated/minloc0_4_i16.c: Regenerate.
* generated/minloc0_4_i2.c: Regenerate.
* generated/minloc0_4_i4.c: Regenerate.
* generated/minloc0_4_i8.c: Regenerate.
* generated/minloc0_4_r10.c: Regenerate.
* generated/minloc0_4_r16.c: Regenerate.
* generated/minloc0_4_r4.c: Regenerate.
* generated/minloc0_4_r8.c: Regenerate.
* generated/minloc0_8_i1.c: Regenerate.
* generated/minloc0_8_i16.c: Regenerate.
* generated/minloc0_8_i2.c: Regenerate.
* generated/minloc0_8_i4.c: Regenerate.
* generated/minloc0_8_i8.c: Regenerate.
* generated/minloc0_8_r10.c: Regenerate.
* generated/minloc0_8_r16.c: Regenerate.
* generated/minloc0_8_r4.c: Regenerate.
* generated/minloc0_8_r8.c: Regenerate.
* generated/minloc1_16_i1.c: Regenerate.
* generated/minloc1_16_i16.c: Regenerate.
* generated/minloc1_16_i2.c: Regenerate.
* generated/minloc1_16_i4.c: Regenerate.
* generated/minloc1_16_i8.c: Regenerate.
* generated/minloc1_16_r10.c: Regenerate.
* generated/minloc1_16_r16.c: Regenerate.
* generated/minloc1_16_r4.c: Regenerate.
* generated/minloc1_16_r8.c: Regenerate.
* generated/minloc1_4_i1.c: Regenerate.
* generated/minloc1_4_i16.c: Regenerate.
* generated/minloc1_4_i2.c: Regenerate.
* generated/minloc1_4_i4.c: Regenerate.
* generated/minloc1_4_i8.c: Regenerate.
* generated/minloc1_4_r10.c: Regenerate.
* generated/minloc1_4_r16.c: Regenerate.
* generated/minloc1_4_r4.c: Regenerate.
* generated/minloc1_4_r8.c: Regenerate.
* generated/minloc1_8_i1.c: Regenerate.
* generated/minloc1_8_i16.c: Regenerate.
* generated/minloc1_8_i2.c: Regenerate.
* generated/minloc1_8_i4.c: Regenerate.
* generated/minloc1_8_i8.c: Regenerate.
* generated/minloc1_8_r10.c: Regenerate.
* generated/minloc1_8_r16.c: Regenerate.
* generated/minloc1_8_r4.c: Regenerate.
* generated/minloc1_8_r8.c: Regenerate.
* generated/minval_i1.c: Regenerate.
* generated/minval_i16.c: Regenerate.
* generated/minval_i2.c: Regenerate.
* generated/minval_i4.c: Regenerate.
* generated/minval_i8.c: Regenerate.
* generated/minval_r10.c: Regenerate.
* generated/minval_r16.c: Regenerate.
* generated/minval_r4.c: Regenerate.
* generated/minval_r8.c: Regenerate.
* generated/norm2_r10.c: Regenerate.
* generated/norm2_r16.c: Regenerate.
* generated/norm2_r4.c: Regenerate.
* generated/norm2_r8.c: Regenerate.
* generated/pack_c10.c: Regenerate.
* generated/pack_c16.c: Regenerate.
* generated/pack_c4.c: Regenerate.
* generated/pack_c8.c: Regenerate.
* generated/pack_i1.c: Regenerate.
* generated/pack_i16.c: Regenerate.
* generated/pack_i2.c: Regenerate.
* generated/pack_i4.c: Regenerate.
* generated/pack_i8.c: Regenerate.
* generated/pack_r10.c: Regenerate.
* generated/pack_r16.c: Regenerate.
* generated/pack_r4.c: Regenerate.
* generated/pack_r8.c: Regenerate.
* generated/parity_l1.c: Regenerate.
* generated/parity_l16.c: Regenerate.
* generated/parity_l2.c: Regenerate.
* generated/parity_l4.c: Regenerate.
* generated/parity_l8.c: Regenerate.
* generated/product_c10.c: Regenerate.
* generated/product_c16.c: Regenerate.
* generated/product_c4.c: Regenerate.
* generated/product_c8.c: Regenerate.
* generated/product_i1.c: Regenerate.
* generated/product_i16.c: Regenerate.
* generated/product_i2.c: Regenerate.
* generated/product_i4.c: Regenerate.
* generated/product_i8.c: Regenerate.
* generated/product_r10.c: Regenerate.
* generated/product_r16.c: Regenerate.
* generated/product_r4.c: Regenerate.
* generated/product_r8.c: Regenerate.
* generated/reshape_c10.c: Regenerate.
* generated/reshape_c16.c: Regenerate.
* generated/reshape_c4.c: Regenerate.
* generated/reshape_c8.c: Regenerate.
* generated/reshape_i16.c: Regenerate.
* generated/reshape_i4.c: Regenerate.
* generated/reshape_i8.c: Regenerate.
* generated/reshape_r10.c: Regenerate.
* generated/reshape_r16.c: Regenerate.
* generated/reshape_r4.c: Regenerate.
* generated/reshape_r8.c: Regenerate.
* generated/shape_i1.c: Regenerate.
* generated/shape_i16.c: Regenerate.
* generated/shape_i2.c: Regenerate.
* generated/shape_i4.c: Regenerate.
* generated/shape_i8.c: Regenerate.
* generated/spread_c10.c: Regenerate.
* generated/spread_c16.c: Regenerate.
* generated/spread_c4.c: Regenerate.
* generated/spread_c8.c: Regenerate.
* generated/spread_i1.c: Regenerate.
* generated/spread_i16.c: Regenerate.
* generated/spread_i2.c: Regenerate.
* generated/spread_i4.c: Regenerate.
* generated/spread_i8.c: Regenerate.
* generated/spread_r10.c: Regenerate.
* generated/spread_r16.c: Regenerate.
* generated/spread_r4.c: Regenerate.
* generated/spread_r8.c: Regenerate.
* generated/sum_c10.c: Regenerate.
* generated/sum_c16.c: Regenerate.
* generated/sum_c4.c: Regenerate.
* generated/sum_c8.c: Regenerate.
* generated/sum_i1.c: Regenerate.
* generated/sum_i16.c: Regenerate.
* generated/sum_i2.c: Regenerate.
* generated/sum_i4.c: Regenerate.
* generated/sum_i8.c: Regenerate.
* generated/sum_r10.c: Regenerate.
* generated/sum_r16.c: Regenerate.
* generated/sum_r4.c: Regenerate.
* generated/sum_r8.c: Regenerate.
* generated/unpack_c10.c: Regenerate.
* generated/unpack_c16.c: Regenerate.
* generated/unpack_c4.c: Regenerate.
* generated/unpack_c8.c: Regenerate.
* generated/unpack_i1.c: Regenerate.
* generated/unpack_i16.c: Regenerate.
* generated/unpack_i2.c: Regenerate.
* generated/unpack_i4.c: Regenerate.
* generated/unpack_i8.c: Regenerate.
* generated/unpack_r10.c: Regenerate.
* generated/unpack_r16.c: Regenerate.
* generated/unpack_r4.c: Regenerate.
* generated/unpack_r8.c: Regenerate.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@243844 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
* gfortran.map: Remove _gfortran_ftell2.
* io/intrinsics.c (ftell): Remove.
(ftell2): Rename to ftell.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@243841 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@243765 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
gcc/fortran/
* gfortran.texi: Document.
* gfortran.h (gfc_dt): New field default_exp.
* primary.c (match_real_constant): Default exponent with -fdec.
* io.c (match_io): Set dt.default_exp with -fdec.
* ioparm.def (IOPARM_dt_default_exp): New.
* trans-io.c (build_dt): Set IOPARM_dt_default_exp with -fdec.
libgfortran/io/
* io.h (IOPARM_DT_DEFAULT_EXP): New flag bit.
* list_read.c (parse_real, read_real): Allow omission of exponent with
IOPARM_DT_DEFAULT_EXP.
* read.c (read_f): Ditto.
gcc/testsuite/gfortran.dg/
* dec_exp_1.f90, dec_exp_2.f90, dec_exp_3.f90: New testcases.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241828 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR fortran/54679
* io.c (check_format): Adjust checks for FMT_L to treat a zero
width as an extension, giving warnings or error as appropriate.
Improve messages.
PR libgfortran/54679
* io/format.c (parse_format_list): Adjust checks for FMT_L to
treat a zero width as an extension, giving warnings or error
as appropriate. Improve messages.
PR fortran/54679
* gfortran.dg/fmt_l.f90: Update test.
* gfortran.dg/fmt_l0.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241720 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR fortran/78123
* io/transfer.c (formatted_transfer_scalar_read): Clear seen_eor
only if we have tabbed to left of current position.
* gfortran.dg/fmt_t_9.f: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241691 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
gcc/fortran/
* gfortran.texi: Document.
* frontend-passes.c (gfc_code_walker): Add SHARE and CARRIAGECONTROL.
* io.c (gfc_free_open, gfc_resolve_open, gfc_match_open): Ditto.
* gfortran.h (gfc_open): Add SHARE, CARRIAGECONTROL, and READONLY.
* io.c (io_tag, match_open_element): Ditto.
* ioparm.def: Ditto.
* trans-io.c (gfc_trans_open): Ditto.
* io.c (match_dec_etag, match_dec_ftag): New functions.
libgfortran/io/
* libgfortran.h (IOPARM_OPEN_HAS_READONLY, IOPARM_OPEN_HAS_SHARE,
IOPARM_OPEN_HAS_CC): New for READONLY, SHARE, and CARRIAGECONTROL.
* close.c (st_close): Support READONLY.
* io.h (st_parameter_open, unit_flags): Support SHARE, CARRIAGECONTROL,
and READONLY.
* open.c (st_open): Ditto.
* transfer.c (data_transfer_init): Ditto.
* io.h (st_parameter_dt): New member 'cc' for CARRIAGECONTROL.
* write.c (write_check_cc, write_cc): New functions for CARRIAGECONTROL.
* transfer.c (next_record_cc): Ditto.
* file_pos.c (st_endfile): Support SHARE and CARRIAGECONTROL.
* io.h (st_parameter_inquire): Ditto.
* open.c (edit_modes, new_unit): Ditto.
* inquire.c (inquire_via_unit, inquire_via_filename): Ditto.
* io.h (unit_share, unit_cc, cc_fortran, IOPARM_INQUIRE_HAS_SHARE,
IOPARM_INQUIRE_HAS_CC): New for SHARE and CARRIAGECONTROL.
* open.c (share_opt, cc_opt): Ditto.
* read.c (read_x): Support CARRIAGECONTROL.
* transfer.c (read_sf, next_record_r, next_record_w): Ditto.
* write.c (list_formatted_write_scalar, write_a): Ditto.
* unix.h (close_share): New prototype.
* unix.c (open_share, close_share): New functions to handle SHARE.
* unix.c (open_external): Handle READONLY. Call open_share.
* close.c (st_close): Call close_share.
gcc/testsuite/
* dec_io_1.f90: New test.
* dec_io_2.f90: New test.
* dec_io_3.f90: New test.
* dec_io_4.f90: New test.
* dec_io_5.f90: New test.
* dec_io_6.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241550 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241497 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR libfortran/78055
* io/io.h (st_parameter_dt): Restore GFC_IO_INT to maintain
alignment.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241422 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
* io/transfer.c (finalize_transfer): Free format data in child
procedures. (st_read_done, st_write_done): Don't free format
hash table.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241392 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR fortran/48298
* io/io.h: Move size_used from dtp to unit structure. Add bool
has_size to unit structure.
* read.c (read_x): Use has_size and size_used.
* transfer.c (read_sf_internal,read_sf,read_block_form,
read_block_form4): Likewise.
(data_transfer_init): If parent, initialize the size variables.
(finalize_transfer): Set the size variable using size_used in
gfc_unit. (write_block): Delete bogus/dead code.
* gfortran.dg/dtio_17.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241294 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Improve error message, and remove a redundant check, as the same check is
done a bit earlier due to the PR 48587 patch.
2016-10-16 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/48587
* io/transfer.c (data_transfer_init): Improve error message,
remove redundant check.
Regtested on x86_64-pc-linux-gnu.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241211 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Currently GFortran newer reuses unit numbers allocated with NEWUNIT=,
instead having a simple counter that is decremented each time such a
unit is opened. For a long running program which repeatedly opens
files with NEWUNIT= and closes them, the counter can wrap around and
cause an abort. This patch replaces the counter with an allocator
that keeps track of which units numbers are allocated, and can reuse
them once they have been deallocated. Since operating systems tend to
limit the number of simultaneous open files for a process to a
relatively modest number, a relatively simple approach with a linear
scan through an array suffices. Though as a small optimization there
is a low water indicator keeping track of the index for which all unit
numbers below are already allocated. This linear scan also ensures
that we always allocate the smallest available unit number.
2016-10-15 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/48587
* io/io.h (get_unique_unit_number): Remove prototype.
(newunit_alloc): New prototype.
* io/open.c (st_open): Call newunit_alloc.
* io/unit.c (newunits,newunit_size,newunit_lwi): New static
variables.
(GFC_FIRST_NEWUNIT): Rename to NEWUNIT_START.
(next_available_newunit): Remove variable.
(get_unit): Call newunit_alloc, don't try to create negative
external unit.
(close_unit_1): Call newunit_free.
(close_units): Free newunits array.
(get_unique_number): Remove function.
(newunit_alloc): New function.
(newunit_free): New function.
* io/transfer.c (data_transfer_init): Check for invalid unit
number.
testsuite ChangeLog:
2016-10-15 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/48587
* gfortran.dg/negative_unit2.f90: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241199 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Many POSIX systems have the bad habit of not restarting interrupted
syscalls. On these systems it's up to the user to check for an error
with errno == EINTR and restart manually. This patch does this for
libgfortran, so that GFortran users don't have to do it.
2016-10-09 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/67585
* io/io.h: TEMP_FAILURE_RETRY: Define macro if not found.
* io/unix.c (raw_read): Handle EINTR.
(raw_write): Check for return value -1.
(raw_seek): Handle EINTR.
(raw_tell): Likewise.
(raw_size): Likewise.
(raw_truncate): Likewise.
(raw_close): Likewise.
(buf_flush): Call raw_seek instead of lseek.
(buf_read): Likewise.
(buf_write): Likewise.
(fd_to_stream): Handle EINTR.
(tempfile_open): Likewise.
(regular_file2): Likewise.
(compare_file_filename): Likewise.
(find_file): Likewise.
(inquire_sequential): Likewise.
(inquire_direct): Likewise.
(inquire_formatted): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240902 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR fortran/77868
* io/inquire.c (inquire_via_unit): NULL guard the check for
internal unit passed into child IO procedure.
* gfortran.dg/dtio_15.f90: Fix spaces in dg-do.
* gfortran.dg/class_array_20.f03: Likewise.
* gfortran.dg/class_array_21.f03: Likewise.
* gfortran.dg/finalize_29.f08: Likewise.
* gfortran.dg/unlimited_polymorphic_23.f90: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240794 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
io/inquire.c (inquire_via_unit): Add check for internal unit
passed into child IO procedure.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240768 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR libgfortran/77707
io/transfer.c (next_record): Flush before calculating next_record.
Correctly calculate.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240592 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR libgfortran/48298
* io/inquire.c (inquire_via_unit): Adjust error check for the
two possible internal unit KINDs.
* io/io.h: Adjust defines for is_internal_unit and
is_char4_unit. (gfc_unit): Add internal unit data to structure.
(get_internal_unit): Change declaration to set_internal_unit.
(free_internal_unit): Change name to stash_internal_unit_number.
(get_unique_unit_number): Adjust parameter argument.
Define IOPARM_DT_HAS_UDTIO. (gfc_saved_unit): New structure.
* io/list_read.c (next_char_internal): Use is_char4_unit.
* io/open.c (st_open): Adjust call to get_unique_unit_number.
* io/transfer.c (write_block): Use is_char4_unit.
(data_transfer_init): Update check for unit numbers.
(st_read_done): Free the various allocated memories used for the
internal units and stash the negative unit number and pointer to unit
structure to allow reuse. (st_write_done): Likewise stash the freed
unit.
* io/unit.c: Create a fixed size buffer of 16 gfc_saved_unit's to use
as a stack to save newunit unit numbers and unit structure for reuse.
(get_external_unit): Change name to get_gfc_unit to better
reflect what it does. (find_unit): Change call to get_gfc_unit.
(find_or_create_unit): Likewise. (get_internal_unit): Change
name to set_internal_unit. Move internal unit from the dtp
structure to the gfc_unit structure so that it can be passed to
child I/O statements through the UNIT.
(free_internal_unit): Change name to stash_internal_unit_number.
Push the common.unit number onto the newunit stack, saving it
for possible reuse later. (get_unit): Set the internal unit
KIND. Use get_unique_unit_number to get a negative unit number
for the internal unit. Use get_gfc_unit to get the unit structure
and use set_internal_unit to initialize it.
(init_units): Initialize the newunit stack.
(get_unique_unit_number): Check the stack for an available unit
number and use it. If none there get the next most negative
number. (close_units): Free any unit structures pointed to from the save
stack.
2016-09-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/48298
* gfortran.h (gfc_dt): Add *udtio.
* ioparm.def: Add bit IOPARM_dt_f2003 to align with library use of bit
25. Add IOPARM_dt_dtio bit to common flags.
* resolve.c (resolve_transfer): Set dt->udtio to expression.
* io.c (gfc_match_inquire): Adjust error message for internal
unit KIND.
* libgfortran.h: Adjust defines for GFC_INTERNAL_UNIT4,
GFC_INTERNAL_UNIT, and GFC_INVALID_UNIT.
* trans-io.c (build_dt): Set common_unit to reflect the KIND of
the internal unit. Set mask bit for presence of dt->udtio.
2016-09-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/48298
* gfortran.dg/negative_unit_check.f90: Update test.
* gfortran.dg/dtio_14.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240456 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR libgfortran/77393
* io/write_float.def (build_float_string): Recognize when the
result will not fit in the user provided, star fill, and exit
early.
* gfortran.dg/fmt_f0_2.f90: Update test.
* gfortran.dg/fmt_f0_3.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240018 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
PR libgfortran/77393
* io/write.c (kind_from_size): New function to calculate required buffer
size based on kind type. (select_buffer, select_string): Use new
function. (write_float_0, write_real, write_real_g0, write_complex):
Adjust calls to pass parameters needed by new function.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@239900 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/48298
* decl.c (access_attr_decl): Include case INTERFACE_DTIO as
appropriate.
* gfortran.h : Add INTRINSIC_FORMATTED and
INTRINSIC_UNFORMATTED to gfc_intrinsic_op. Add INTERFACE_DTIO
to interface type. Add new enum 'dtio_codes'. Add bitfield
'has_dtio_procs' to symbol_attr. Add prototypes
'gfc_check_dtio_interfaces' and 'gfc_find_specific_dtio_proc'.
* interface.c (dtio_op): New function.
(gfc_match_generic_spec): Match generic DTIO interfaces.
(gfc_match_interface): Treat DTIO interfaces in the same way as
(gfc_current_interface_head): Add INTERFACE_DTIO appropriately.
(check_dtio_arg_TKR_intent): New function.
(check_dtio_interface1): New function.
(gfc_check_dtio_interfaces): New function.
(gfc_find_specific_dtio_proc): New function.
* io.c : Add FMT_DT to format_token.
(format_lex): Handle DTIO formatting.
* match.c (gfc_op2string): Add DTIO operators.
* resolve.c (derived_inaccessible): Ignore pointer components
to enclosing derived type.
(resolve_transfer): Resolve transfers that involve DTIO.
procedures. Find the specific subroutine for the transfer and
use its existence to over-ride some of the constraints on
derived types. If the transfer is recursive, require that the
subroutine be so qualified.
(dtio_procs_present): New function.
(resolve_fl_namelist): Remove inhibition of polymorphic objects
in namelists if DTIO read and write subroutines exist. Likewise
for derived types.
(resolve_types): Invoke 'gfc_verify_dtio_procedures'.
* symbol.c : Set 'dtio_procs' using 'minit'.
* trans-decl.c (gfc_finish_var_decl): If a derived-type/class
object is associated with DTIO procedures, make it TREE_STATIC.
* trans-expr.c (gfc_get_vptr_from_expr): If the expression
drills down to a PARM_DECL, extract the vptr correctly.
(gfc_conv_derived_to_class): Check 'info' in the test for
'useflags'. If the se expression exists and is a pointer, use
it as the class _data.
* trans-io.c : Add IOCALL_X_DERIVED to iocall and the function
prototype. Likewise for IOCALL_SET_NML_DTIO_VAL.
(set_parameter_tree): Renamed from 'set_parameter_const', now
returns void and has new tree argument. Calls modified to match
new interface.
(transfer_namelist_element): Transfer DTIO procedure pointer
and vpointer using the new function IOCALL_SET_NML_DTIO_VAL.
(get_dtio_proc): New function.
(transfer_expr): Add new argument for the vptr field of class
objects. Add the code to call the specific DTIO proc, convert
derived types to class and call IOCALL_X_DERIVED.
(trans_transfer): Add BT_CLASS to structures for treatment by
the scalarizer. Obtain the vptr for the dynamic type, both for
scalar and array transfer.
2016-08-31 Jerry DeLisle <jvdelisle@gcc.gnu.org>
Paul Thomas <pault@gcc.gnu.org>
PR libgfortran/48298
* gfortran.map : Flag _st_set_nml_dtio_var and
_gfortran_transfer_derived.
* io/format.c (format_lex): Detect DTIO formatting.
(parse_format_list): Parse the DTIO format.
(next_format): Include FMT_DT.
* io/format.h : Likewise. Add structure 'udf' to structure
'fnode' to carry the IOTYPE string and the 'vlist'.
* io/io.h : Add prototypes for the two types of DTIO subroutine
and a typedef for gfc_class. Also, add to 'namelist_type'
fields for the pointer to the DTIO procedure and the vtable.
Add fields to struct st_parameter_dt for pointers to the two
types of DTIO subroutine. Add to gfc_unit DTIO specific fields.
(internal_proto): Add prototype for 'read_user_defined' and
'write_user_defined'.
* io/list_read.c (check_buffers): Use the 'current_unit' field.
(unget_char): Likewise.
(eat_spaces): Likewise.
(list_formatted_read_scalar): For case BT_CLASS, call the DTIO
procedure.
(nml_get_obj_data): Likewise when DTIO procedure is present,.
* io/transfer.c : Export prototypes for 'transfer_derived' and
'transfer_derived_write'.
(unformatted_read): For case BT_CLASS, call the DTIO procedure.
(unformatted_write): Likewise.
(formatted_transfer_scalar_read): Likewise.
(formatted_transfer_scalar_write: Likewise.
(transfer_derived): New function.
(data_transfer_init): Set last_char if no child_dtio.
(finalize_transfer): Return if child_dtio set.
(st_write_done): Add condition for child_dtio not set.
Add extra arguments for st_set_nml_var prototype.
(set_nml_var): New function that contains the contents of the
old version of st_set_nml_var. Also sets the 'dtio_sub' and
'vtable' fields of the 'nml' structure.
(st_set_nml_var): Now just calls set_nml_var with 'dtio_sub'
and 'vtable' NULL.
(st_set_nml_dtio_var): New function that calls set_nml_var.
* io/unit.c (get_external_unit): If the found unit child_dtio
is non zero, don't do any mutex locking/unlocking. Just
return the unit.
* io/unix.c (tempfile_open): Revert to C style comment.
* io/write.c (list_formatted_write_scalar): Do the DTIO call.
(nml_write_obj): Add BT_CLASS and do the DTIO call.
2016-08-31 Jerry DeLisle <jvdelisle@gcc.gnu.org>
Paul Thomas <pault@gcc.gnu.org>
PR fortran/48298
* gfortran.dg/dtio_1.f90: New test.
* gfortran.dg/dtio_2.f90: New test.
* gfortran.dg/dtio_3.f90: New test.
* gfortran.dg/dtio_4.f90: New test.
* gfortran.dg/dtio_5.f90: New test.
* gfortran.dg/dtio_6.f90: New test.
* gfortran.dg/dtio_7.f90: New test.
* gfortran.dg/dtio_8.f90: New test.
* gfortran.dg/dtio_9.f90: New test.
* gfortran.dg/dtio_10.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@239880 138bc75d-0d04-0410-961f-82ee72b054a4
|