aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io/read.c
AgeCommit message (Collapse)AuthorFilesLines
2022-06-28fortran, libgfortran: Avoid using libquadmath for glibc 2.26+Jakub Jelinek1-0/+13
As mentioned by Joseph in PR105101, glibc 2.26 or later has on x86 (both -m32/-m64), powerpc64le, ia64 and mips support for *f128 math/complex APIs plus strtof128 and strfromf128, and these APIs allow us to avoid libquadmath for Fortran purposes on these architectures, replace *q math/complex APIs, strtof128 instead of strtoflt128 and, while strfromf128 unfortunately isn't a perfect replacement to quadmath_snprintf, it can be made to work. The advantage of this is that when configured against such glibcs (2.26 is now almost 5 years old), we can avoid linking against an extra shared library and the math support in glibc is maintained better than libquadmath. We need both a compiler change (so that for glibc 2.26+ it uses *f128 APIs instead of *q) and library change. The above mentioned problem with strfromf128 is that the strfrom* functions are severely restricted versions of snprintf. In libgfortran, we handle !isfinite differently and just use snprintf/quadmath_snprintf for %+-#.*{L,Q}{f,e} printing. strfrom* doesn't allow +, -, # modifiers and it only supports .34 or similar precision, not .* . The L/Q etc. letters are omitted. The + is there to force + sign at the start if it is positive. Workaround in the patch is to add the + at the start manually for !signbit (val). The - (left alignment instead of right) I don't understand why we need it, when minimum field width isn't specified (for strfrom* can't be specified), no padding is ever added anywhere I believe. The # is to force adding . - workaround is to search for first . or e or '\0' character, if it is '\0', just append ., if it is e, insert . before e and memmove the rest (which is just a few bytes, e, +/- and at most a few digits) one byte later. The .* case is handled by creating the format string for strfrom* by snprintf into a temporary buffer. As requested, this patch also switches from using __float128 type in libgfortran to _Float128 which is equivalent on all arches that support __float128. The change is done in a backwards compatible change, when GCC is configured against glibc 2.26 or newer, libgfortran.so.5 itself doesn't link against -lquadmath nor uses any libquadmath APIs, libgfortran.a doesn't use any libquadmath APIs either. User programs and libraries when being linked by gfortran driver are linked against -lgfortran and -lquadmath, but the latter only in the --as-needed linker mode, which means it needs to be around during linking and will be linked in if there are any calls to math/complex functions with real(kind=16) or complex(kind=16) in compilation units compiled by older versions of gcc, but if either user code doesn't call those math/complex functions for the largest supported kind, or the code is recompiled by gcc with this change in, libquadmath won't be linked in. 2022-06-28 Jakub Jelinek <jakub@redhat.com> gcc/fortran/ * gfortran.h (gfc_real_info): Add use_iec_60559 bitfield. * trans-types.h (gfc_real16_use_iec_60559): Declare. * trans-types.cc (gfc_real16_use_iec_60559): Define. (gfc_init_kinds): When building powerpc64le-linux libgfortran on glibc 2.26 to 2.31, set gfc_real16_use_iec_60559 and use_iec_60559. (gfc_build_real_type): Set gfc_real16_use_iec_60559 and use_iec_60559 on glibc 2.26 or later. * trans-intrinsic.cc (gfc_build_intrinsic_lib_fndecls): Adjust comment. Handle gfc_real16_use_iec_60559. (gfc_get_intrinsic_lib_fndecl): Handle use_iec_60559. libgfortran/ * configure.ac: Check for strtof128 and strfromf128. Check for math and complex *f128 functions. Set have_iec_60559_libc_support to yes if *f128 support is around, for --enable-libquadmath-support default to "default" rather than yes if have_iec_60559_libc_support is yes. * acinclude.m4 (LIBGFOR_CHECK_FLOAT128): Test _Float128/_Complex _Float128 rather than __float128 and _Complex float __attribute__((mode(TC))). If libquadmath support is defaulted and have_iec_60559_libc_support is yes, define and subst USE_IEC_60559. Remove unused LIBGFOR_BUILD_QUAD conditional. * Makefile.am (kinds.h): Pass @USE_IEC_60559@ as an extra mk-kinds-h.sh argument. * mk-kinds-h.sh: Accept 4th use_iec_60559 argument. Use _Float128/_Complex _Float128 types instead of __float128 and _Complex float __attribute__((mode(TC))), and if use_iec_60559 is yes, use f128 suffix instead of q and define GFC_REAL_16_USE_IEC_60559. * kinds-override.h: Use _Float128/_Complex _Float128 types instead of __float128 and _Complex float __attribute__((mode(TC))), if USE_IEC_60559 is defined, use f128 suffixes instead of q and define GFC_REAL_17_USE_IEC_60559. * libgfortran.h: Don't include quadmath_weak.h if USE_IEC_60559 is defined. (GFC_REAL_16_INFINITY, GFC_REAL_16_QUIET_NAN): Define for GFC_REAL_16_USE_IEC_60559 differently. * caf/single.c (convert_type): Use _Float128/_Complex _Float128 instead of __float128 and _Complex float __attribute__((mode(TC))). For HAVE_GFC_REAL_10 when HAVE_GFC_REAL_16 isn't defined use _Complex long double instead of long double. * ieee/issignaling_fallback.h (ieee854_float128_shape_type): Use _Float128 instead of __float128. (__issignalingf128): Change argument type to _Float128. (issignaling): Use _Float128 instead of __float128 in _Generic. * intrinsics/cshift0.c (cshift0): Use _Float128 instead of __float128 in a comment. Fix a comment typo, logn double -> long double. * intrinsics/erfc_scaled.c (_THRESH, _M_2_SQRTPI, _INF, _ERFC, _EXP): Use different definitions if GFC_REAL_16_USE_IEC_60559. (_THRESH, _M_2_SQRTPI): Use GFC_REAL_17_LITERAL macro. (_ERFC, _EXP): Use different definitions if GFC_REAL_17_USE_IEC_60559. * intrinsics/spread_generic.c (spread, spread_scalar): Use _Float128 instead of __float128 in a comment. Fix a comment typo, logn double -> long double. * intrinsics/trigd.c (ENABLE_SIND, ENABLE_COSD, ENABLE_TAND): Handle GFC_REAL_16_USE_IEC_60559. * intrinsics/pack_generic.c (pack): Use _Float128 instead of __float128 in a comment. Fix a comment typo, logn double -> long double. * intrinsics/unpack_generic.c (unpack1, unpack0): Likewise. * runtime/in_pack_generic.c (internal_pack): Likewise. * runtime/in_unpack_generic.c (internal_unpack): Likewise. * io/read.c (convert_real, convert_infnan): Handle GFC_REAL_16_USE_IEC_60559 and GFC_REAL_17_USE_IEC_60559. * io/transfer128.c (tmp1, tmp2): Don't define if libquadmath isn't needed. * io/write_float.def (gfor_strfromf128): New function. (DTOA2Q, FDTOA2Q): Define differently if GFC_REAL_16_USE_IEC_60559 or GFC_REAL_17_USE_IEC_60559. * m4/mtype.m4: Use different suffix if GFC_REAL_16_USE_IEC_60559 or GFC_REAL_17_USE_IEC_60559. * config.h.in: Regenerated. * configure: Regenerated. * Makefile.in: Regenerated. * generated/bessel_r16.c: Regenerated. * generated/bessel_r17.c: Regenerated. * generated/norm2_r16.c: Regenerated. * generated/norm2_r17.c: Regenerated.
2022-01-11fortran, libgfortran: Assorted -mabi=ieeelongdouble I/O fixesJakub Jelinek1-0/+1
Another patch, this fixes: FAIL: gfortran.dg/intrinsic_spread_2.f90 -O0 execution test FAIL: gfortran.dg/intrinsic_spread_2.f90 -O1 execution test FAIL: gfortran.dg/intrinsic_spread_2.f90 -O2 execution test FAIL: gfortran.dg/intrinsic_spread_2.f90 -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions execution test FAIL: gfortran.dg/intrinsic_spread_2.f90 -O3 -g execution test FAIL: gfortran.dg/intrinsic_spread_2.f90 -Os execution test FAIL: gfortran.dg/intrinsic_unpack_2.f90 -O0 execution test FAIL: gfortran.dg/intrinsic_unpack_2.f90 -O1 execution test FAIL: gfortran.dg/intrinsic_unpack_2.f90 -O2 execution test FAIL: gfortran.dg/intrinsic_unpack_2.f90 -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions execution test FAIL: gfortran.dg/intrinsic_unpack_2.f90 -O3 -g execution test FAIL: gfortran.dg/intrinsic_unpack_2.f90 -Os execution test FAIL: gfortran.dg/large_real_kind_form_io_1.f90 -O0 execution test FAIL: gfortran.dg/large_real_kind_form_io_1.f90 -O1 execution test FAIL: gfortran.dg/large_real_kind_form_io_1.f90 -O2 execution test FAIL: gfortran.dg/large_real_kind_form_io_1.f90 -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions execution test FAIL: gfortran.dg/large_real_kind_form_io_1.f90 -O3 -g execution test FAIL: gfortran.dg/large_real_kind_form_io_1.f90 -Os execution test FAIL: gfortran.dg/quad_2.f90 -O0 execution test FAIL: gfortran.dg/quad_2.f90 -O1 execution test FAIL: gfortran.dg/quad_2.f90 -O2 execution test FAIL: gfortran.dg/quad_2.f90 -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions execution test FAIL: gfortran.dg/quad_2.f90 -O3 -g execution test FAIL: gfortran.dg/quad_2.f90 -Os execution test 2022-01-04 Jakub Jelinek <jakub@redhat.com> gcc/fortran/ * trans-io.c (transfer_array_desc): Pass abi kind instead of kind to libgfortran. libgfortran/ * io/read.c (convert_real): Add missing break; for the HAVE_GFC_REAL_17 case.
2022-01-11fortran, libgfortran: -mabi=ieeelongdouble I/OJakub Jelinek1-1/+40
The following patch adds the compiler and library side of -mabi=ieeelongdouble I/O support. 2022-01-04 Jakub Jelinek <jakub@redhat.com> gcc/fortran/ * trans-io.c (transfer_namelist_element): Use gfc_type_abi_kind, formatting fixes. (transfer_expr): Use gfc_type_abi_kind, use *REAL128* APIs even for abi_kind == 17. libgfortran/ * libgfortran.h (__acoshieee128, __acosieee128, __asinhieee128, __asinieee128, __atan2ieee128, __atanhieee128, __atanieee128, __coshieee128, __cosieee128, __erfieee128, __expieee128, __fabsieee128, __jnieee128, __log10ieee128, __logieee128, __powieee128, __sinhieee128, __sinieee128, __sqrtieee128, __tanhieee128, __tanieee128, __ynieee128): Formatting fixes. (__strtoieee128, __snprintfieee128): Declare. * io/io.h (default_width_for_float, default_precision_for_float): Handle kind == 17. * io/size_from_kind.c (size_from_real_kind, size_from_complex_kind): Likewise. * io/read.c (set_integer, si_max, convert_real, convert_infnan, read_f): Likewise. * io/write.c (extract_uint, size_from_kind, set_fnode_default): Likewise. * io/write_float.def (DTOA2Q, FDTOA2Q): Define for HAVE_GFC_REAL_17. (determine_en_precision, get_float_string): Handle kind == 17. * io/transfer128.c: Use also for HAVE_GFC_REAL_17, but don't drag in libquadmath if POWER_IEEE128. * Makefile.am (comma, PREPROCESS): New variables. (gfortran.ver): New goal. (version_arg, version_dep): Use gfortran.ver instead of $(srcdir)/gfortran.map. (gfortran.map-sun): Depend on and use gfortran.ver instead of $(srcdir)/gfortran.map. (BUILT_SOURCES): Add $(version_dep). * Makefile.in: Regenerated. * gfortran.map (GFORTRAN_8): Don't export _gfortran_transfer_complex128, _gfortran_transfer_complex128_write, _gfortran_transfer_real128 and _gfortran_transfer_real128_write if HAVE_GFC_REAL_17 is defined. (GFORTRAN_12): Export those here instead.
2022-01-03Update copyright years.Jakub Jelinek1-1/+1
2021-12-18Fortran: Cast arguments of <ctype.h> functions to unsigned charFrançois-Xavier Coudert1-5/+4
Functions from <ctype.h> should only be called on values that can be represented by unsigned char. On targets where char is a signed type, some of libgfortran calls have undefined behaviour. The solution is to cast the argument to unsigned char type. I’ve defined macros in libgfortran.h to do so, to retain legibility of the library code. PR libfortran/95177 libgfortran/ChangeLog * libgfortran.h: include ctype.h, provide safe macros. * io/format.c: use safe macros. * io/list_read.c: use safe macros. * io/read.c: use safe macros. * io/write.c: use safe macros. * runtime/environ.c: use safe macros.
2021-01-04Update copyright years.Jakub Jelinek1-1/+1
2020-01-01Update copyright years.Jakub Jelinek1-1/+1
From-SVN: r279813
2019-10-02re PR libfortran/91593 (Implicit enum conversions in libgfortran/io/transfer.c)Jerry DeLisle1-1/+1
2019-10-01 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/91593 * io/read.c (read_decimal): Cast constant to size_t to turn off a bogus warning. * io/write.c (btoa_big): Use memset in lieu of setting the null byte in a string buffer to turn off a bogus warning. From-SVN: r276439
2019-05-22fortran/89100: Default widths with -fdec-format-defaultsJanne Blomqvist1-0/+6
gcc/fortran ChangeLog: 2019-05-22 Jeff Law <law@redhat.com> Mark Eggleston <mark.eggleston@codethink.com> PR fortran/89100 * gfortran.texi: Add Default widths for F, G and I format descriptors to Extensions section. * invoke.texi: Add -fdec-format-defaults * io.c (check_format): Use default widths for i, f and g when flag_dec_format_defaults is enabled. * lang.opt: Add new option. * options.c (set_dec_flags): Add SET_BITFLAG for flag_dec_format_defaults. gcc/testsuite ChangeLog: 2019-05-22 Mark Eggleston <mark.eggleston@codethink.com> PR fortran/89100 * gfortran.dg/fmt_f_default_field_width_1.f90: New test. * gfortran.dg/fmt_f_default_field_width_2.f90: New test. * gfortran.dg/fmt_f_default_field_width_3.f90: New test. * gfortran.dg/fmt_g_default_field_width_1.f90: New test. * gfortran.dg/fmt_g_default_field_width_2.f90: New test. * gfortran.dg/fmt_g_default_field_width_3.f90: New test. * gfortran.dg/fmt_i_default_field_width_1.f90: New test. * gfortran.dg/fmt_i_default_field_width_2.f90: New test. * gfortran.dg/fmt_i_default_field_width_3.f90: New test. libgfortran ChangeLog: 2019-05-22 Jeff Law <law@redhat.com> PR fortran/89100 * io/format.c (parse_format_list): set default width when the IOPARM_DT_DEC_EXT flag is set for i, f and g. * io/io.h: add default_width_for_integer, default_width_for_float and default_precision_for_float. * io/write.c (write_boz): extra parameter giving length of data corresponding to the type's kind. (write_b): pass data length as extra parameter in calls to write_boz. (write_o): pass data length as extra parameter in calls to write_boz. (write_z): pass data length as extra parameter in calls to write_boz. (size_from_kind): also set size is default width is set. * io/write_float.def (build_float_string): new paramter inserted before result parameter. If default width use values passed instead of the values in fnode. (FORMAT_FLOAT): macro modified to check for default width and calls to build_float_string to pass in default width. (get_float_string): set width and precision to defaults when needed. From-SVN: r271511
2019-01-01Update copyright years.Jakub Jelinek1-1/+1
From-SVN: r267494
2018-08-21re PR fortran/25829 ([F03] Asynchronous IO support)Nicolas Koenig1-0/+2
2018-08-21 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * gfortran.texi: Add description of asynchronous I/O. * trans-decl.c (gfc_finish_var_decl): Treat asynchronous variables as volatile. * trans-io.c (gfc_build_io_library_fndecls): Rename st_wait to st_wait_async and change argument spec from ".X" to ".w". (gfc_trans_wait): Pass ID argument via reference. 2018-08-21 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * gfortran.dg/f2003_inquire_1.f03: Add write statement. * gfortran.dg/f2003_io_1.f03: Add wait statement. 2018-08-21 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * Makefile.am: Add async.c to gfor_io_src. Add async.h to gfor_io_headers. * Makefile.in: Regenerated. * gfortran.map: Add _gfortran_st_wait_async. * io/async.c: New file. * io/async.h: New file. * io/close.c: Include async.h. (st_close): Call async_wait for an asynchronous unit. * io/file_pos.c (st_backspace): Likewise. (st_endfile): Likewise. (st_rewind): Likewise. (st_flush): Likewise. * io/inquire.c: Add handling for asynchronous PENDING and ID arguments. * io/io.h (st_parameter_dt): Add async bit. (st_parameter_wait): Correct. (gfc_unit): Add au pointer. (st_wait_async): Add prototype. (transfer_array_inner): Likewise. (st_write_done_worker): Likewise. * io/open.c: Include async.h. (new_unit): Initialize asynchronous unit. * io/transfer.c (async_opt): New struct. (wrap_scalar_transfer): New function. (transfer_integer): Call wrap_scalar_transfer to do the work. (transfer_real): Likewise. (transfer_real_write): Likewise. (transfer_character): Likewise. (transfer_character_wide): Likewise. (transfer_complex): Likewise. (transfer_array_inner): New function. (transfer_array): Call transfer_array_inner. (transfer_derived): Call wrap_scalar_transfer. (data_transfer_init): Check for asynchronous I/O. Perform a wait operation on any pending asynchronous I/O if the data transfer is synchronous. Copy PDT and enqueue thread for data transfer. (st_read_done_worker): New function. (st_read_done): Enqueue transfer or call st_read_done_worker. (st_write_done_worker): New function. (st_write_done): Enqueue transfer or call st_read_done_worker. (st_wait): Document as no-op for compatibility reasons. (st_wait_async): New function. * io/unit.c (insert_unit): Use macros LOCK, UNLOCK and TRYLOCK; add NOTE where necessary. (get_gfc_unit): Likewise. (init_units): Likewise. (close_unit_1): Likewise. Call async_close if asynchronous. (close_unit): Use macros LOCK and UNLOCK. (finish_last_advance_record): Likewise. (newunit_alloc): Likewise. * io/unix.c (find_file): Likewise. (flush_all_units_1): Likewise. (flush_all_units): Likewise. * libgfortran.h (generate_error_common): Add prototype. * runtime/error.c: Include io.h and async.h. (generate_error_common): New function. 2018-08-21 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * testsuite/libgomp.fortran/async_io_1.f90: New test. * testsuite/libgomp.fortran/async_io_2.f90: New test. * testsuite/libgomp.fortran/async_io_3.f90: New test. * testsuite/libgomp.fortran/async_io_4.f90: New test. * testsuite/libgomp.fortran/async_io_5.f90: New test. * testsuite/libgomp.fortran/async_io_6.f90: New test. * testsuite/libgomp.fortran/async_io_7.f90: New test. Co-Authored-By: Thomas Koenig <tkoenig@gcc.gnu.org> From-SVN: r263750
2018-07-31Reverting 'AsyncI/O patch committed' as it is breaking bare-metal builds.Andre Vieira1-2/+0
2018-07-31 Andre Vieira <andre.simoesdiasvieira@arm.com> Revert 'AsyncI/O patch committed' 2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * gfortran.texi: Add description of asynchronous I/O. * trans-decl.c (gfc_finish_var_decl): Treat asynchronous variables as volatile. * trans-io.c (gfc_build_io_library_fndecls): Rename st_wait to st_wait_async and change argument spec from ".X" to ".w". (gfc_trans_wait): Pass ID argument via reference. 2018-07-31 Andre Vieira <andre.simoesdiasvieira@arm.com> Revert 'AsyncI/O patch committed' 2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * gfortran.dg/f2003_inquire_1.f03: Add write statement. * gfortran.dg/f2003_io_1.f03: Add wait statement. 2018-07-31 Andre Vieira <andre.simoesdiasvieira@arm.com> Revert 'AsyncI/O patch committed' 2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * Makefile.am: Add async.c to gfor_io_src. Add async.h to gfor_io_headers. * Makefile.in: Regenerated. * gfortran.map: Add _gfortran_st_wait_async. * io/async.c: New file. * io/async.h: New file. * io/close.c: Include async.h. (st_close): Call async_wait for an asynchronous unit. * io/file_pos.c (st_backspace): Likewise. (st_endfile): Likewise. (st_rewind): Likewise. (st_flush): Likewise. * io/inquire.c: Add handling for asynchronous PENDING and ID arguments. * io/io.h (st_parameter_dt): Add async bit. (st_parameter_wait): Correct. (gfc_unit): Add au pointer. (st_wait_async): Add prototype. (transfer_array_inner): Likewise. (st_write_done_worker): Likewise. * io/open.c: Include async.h. (new_unit): Initialize asynchronous unit. * io/transfer.c (async_opt): New struct. (wrap_scalar_transfer): New function. (transfer_integer): Call wrap_scalar_transfer to do the work. (transfer_real): Likewise. (transfer_real_write): Likewise. (transfer_character): Likewise. (transfer_character_wide): Likewise. (transfer_complex): Likewise. (transfer_array_inner): New function. (transfer_array): Call transfer_array_inner. (transfer_derived): Call wrap_scalar_transfer. (data_transfer_init): Check for asynchronous I/O. Perform a wait operation on any pending asynchronous I/O if the data transfer is synchronous. Copy PDT and enqueue thread for data transfer. (st_read_done_worker): New function. (st_read_done): Enqueue transfer or call st_read_done_worker. (st_write_done_worker): New function. (st_write_done): Enqueue transfer or call st_read_done_worker. (st_wait): Document as no-op for compatibility reasons. (st_wait_async): New function. * io/unit.c (insert_unit): Use macros LOCK, UNLOCK and TRYLOCK; add NOTE where necessary. (get_gfc_unit): Likewise. (init_units): Likewise. (close_unit_1): Likewise. Call async_close if asynchronous. (close_unit): Use macros LOCK and UNLOCK. (finish_last_advance_record): Likewise. (newunit_alloc): Likewise. * io/unix.c (find_file): Likewise. (flush_all_units_1): Likewise. (flush_all_units): Likewise. * libgfortran.h (generate_error_common): Add prototype. * runtime/error.c: Include io.h and async.h. (generate_error_common): New function. 2018-07-31 Andre Vieira <andre.simoesdiasvieira@arm.com> Revert 'AsyncI/O patch committed'. 2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * testsuite/libgomp.fortran/async_io_1.f90: New test. * testsuite/libgomp.fortran/async_io_2.f90: New test. * testsuite/libgomp.fortran/async_io_3.f90: New test. * testsuite/libgomp.fortran/async_io_4.f90: New test. * testsuite/libgomp.fortran/async_io_5.f90: New test. * testsuite/libgomp.fortran/async_io_6.f90: New test. * testsuite/libgomp.fortran/async_io_7.f90: New test. From-SVN: r263082
2018-07-25re PR fortran/25829 ([F03] Asynchronous IO support)Nicolas Koenig1-0/+2
2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * gfortran.texi: Add description of asynchronous I/O. * trans-decl.c (gfc_finish_var_decl): Treat asynchronous variables as volatile. * trans-io.c (gfc_build_io_library_fndecls): Rename st_wait to st_wait_async and change argument spec from ".X" to ".w". (gfc_trans_wait): Pass ID argument via reference. 2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * gfortran.dg/f2003_inquire_1.f03: Add write statement. * gfortran.dg/f2003_io_1.f03: Add wait statement. 2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * Makefile.am: Add async.c to gfor_io_src. Add async.h to gfor_io_headers. * Makefile.in: Regenerated. * gfortran.map: Add _gfortran_st_wait_async. * io/async.c: New file. * io/async.h: New file. * io/close.c: Include async.h. (st_close): Call async_wait for an asynchronous unit. * io/file_pos.c (st_backspace): Likewise. (st_endfile): Likewise. (st_rewind): Likewise. (st_flush): Likewise. * io/inquire.c: Add handling for asynchronous PENDING and ID arguments. * io/io.h (st_parameter_dt): Add async bit. (st_parameter_wait): Correct. (gfc_unit): Add au pointer. (st_wait_async): Add prototype. (transfer_array_inner): Likewise. (st_write_done_worker): Likewise. * io/open.c: Include async.h. (new_unit): Initialize asynchronous unit. * io/transfer.c (async_opt): New struct. (wrap_scalar_transfer): New function. (transfer_integer): Call wrap_scalar_transfer to do the work. (transfer_real): Likewise. (transfer_real_write): Likewise. (transfer_character): Likewise. (transfer_character_wide): Likewise. (transfer_complex): Likewise. (transfer_array_inner): New function. (transfer_array): Call transfer_array_inner. (transfer_derived): Call wrap_scalar_transfer. (data_transfer_init): Check for asynchronous I/O. Perform a wait operation on any pending asynchronous I/O if the data transfer is synchronous. Copy PDT and enqueue thread for data transfer. (st_read_done_worker): New function. (st_read_done): Enqueue transfer or call st_read_done_worker. (st_write_done_worker): New function. (st_write_done): Enqueue transfer or call st_read_done_worker. (st_wait): Document as no-op for compatibility reasons. (st_wait_async): New function. * io/unit.c (insert_unit): Use macros LOCK, UNLOCK and TRYLOCK; add NOTE where necessary. (get_gfc_unit): Likewise. (init_units): Likewise. (close_unit_1): Likewise. Call async_close if asynchronous. (close_unit): Use macros LOCK and UNLOCK. (finish_last_advance_record): Likewise. (newunit_alloc): Likewise. * io/unix.c (find_file): Likewise. (flush_all_units_1): Likewise. (flush_all_units): Likewise. * libgfortran.h (generate_error_common): Add prototype. * runtime/error.c: Include io.h and async.h. (generate_error_common): New function. 2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org> Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/25829 * testsuite/libgomp.fortran/async_io_1.f90: New test. * testsuite/libgomp.fortran/async_io_2.f90: New test. * testsuite/libgomp.fortran/async_io_3.f90: New test. * testsuite/libgomp.fortran/async_io_4.f90: New test. * testsuite/libgomp.fortran/async_io_5.f90: New test. * testsuite/libgomp.fortran/async_io_6.f90: New test. * testsuite/libgomp.fortran/async_io_7.f90: New test. Co-Authored-By: Thomas Koenig <tkoenig@gcc.gnu.org> From-SVN: r262978
2018-03-28gfortran.h (gfc_dt): Rename default_exp field to dec_ext.Jakub Jelinek1-1/+1
* gfortran.h (gfc_dt): Rename default_exp field to dec_ext. * ioparm.def (IOPARM_dt_default_exp): Rename to ... (IOPARM_dt_dec_ext): ... this. * trans-io.c (build_dt): Adjust for default_exp renaming to dec_ext and IOPARM_dt_default_exp renaming to IOPARM_dt_dec_ext. * io.c (match_io): Likewise. * io/io.h (IOPARM_DT_DEFAULT_EXP): Rename to ... (IOPARM_DT_DEC_EXT): ... this. * io/list_read.c (parse_real): Adjust for IOPARM_DT_DEFAULT_EXP renaming to IOPARM_DT_DEC_EXT. (read_real): Likewise. * io/read.c (read_f): Likewise. From-SVN: r258920
2018-01-07PR 78534, 83704 Handle large formatted I/OJanne Blomqvist1-44/+51
In order to handle large characters when doing formatted I/O, use size_t and ptrdiff_t for lengths. Compared to the previous patch, based on discussions on IRC use size_t for sizes that don't need to be negative rather than ptrdiff_t everywhere. Regtested on x86_64-pc-linux-gnu, approved as part of the PR 78534 approval, committed to trunk. libgfortran/ChangeLog: 2018-01-07 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/78534 PR fortran/83704 * io/fbuf.c (fbuf_init): Use size_t instead of int for length. (fbuf_debug): Convert debug output to unsigned long. (fbuf_reset): Use ptrdiff_t for return value. (fbuf_alloc): Use size_t for length argument. (fbuf_flush): Handle large buffers. (fbuf_flush_list): Likewise. (fbuf_seek): Use ptrdiff_t for offset and return value. (fbuf_read): Use size_t for length argument. (fbuf_getc_refill): Use size_t to match fbuf_read. * io/fbuf.h (struct fbuf): Use size_t for lengths. (fbuf_init): Use size_t instead of int for length. (fbuf_reset): Use ptrdiff_t for return value. (fbuf_alloc): Use size_t for length argument. (fbuf_seek): Use ptrdiff_t for offset and return value. (fbuf_read): Use size_t for length argument. * io/io.h (read_block_form): Likewise. (read_block_form4): Likewise. (write_block): Likewise. (read_a): Likewise. (read_a_char4): Likewise. (read_x): Likewise. (write_a): Likewise. (write_a_char4): Likewise. * io/list_read.c (list_formatted_read_scalar): Use size_t to handle large buffers. * io/read.c (read_l): Likewise. (read_utf8): Likewise. (read_utf8_char1): Likewise. (read_default_char1): Likewise. (read_utf8_char4): Likewise. (read_default_char4): Likewise. (read_a): Likewise. (read_a_char4): Likewise. (eat_leading_spaces): Likewise. (next_char): Likewise. (read_decimal): Likewise. (read_radix): Likewise. (read_f): Likewise. (read_x): Likewise. * io/transfer.c (read_sf_internal): Likewise. (read_sf): Likewise. (read_block_form): Likewise. (read_block_form4): Likewise. (write_block): Likewise. (formatted_transfer_scalar_write): Likewise. (next_record_w): Likewise. * io/unix.c (mem_alloc_r): Likewise. (mem_alloc_r4): Likewise. (mem_alloc_w): Likewise. (mem_alloc_w4): Likewise. (mem_read): Likewise. (mem_read4): Likewise. (mem_write): Likewise. (mem_write4): Likewise. (open_internal): Likewise. (open_internal4): Likewise. * io/unix.h (open_internal): Likewise. (open_internal4): Likewise. (mem_alloc_w): Likewise. (mem_alloc_r): Likewise. (mem_alloc_w4): Likewise. (mem_alloc_r4): Likewise. * io/write.c (write_check_cc): Likewise. (write_cc): Likewise. (write_a): Likewise. (write_a_char4): Likewise. From-SVN: r256322
2018-01-03Update copyright years.Jakub Jelinek1-1/+1
From-SVN: r256169
2017-04-11close.c: Fix white space in pointer declarations and comment formats where ↵Jerry DeLisle1-6/+6
applicable. 2017-04-11 Jerry DeLisle <jvdelisle@gcc.gnu.org> * 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. From-SVN: r246842
2017-01-01Update copyright years.Jakub Jelinek1-1/+1
From-SVN: r243994
2016-12-21libgfortran.h: Include <stdlib.h> header.Francois-Xavier Coudert1-1/+0
* libgfortran.h: Include <stdlib.h> header. * 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. From-SVN: r243846
2016-12-21abort.c: Remove unused headers.Francois-Xavier Coudert1-1/+0
* intrinsics/abort.c: Remove unused headers. * 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. From-SVN: r243844
2016-11-03Default missing exponents to 0 with -fdec.Fritz Reese1-1/+7
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. From-SVN: r241828
2016-10-26New I/O specifiers CARRIAGECONTROL, READONLY, SHARE with -fdec.Fritz Reese1-1/+2
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. From-SVN: r241550
2016-10-18re PR fortran/48298 ([F03] User-Defined Derived-Type IO (DTIO))Jerry DeLisle1-2/+3
2016-10-17 Jerry DeLisle <jvdelisle@gcc.gnu.org> 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. From-SVN: r241294
2016-01-04Update copyright years.Jakub Jelinek1-1/+1
From-SVN: r232055
2015-01-05Update copyright years.Jakub Jelinek1-1/+1
From-SVN: r219188
2014-11-13PR 60324 Unbounded stack allocations in libgfortran.Janne Blomqvist1-2/+14
2014-11-13 Janne Blomqvist <jb@gcc.gnu.org> PR libfortran/60324 * configure: Regenerated. * configure.ac (AM_CFLAGS): Add Werror=vla. * libgfortran.h (gfc_alloca): Remove macro. (fc_strdup_notrim): New prototype. * intrinsics/access.c (access_func): Use fc_strdup rather than stack allocation. * intrinsics/chdir.c (chdir_i4_sub): Likewise. (chdir_i8_sub): Likewise. * intrinsics/chmod.c (chmod_internal): New function, move logic here. (chmod_func): Call chmod_internal. * intrinsics/env.c (getenv): Use fc_strdup rather than stack allocation. (get_environment_variable_i4): Likewise. * intrinsics/execute_command_line.c (execute_command_line): Likewise. * intrinsics/hostnm.c (hostnm_0): New function, use static buffer rather than VLA. (hostnm_i4_sub): Call hostnm_0. (hostnm_i8_sub): Likewise. (hostnm): Likewise. * intrinsics/link.c (link_internal): New function, use fc_strdup rather than stack allocation. (link_i4_sub): Call link_internal. (link_i8_sub): Likewise. (link_i4): Likewise. (link_i8): Likewise. * intrinsics/perror.c (perror_sub): Use fc_strdup rather than stack allocation. * intrinsics/random.c (random_seed_i4): Use static buffer rather than VLA, use _Static_assert to make sure it's big enough. * intrinsics/rename.c (rename_internal): New function, use fc_strdup rather than stack allocation. (rename_i4_sub): Call rename_internal. (rename_i8_sub): Likewise. (rename_i4): Likewise. (rename_i8): Likewise. * intrinsics/stat.c (stat_i4_sub_0): Use fc_strdup rather than stack allocation. (stat_i8_sub_0): Likewise. * intrinsics/symlink.c (symlnk_internal): New function, use fc_strdup rather than stack allocation. (symlnk_i4_sub): Call symlnk_internal. (symlnk_i8_sub): Likewise. (symlnk_i4): Likewise. (symlnk_i8): Likewise. * intrinsics/system.c (system_sub): Use fc_strdup rather than stack allocation. * intrinsics/unlink.c (unlink_i4_sub): Likewise. * io/file_pos.c (READ_CHUNK): Make it a macro rather than variable. * io/list_read.c (nml_get_obj_data): Use fixed stack buffer, fall back to xmalloc/free for large sizes. * io/read.c (read_f): Likewise. * io/transfer.c (MAX_READ): Make it a macro rather than variable. (WRITE_CHUNK): Likewise. * io/write_float.def (write_float): Use fixed stack buffer, fall back to xmalloc/free for large sizes. * runtime/string.c (fc_strdup_notrim): New function. From-SVN: r217480
2014-03-13re PR libfortran/38199 (missed optimization: I/O performance)Jerry DeLisle1-1/+7
2014-03-12 Jerry DeLisle <jvdelisle@gcc.gnu> PR libfortran/38199 * io/read.c (read_decimal): Quickly skip spaces to avoid calls to next_char. * io/unit.c (is_trim_ok): New helper function to check various conditions to see if its OK to trim the internal unit string. (get_internal_unit): Use LEN_TRIM to shorten selected internal unit strings for optimizing READ. Enable this optimization for formatted READ. * io/list_read.c (finish_list_read): Don't call eat_line for internal units. From-SVN: r208528
2014-01-02Update copyright years in libgfortran/Richard Sandiford1-1/+1
From-SVN: r206296
2013-12-18read.c (read_f): Convert assert to runtime error.Steven G. Kargl1-1/+3
2013-12-18 Steven G. Kargl <kargl@gcc.gnu.org> * io/read.c (read_f): Convert assert to runtime error. 2013-12-18 Steven G. Kargl <kargl@gcc.gnu.org> * gfortran.dg/io_err_1.f90: New test. From-SVN: r206102
2013-07-21re PR libfortran/35862 ([F2003] Implement new rounding modes for run time)Tobias Burnus1-0/+20
2013-07-21 Tobias Burnus <burnus@net-b.de> PR fortran/35862 * libgfortran.h (GFC_FPE_DOWNWARD, GFC_FPE_TONEAREST, GFC_FPE_TOWARDZERO, GFC_FPE_UPWARD): New defines. 2013-07-21 Tobias Burnus <burnus@net-b.de> PR fortran/35862 * libgfortran.h (set_fpu_rounding_mode, get_fpu_rounding_mode): New prototypes. * config/fpu-387.h (set_fpu_rounding_mode, get_fpu_rounding_mode): New functions. * config/fpu-aix.h (set_fpu_rounding_mode, get_fpu_rounding_mode): Ditto. * config/fpu-generic.h (set_fpu_rounding_mode, get_fpu_rounding_mode): Ditto. * config/fpu-glibc.h (set_fpu_rounding_mode, get_fpu_rounding_mode): Ditto. * config/fpu-sysv.h (set_fpu_rounding_mode, get_fpu_rounding_mode): Ditto. * configure.ac: Check for fp_rnd and fp_rnd_t. * io/io.h (enum unit_round): Use GFC_FPE_* for the value. * io/read.c (convert_real): Set FP ronding mode. * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * config.h.in: Regenerate. * configure: Regenerate. 2013-07-21 Tobias Burnus <burnus@net-b.de> PR fortran/35862 * gfortran.dg/round_4.f90: New. Co-Authored-By: Uros Bizjak <ubizjak@gmail.com> From-SVN: r201093
2013-05-04environ.c: Include unistd.h.David Edelsohn1-0/+2
* runtime/environ.c: Include unistd.h. * runtime/pause.c: Test HAVE_UNISTD_H. * runtime/stop.c: Same. * io/open.c: Same. * io/unix.c: Same. * io/read.c (si_max): Protect declaration of value. From-SVN: r198603
2013-01-14Update copyright years in libgfortran.Richard Sandiford1-2/+1
From-SVN: r195167
2012-05-14PR 52428 Range checking when reading integer values.Janne Blomqvist1-30/+21
gcc/fortran ChangeLog: 2012-05-14 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/52428 * gfortran.texi: Update _gfortran_set_options documentation. * invoke.texi: Remove runtime behavior description of -fno-range-check. * trans-decl.c (create_main_function): Don't pass the range-check setting to the library. libgfortran ChangeLog: 2012-05-14 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/52428 * io/io.h (max_value): Rename to si_max, remove second argument. * io/list_read.c (convert_integer): Use unsigned types when parsing the digits, set max value depending on the sign. * io/read.c (max_value): Rename to si_max, remove second argument, simplify. (read_decimal): Set max value depending on sign, always check overflow. (read_radix): Calculate max unsigned value directly. * libgfortran.h (struct compile_options_t): Remove range_check field. * runtime/compile_options.c (set_options): Skip handling options[7]. (init_compile_options): Don't set removed field. gcc/testsuite ChangeLog: 2012-05-14 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/52428 * gfortran.dg/int_range_io_1.f90: New test. From-SVN: r187478
2012-04-22re PR libfortran/53051 (I/O: Support reading floating-point numbers which ↵Tobias Burnus1-0/+2
use "Q" for the exponent) 2012-04-22 Tobias Burnus <burnus@net-b.de> PR fortran/53051 * io/list_read.c (parse_real): Support "q" for the exponential. * io/read.c (read_f): Ditto. 2012-04-22 Tobias Burnus <burnus@net-b.de> PR fortran/53051 * gfortran.dg/read_float_4.f90: New. From-SVN: r186675
2011-05-29PR 19155 Check for strtod failure via endptrJanne Blomqvist1-15/+23
From-SVN: r174393
2011-03-24re PR libfortran/48030 (Implement read_x using fbuf_getc)Jerry DeLisle1-36/+17
2011-03-23 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/48030 * io/read.c (read_x): Re-implement using fbuf_getc. From-SVN: r171378
2011-03-19re PR libfortran/35667 (HP-UX 10 has broken strtod)John David Anglin1-1/+70
PR fortran/35667 * io/io.h (convert_infnan): Declare. * io/read.c (convert_infnan): New. (read_f): Use convert_infnan to convert INFs and NANs. * list_read.c (parse_real, read_real): Likewise. From-SVN: r171182
2011-01-16re PR fortran/46625 (libquadmath: Mangle internal symbols; rename __float128 ↵Jakub Jelinek1-1/+1
<-> string functions) PR fortran/46625 * quadmath.map (QUADMATH_1.0): Remove quadmath_strtopQ and quadmath_dtoaq. Add strtoflt128 and quadmath_flt128tostr. * quadmath_weak.h (quadmath_strtopQ, quadmath_dtoaq): Remove. (strtoflt128, quadmath_flt128tostr): Add. * gdtoa/strtopQ.c (quadmath_strtopQ): Rename to... (strtoflt128): ... this. Return __float128, instead of writing to memory pointed by last argument. * quadmath.h: Use C style comments instead of C++ style. (quadmath_strtopQ, quadmath_dtoaq): Remove prototypes. (strtoflt128, quadmath_flt128tostr): Add prototypes. * libquadmath.texi (quadmath_dtoaq): Rename to quadmath_flt128tostr. (quadmath_strtopQ): Rename to strtoflt128. Adjust prototype, adjust examples. * quadmath_io.c (quadmath_dtoaq): Rename to... (quadmath_flt128tostr): ... this. libgfortran/ * io/write_float.def (DTOAQ): Use quadmath_flt128tostr instead of quadmath_dtoa. * io/transfer128.c (tmp1, tmp2): New variables, bring in strtoflt128 and quadmath_flt128tostr. (transfer_real128, transfer_real128_write, transfer_complex128, transfer_complex128_write): Remove tmp1/tmp2 variables. * io/read.c (convert_real): Use strtoflt128 instead of quadmath_strtopQ, adjust for the changed arguments and return value. From-SVN: r168856
2010-11-16re PR fortran/32049 (Support on x86_64 also kind=16)Francois-Xavier Coudert1-1/+7
/ 2010-11-13 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> Tobias Burnus <burnus@net-b.de> PR fortran/32049 * Makefile.def: Add libquadmath; build it with language=fortran. * configure.ac: Add libquadmath. * Makefile.tpl: Handle multiple libs in check-[+language+]. * Makefile.in: Regenerate. * configure: Regenerate. libquadmath/ 2010-11-13 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> Tobias Burnus <burnus@net-b.de> PR fortran/32049 Initial implementation and checkin. gcc/fortran/ 2010-11-13 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> Tobias Burnus <burnus@net-b.de> PR fortran/32049 * gfortranspec.c (find_spec_file): New function. (lang_specific_driver): Try to find .spec file and use it. * trans-io.c (iocall): Define * IOCALL_X_REAL128/COMPLEX128(,write). (gfc_build_io_library_fndecls): Build decl for __float128 I/O. (transfer_expr): Call __float128 I/O functions. * trans-types.c (gfc_init_kinds): Allow kind-16 belonging to __float128. gcc/testsuite/ 2010-11-13 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> Tobias Burnus <burnus@net-b.de> PR fortran/32049 * gfortran.dg/quad_1.f90: New. * lib/gcc-defs.exp (gcc-set-multilib-library-path): Use also compiler arguments. * lib/gfortran.exp (gfortran_link_flags): Add libquadmath to library search path; call gcc-set-multilib-library-path with arguments such that libgfortran.spec is found. (gfortran_init): Add path for libgfortran.spec to GFORTRAN_UNDER_TEST. libgomp/ 2010-11-13 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> Tobias Burnus <burnus@net-b.de> PR fortran/32049 * configure.ac: * configure: Regenerate. libgfortran/ 2010-11-13 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> Tobias Burnus <burnus@net-b.de> PR fortran/32049 * Makefile.am: Add missing pow_r16_i4.c, add transfer128.c, link libquadmath, if used. * acinclude.m4 (LIBGFOR_CHECK_FLOAT128): Add. * configure.ac: Use it, touch spec file. * gfortran.map: Add pow_r16_i4 and transfer_(real,complex)128(,write) functions. * intrinsics/cshift0.c (cshift0): Handle __float128 type. * intrinsics/erfc_scaled_inc.c: Ditto. * intrinsics/pack_generic.c (pack): Ditto * intrinsics/spread_generic.c (spread): Ditto. * intrinsics/unpack_generic.c (unpack1): Ditto. * io/read.c (convert_real): Ditto. * io/transfer.c: Update comments. * io/transfer128.c: New file. * io/write_float.def (write_float): Handle __float128 type. * libgfortran.h: #include quadmath_weak.h, define __builtin_infq and nanq. * m4/mtype.m4: Handle __float128 type. * runtime/in_pack_generic.c (internal_pack): Ditto. * runtime/in_unpack_generic.c (internal_unpack): Ditto. * kinds-override.h: New file. * libgfortran.spec.in: Ditto. * generated/pow_r16_i4.c: Generated. * Makefile.in: Regenerate. * configure: Regenerate. * config.h: Regenerate. * bessel_r10.c: Regenerate. * bessel_r16.c: Regenerate. * bessel_r4.c: Regenerate. * bessel_r8.c: Regenerate. * exponent_r16.c: Regenerate. * fraction_r16.c: Regenerate. * nearest_r16.c: Regenerate. * norm2_r10.c: Regenerate. * norm2_r16.c: Regenerate. * norm2_r4.c: Regenerate. * norm2_r8.c: Regenerate. * rrspacing_r16.c: Regenerate. * set_exponent_r16.c: Regenerate. * spacing_r16.c: Regenerate. Co-Authored-By: Tobias Burnus <burnus@net-b.de> From-SVN: r166825
2010-07-16re PR fortran/37077 (Implement Internal Unit I/O for character KIND=4)Jerry DeLisle1-16/+41
2010-07-16 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/37077 * io/read.c (read_default_char4): Add support for reading into a kind-4 character variable from a character(kind=4) internal unit. * io/io.h (read_block_form4): Add prototype. * io/unit.c (get_internal_unit): Add call to fbuf_init. (free_internal_unit): Add call to fbuf_destroy. (get_unit): Fix whitespace. * io/transfer.c (read_sf_internal): Use fbuf_alloc to allocate a string to recieve the wide characters translated to single byte chracters. (read_block_form): Fix whitespace. (read_block_form4): New function to read from a character(kind=4) internal unit into a character(kind=4) variable. (read_block_direct): Fix whitespace. (write_block): Fix whitespace. (formatted_transfer_scalar_read): Likewise. (formatted_transfer_scalar_write): Likewise. * io/write.c (write_character): Add support for list directed write of a kind=1 character string to a character(kind=4) internal unit. From-SVN: r162260
2010-07-13re PR fortran/37077 (Implement Internal Unit I/O for character KIND=4)Jerry DeLisle1-1/+1
2010-07-12 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/37077 * io/read.c: Fix comment. * io/io.h (is_char4_unit): New macro. * io/unit.c (get_internal_unit): Call new function open_internal4. * io/unix.c (mem_alloc_r4): New function. (mem_alloc_w4): New function. (mem_read4): New function, temporary stub. (mem_write4): New function. (open_internal4): New function to set stream pointers to use the new mem functions. * io/transfer.c (write_block): Use new mem_alloc_w4 to access internal units of kind=4. * io/unix.h: Add prototypes for open_internal4, mem_alloc_w4, and mem_alloc_r4. * io/write.c (memset4): New helper function. (memcpy4): New helper function. (write_default_char4): Use new helper functions. (write_a): Likewise. (write_l): Likewise. (write_boz): Likewise. (write_decimal): Likewise. (write_x): Likewise. (write_integer): Likewise. * io/write_float.def (output_float): Add code blocks to handle internal unit kind=4 output utilizing gfc_char4_t pointers. (write_infnan): Use new helper functions. (OUTPUT_FLOAT_FMT_G): Update this macro likewise. From-SVN: r162123
2010-07-02re PR libfortran/43298 (fortran library does not read in NaN -Inf or Inf)Tobias Burnus1-5/+4
2010-06-28 Tobias Burnus <burnus@net-b.de> PR fortran/43298 * list_read.c (parse_real): Do not pass (..) on for NAN(..). * read.c (convert_real): Fix comment about NAN/INF. From-SVN: r161735
2010-06-30re PR libfortran/43298 (fortran library does not read in NaN -Inf or Inf)Jerry DeLisle1-0/+60
2010-06-29 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/43298 * io/read.c: Add code to parse and read Inf, Infinity, NaN, and Nan with optional parenthesis. From-SVN: r161585
2010-04-01transfer.c: Update copyright.Paul Thomas1-1/+2
2010-04-01 Paul Thomas <pault@gcc.gnu.org> * io/transfer.c : Update copyright. * io/unix.c : ditto * io/read.c : ditto * io/io.h : ditto * io/unix.h : ditto * io/inquire.c : ditto * io/format.c : ditto * io/list_read.c : ditto * runtime/error.c : ditto * libgfortran.h : ditto * intrinsics/date_and_time.c: ditto * intrinsics/args.c : ditto From-SVN: r157924
2010-03-26re PR fortran/43517 (spurious end-of-file condition when namelist read ↵Jerry DeLisle1-0/+3
follows formatted read) 2010-03-25 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/43517 * io/read.c (read_x): Return if seen EOR condition. From-SVN: r157737
2010-03-18re PR fortran/43265 (No EOF condition if reading with '(x)' from an empty file)Jerry DeLisle1-1/+12
2010-03-17 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/43265 * io/io.h: Delete prototype for read_sf, making it static. * io/read.c (read_x): Modify to call hit_eof if PAD="no". * io/transfer.c (read_sf_internal): New static function extracted from read_sf for use on internal units only. Handle empty string case. (read_sf): New factoring of this function, make it static. Add special conditions for EOF based on ADVANCE="no", PAD="no", and whether any bytes have been previously read from the record. (read_block_form): Modify to call read_sf or read_sf_internal. (next_record_r): Add a done flag similar to next_record_w. Call hit_eof if internal array unit next record returns finished, meaning an EOF was found and not done, ie not the last record expected. For external units call hit_eof if item_count is 1 or there are no pending spaces. (next_record): Update call to next_record_r. From-SVN: r157527
2010-03-09re PR fortran/43265 (No EOF condition if reading with '(x)' from an empty file)Jerry DeLisle1-5/+61
2010-03-09 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/43265 * io/read.c: Include fbuf.h and unix.h to enable lower level I/O for read_x. (read_x): Replace the use of read_sf with equivalent lower level I/O, eliminating unneeded code and handling EOF and EOR conditions. * io/io.h: Revise prototype for read_sf. * io/transfer.c (read_sf): Delete no_error parameter and all uses of it. (read_block_form): Likewise. (next_record_r): Delete wrong code call to hit_eof. From-SVN: r157310
2010-03-08libgfortran.h (_POSIX): Define if __MINGW32__ is defined.Kai Tietz1-5/+5
2010-03-08 Kai TIetz <kai.tietz@onevision.com> PR/42950 * libgfortran.h (_POSIX): Define if __MINGW32__ is defined. (gfc_printf): Define to gnu_printf for __MINGW32__ case, otherwise to __printf__. (gfc_strtof,gfc_strtod,gfc_strtold): Define for mingw case to POSIX compatible converter functions. (runtime_error): Use instead gfc_printf as formatter attribute name. (runtime_error_at): Likewise. (runtime_warning_at): Likewise. (st_printf): Likewise. * intrinsics/date_and_time.c (localtime_r): Undefine possible defined macro. (gmtime_r): Likewise. * io/read.c (convert_real): Use gfc_strtof, gfc_strtod, and gfc_strtold. From-SVN: r157271
2009-12-08re PR libfortran/41711 ([F08] BOZ edit-descr does not support reading large ↵Tobias Burnus1-0/+2
kind reals) 2009-12-08 Tobias Burnus <burnus@net-b.de> PR fortran/41711 * io/read.c (set_integer): Support kind=10 for reading real/complex BOZ. 2009-12-08 Tobias Burnus <burnus@net-b.de> PR fortran/41711 * gfortran.dg/boz_15.f90: New test. From-SVN: r155088
2009-11-02Split up io/io.hJanne Blomqvist1-0/+1
From-SVN: r153825