Skip to content
Snippets Groups Projects
  1. Mar 27, 2024
  2. Mar 12, 2024
  3. Mar 11, 2024
    • Jerry DeLisle's avatar
      libgfortran: [PR114304] Revert portion of PR105347 change. · 0c179654
      Jerry DeLisle authored
      	PR libfortran/105437
      	PR libfortran/114304
      
      libgfortran/ChangeLog:
      
      	* io/list_read.c (eat_separator): Remove check for decimal
      	point mode and semicolon used as a seprator. Removes
      	the regression.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/pr105473.f90: Add additional checks to address
      	the case of semicolon at the end of a line.
      0c179654
  4. Mar 08, 2024
  5. Mar 07, 2024
    • Jerry DeLisle's avatar
      Fortran: Fix issue with using snprintf function. · 03932d32
      Jerry DeLisle authored
      The previous patch used snprintf to set the message
      string. The message string is not a formatted string
      and the snprintf will interpret '%' related characters
      as format specifiers when there are no associated
      output variables. A segfault ensues.
      
      This change replaces snprintf with a fortran string copy
      function and null terminates the message string.
      
      	PR libfortran/105456
      
      libgfortran/ChangeLog:
      
      	* io/list_read.c (list_formatted_read_scalar): Use fstrcpy
      	from libgfortran/runtime/string.c to replace snprintf.
      	(nml_read_obj): Likewise.
      	* io/transfer.c (unformatted_read): Likewise.
      	(unformatted_write): Likewise.
      	(formatted_transfer_scalar_read): Likewise.
      	(formatted_transfer_scalar_write): Likewise.
      	* io/write.c (list_formatted_write_scalar): Likewise.
      	(nml_write_obj): Likewise.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/pr105456.f90: Revise using '%' characters
      	in users error message.
      03932d32
    • GCC Administrator's avatar
      Daily bump. · 8b483cd5
      GCC Administrator authored
      8b483cd5
  6. Mar 06, 2024
    • Jerry DeLisle's avatar
      Fortran: Add user defined error messages for UDTIO. · 21edfb00
      Jerry DeLisle authored
      The defines IOMSG_LEN and MSGLEN were redundant so these are combined
      into IOMSG_LEN as defined in io.h.
      
      The remainder of the patch adds checks for when a user defined
      derived type IO procedure sets the IOSTAT or IOMSG variables
      independent of the librrary defined I/O messages.
      
      	PR libfortran/105456
      
      libgfortran/ChangeLog:
      
      	* io/io.h (IOMSG_LEN): Moved to here.
      	* io/list_read.c (MSGLEN): Removed MSGLEN.
      	(convert_integer): Changed MSGLEN to IOMSG_LEN.
      	(parse_repeat): Likewise.
      	(read_logical): Likewise.
      	(read_integer): Likewise.
      	(read_character): Likewise.
      	(parse_real): Likewise.
      	(read_complex): Likewise.
      	(read_real): Likewise.
      	(check_type): Likewise.
      	(list_formatted_read_scalar): Adjust to IOMSG_LEN.
      	(nml_read_obj): Add user defined error message.
      	* io/transfer.c (unformatted_read): Add user defined error
      	message.
      	(unformatted_write): Add user defined error message.
      	(formatted_transfer_scalar_read): Add user defined error message.
      	(formatted_transfer_scalar_write): Add user defined error message.
      	* io/write.c (list_formatted_write_scalar): Add user defined error message.
      	(nml_write_obj): Add user defined error message.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/pr105456-nmlr.f90: New test.
      	* gfortran.dg/pr105456-nmlw.f90: New test.
      	* gfortran.dg/pr105456-ruf.f90: New test.
      	* gfortran.dg/pr105456-wf.f90: New test.
      	* gfortran.dg/pr105456-wuf.f90: New test.
      21edfb00
  7. Feb 26, 2024
  8. Feb 25, 2024
    • Jerry DeLisle's avatar
      libgfortran: Propagate user defined iostat and iomsg. · 3f58f96a
      Jerry DeLisle authored
      	PR libfortran/105456
      
      libgfortran/ChangeLog:
      
      	* io/list_read.c (list_formatted_read_scalar): Add checks
      	for the case where a user defines their own error codes
      	and error messages and generate the runtime error.
      	* io/transfer.c (st_read_done): Whitespace.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/pr105456.f90: New test.
      3f58f96a
  9. Feb 18, 2024
  10. Feb 17, 2024
    • Jerry DeLisle's avatar
      libgfortran: [PR105473] Fix checks for decimal='comma'. · a71d8743
      Jerry DeLisle authored
      	PR libfortran/105473
      
      libgfortran/ChangeLog:
      
      	* io/list_read.c (eat_separator): Reject comma as a
      	seprator when it is being used as a decimal point.
      	(parse_real): Reject a '.' when is should be a comma.
      	(read_real): Likewise.
      	* io/read.c (read_f): Add more checks for ',' and '.'
      	conditions.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/pr105473.f90: New test.
      a71d8743
    • Jerry DeLisle's avatar
      libgfortran: Fix namelist read. · fccfe662
      Jerry DeLisle authored
      	PR libfortran/107068
      
      libgfortran/ChangeLog:
      
      	* io/list_read.c (read_logical): When looking for a possible
      	variable name, check for left paren, indicating a possible
      	array reference.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/pr107068.f90: New test.
      fccfe662
  11. Feb 15, 2024
  12. Feb 14, 2024
    • Jerry DeLisle's avatar
      Fortran: Implement read_x for UTF-8 encoded files. · b79d3e6a
      Jerry DeLisle authored
      	PR fortran/99210
      
      libgfortran/ChangeLog:
      
      	* io/read.c (read_x): If UTF-8 encoding is enabled, use
      	read_utf8 to move one character over in the read buffer.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/pr99210.f90: New test.
      b79d3e6a
  13. Feb 13, 2024
  14. Feb 12, 2024
    • Jerry DeLisle's avatar
      libgfortran: Adjust bytes_left and pos for access="STREAM". · 153ce7a7
      Jerry DeLisle authored
      During tab edits, the pos (position) and bytes_used
      Variables were not being set correctly for stream I/O.
      Since stream I/O does not have 'real' records, the
      format buffer active length must be used instead of
      the record length variable.
      
             PR libgfortran/109358
      
      libgfortran/ChangeLog:
      
      	* io/transfer.c (formatted_transfer_scalar_write): Adjust
      	bytes_used and pos variable for stream access.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/pr109358.f90: New test.
      153ce7a7
  15. Feb 04, 2024
  16. Feb 03, 2024
    • Jerry DeLisle's avatar
      libgfortran: EN0.0E0 and ES0.0E0 format editing. · d436e8e7
      Jerry DeLisle authored
      F2018 and F2023 standards added zero width exponents. This required
      additional special handing in the process of building formatted
      floating point strings.
      
      G formatting uses either F or E formatting as documented in
      write_float.def comments. This logic changes the format token from FMT_G
      to FMT_F or FMT_E. The new formatting requirements interfere with this
      process when a FMT_G float string is being built.  To avoid this, a new
      component called 'pushed' is added to the fnode structure to save this
      condition.  The 'pushed' condition is then used to bypass portions of
      the new ES,E,EN, and D formatting, falling through to the existing
      default formatting which is retained.
      
      libgfortran/ChangeLog:
      	PR libfortran/111022
      	* io/format.c (get_fnode): Update initialization of fnode.
      	(parse_format_list): Initialization.
      	* io/format.h (struct fnode): Added the new 'pushed' component.
      	* io/write.c (select_buffer): Whitespace.
      	(write_real): Whitespace.
      	(write_real_w0): Adjust logic for the d == 0 condition.
      	* io/write_float.def (determine_precision): Whitespace.
      	(build_float_string): Calculate width of ..E0 exponents and
      	adjust logic accordingly.
      	(build_infnan_string): Whitespace.
      	(CALCULATE_EXP): Whitespace.
      	(quadmath_snprintf): Whitespace.
      	(determine_en_precision): Whitespace.
      
      gcc/testsuite/ChangeLog:
      	PR libfortran/111022
      	* gfortran.dg/fmt_error_10.f: Show D+0 exponent.
      	* gfortran.dg/pr96436_4.f90: Show E+0 exponent.
      	* gfortran.dg/pr96436_5.f90: Show E+0 exponent.
      	* gfortran.dg/pr111022.f90: New test.
      d436e8e7
  17. Jan 16, 2024
  18. Jan 15, 2024
    • Lipeng Zhu's avatar
      libgfortran: Bugfix if not define HAVE_ATOMIC_FETCH_ADD · 8414f10a
      Lipeng Zhu authored
      
      This patch try to fix the bug when HAVE_ATOMIC_FETCH_ADD is
      not defined in dec_waiting_unlocked function. As io.h does
      not include async.h, the WRLOCK and RWUNLOCK macros are
      undefined.
      
      libgfortran/ChangeLog:
      
      	* io/io.h (dec_waiting_unlocked): Use
      	__gthread_rwlock_wrlock/__gthread_rwlock_unlock or
      	__gthread_mutex_lock/__gthread_mutex_unlock functions
      	to replace WRLOCK and RWUNLOCK macros.
      
      Signed-off-by: default avatarLipeng Zhu <lipeng.zhu@intel.com>
      8414f10a
  19. Jan 08, 2024
  20. Jan 07, 2024
  21. Jan 03, 2024
  22. Dec 20, 2023
  23. Dec 19, 2023
  24. Dec 18, 2023
    • Harald Anlauf's avatar
      Fortran: update DATE_AND_TIME intrinsic for Fortran 2018 [PR96580] · b77691a9
      Harald Anlauf authored
      Fortran 2018 allows a non-default integer kind for its VALUES argument if
      it has a decimal exponent range of at least four.  Update checks, library
      implementation and documentation.
      
      gcc/fortran/ChangeLog:
      
      	PR fortran/96580
      	* check.cc (array_size_check): New helper function.
      	(gfc_check_date_and_time): Use it for checking minimum size of
      	VALUES argument.  Update kind check to Fortran 2018.
      	* intrinsic.texi: Fix documentation of DATE_AND_TIME.
      
      libgfortran/ChangeLog:
      
      	PR fortran/96580
      	* intrinsics/date_and_time.c (date_and_time): Handle VALUES argument
      	for kind=2 and kind=16 (if available).
      
      gcc/testsuite/ChangeLog:
      
      	PR fortran/96580
      	* gfortran.dg/date_and_time_2.f90: New test.
      	* gfortran.dg/date_and_time_3.f90: New test.
      	* gfortran.dg/date_and_time_4.f90: New test.
      b77691a9
  25. Dec 12, 2023
  26. Dec 11, 2023
    • Lipeng Zhu's avatar
      libgfortran: Replace mutex with rwlock · b806c88f
      Lipeng Zhu authored
      This patch try to introduce the rwlock and split the read/write to
      unit_root tree and unit_cache with rwlock instead of the mutex to
      increase CPU efficiency. In the get_gfc_unit function, the percentage
      to step into the insert_unit function is around 30%, in most instances,
      we can get the unit in the phase of reading the unit_cache or unit_root
      tree. So split the read/write phase by rwlock would be an approach to
      make it more parallel.
      
      BTW, the IPC metrics can gain around 9x in our test
      server with 220 cores. The benchmark we used is
      https://github.com/rwesson/NEAT
      
      libgcc/ChangeLog:
      
      	* gthr-posix.h (__GTHREAD_RWLOCK_INIT): New macro.
      	(__gthrw): New function.
      	(__gthread_rwlock_rdlock): New function.
      	(__gthread_rwlock_tryrdlock): New function.
      	(__gthread_rwlock_wrlock): New function.
      	(__gthread_rwlock_trywrlock): New function.
      	(__gthread_rwlock_unlock): New function.
      
      libgfortran/ChangeLog:
      
      	* io/async.c (DEBUG_LINE): New macro.
      	* io/async.h (RWLOCK_DEBUG_ADD): New macro.
      	(CHECK_RDLOCK): New macro.
      	(CHECK_WRLOCK): New macro.
      	(TAIL_RWLOCK_DEBUG_QUEUE): New macro.
      	(IN_RWLOCK_DEBUG_QUEUE): New macro.
      	(RDLOCK): New macro.
      	(WRLOCK): New macro.
      	(RWUNLOCK): New macro.
      	(RD_TO_WRLOCK): New macro.
      	(INTERN_RDLOCK): New macro.
      	(INTERN_WRLOCK): New macro.
      	(INTERN_RWUNLOCK): New macro.
      	* io/io.h (struct gfc_unit): Change UNIT_LOCK to UNIT_RWLOCK in
      	a comment.
      	(unit_lock): Remove including associated internal_proto.
      	(unit_rwlock): New declarations including associated internal_proto.
      	(dec_waiting_unlocked): Use WRLOCK and RWUNLOCK on unit_rwlock
      	instead of __gthread_mutex_lock and __gthread_mutex_unlock on
      	unit_lock.
      	* io/transfer.c (st_read_done_worker): Use WRLOCK and RWUNLOCK on
      	unit_rwlock instead of LOCK and UNLOCK on unit_lock.
      	(st_write_done_worker): Likewise.
      	* io/unit.c: Change UNIT_LOCK to UNIT_RWLOCK in 'IO locking rules'
      	comment. Use unit_rwlock variable instead of unit_lock variable.
      	(get_gfc_unit_from_unit_root): New function.
      	(get_gfc_unit): Use RDLOCK, WRLOCK and RWUNLOCK on unit_rwlock
      	instead of LOCK and UNLOCK on unit_lock.
      	(close_unit_1): Use WRLOCK and RWUNLOCK on unit_rwlock instead of
      	LOCK and UNLOCK on unit_lock.
      	(close_units): Likewise.
      	(newunit_alloc): Use RWUNLOCK on unit_rwlock instead of UNLOCK on
      	unit_lock.
      	* io/unix.c (find_file): Use RDLOCK and RWUNLOCK on unit_rwlock
      	instead of LOCK and UNLOCK on unit_lock.
      	(flush_all_units): Use WRLOCK and RWUNLOCK on unit_rwlock instead
      	of LOCK and UNLOCK on unit_lock.
      b806c88f
  27. Dec 06, 2023
  28. Dec 05, 2023
    • Jakub Jelinek's avatar
      libgfortran: Fix -Wincompatible-pointer-types errors · 9610ba7b
      Jakub Jelinek authored
      As reported, libgfortran fails to build on targets where int32_t and int
      are different types, because it uses int vs. GFC_INTEGER_4 (under hood
      int32_t) interchangeably.
      
      The following patch fixes that.
      
      2023-12-05  Florian Weimer  <fweimer@redhat.com>
      	    Jakub Jelinek  <jakub@redhat.com>
      
      	* io/list_read.c (list_formatted_read_scalar) <case BT_CLASS>:
      	Change types of unit and noiostat to GFC_INTEGER_4 from int, change
      	type of child_iostat from to GFC_INTEGER_4 * from int *, formatting
      	fixes.
      	(nml_read_obj): Likewise.
      	* io/write.c (list_formatted_write_scalar) <case BT_CLASS>: Likewise.
      	(nml_write_obj): Likewise.
      	* io/transfer.c (unformatted_read, unformatted_write): Likewise.
      9610ba7b
  29. Nov 09, 2023
  30. Nov 08, 2023
    • Mikael Morin's avatar
      libgfortran: Remove empty array descriptor first dimension overwrite [PR112371] · 62715bf8
      Mikael Morin authored
      Remove the forced overwrite of the first dimension of the result array
      descriptor to set it to zero extent, in the function templates for
      transformational functions doing an array reduction along a dimension.  This
      overwrite, which happened before early returning in case the result array
      was empty, was wrong because an array may have a non-zero extent in the
      first dimension and still be empty if it has a zero extent in a higher
      dimension.  Overwriting the dimension was resulting in wrong array result
      upper bound for the first dimension in that case.
      
      The offending piece of code was present in several places, and this removes
      them all.  More precisely, there is only one case to fix for logical
      reduction functions, and there are three cases for other reduction
      functions, corresponding to non-masked reduction, reduction with array mask,
      and reduction with scalar mask.  The impacted m4 files are
      ifunction_logical.m4 for logical reduction functions, ifunction.m4 for
      regular functions and types, ifunction-s.m4 for character minloc and maxloc,
      ifunction-s2.m4 for character minval and maxval, and ifindloc1.m4 for
      findloc.
      
      	PR fortran/112371
      
      libgfortran/ChangeLog:
      
      	* m4/ifunction.m4 (START_ARRAY_FUNCTION, START_MASKED_ARRAY_FUNCTION,
      	SCALAR_ARRAY_FUNCTION): Remove overwrite of the first dimension of the
      	array descriptor.
      	* m4/ifunction-s.m4 (START_ARRAY_FUNCTION, START_MASKED_ARRAY_FUNCTION,
      	SCALAR_ARRAY_FUNCTION): Ditto.
      	* m4/ifunction-s2.m4 (START_ARRAY_FUNCTION,
      	START_MASKED_ARRAY_FUNCTION, SCALAR_ARRAY_FUNCTION): Ditto.
      	* m4/ifunction_logical.m4 (START_ARRAY_FUNCTION): Ditto.
      	* m4/ifindloc1.m4: Ditto.
      	* 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/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/findloc1_c10.c: Regenerate.
      	* generated/findloc1_c16.c: Regenerate.
      	* generated/findloc1_c17.c: Regenerate.
      	* generated/findloc1_c4.c: Regenerate.
      	* generated/findloc1_c8.c: Regenerate.
      	* generated/findloc1_i1.c: Regenerate.
      	* generated/findloc1_i16.c: Regenerate.
      	* generated/findloc1_i2.c: Regenerate.
      	* generated/findloc1_i4.c: Regenerate.
      	* generated/findloc1_i8.c: Regenerate.
      	* generated/findloc1_r10.c: Regenerate.
      	* generated/findloc1_r16.c: Regenerate.
      	* generated/findloc1_r17.c: Regenerate.
      	* generated/findloc1_r4.c: Regenerate.
      	* generated/findloc1_r8.c: Regenerate.
      	* generated/findloc1_s1.c: Regenerate.
      	* generated/findloc1_s4.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/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/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_r17.c: Regenerate.
      	* generated/maxloc1_16_r4.c: Regenerate.
      	* generated/maxloc1_16_r8.c: Regenerate.
      	* generated/maxloc1_16_s1.c: Regenerate.
      	* generated/maxloc1_16_s4.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_r17.c: Regenerate.
      	* generated/maxloc1_4_r4.c: Regenerate.
      	* generated/maxloc1_4_r8.c: Regenerate.
      	* generated/maxloc1_4_s1.c: Regenerate.
      	* generated/maxloc1_4_s4.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_r17.c: Regenerate.
      	* generated/maxloc1_8_r4.c: Regenerate.
      	* generated/maxloc1_8_r8.c: Regenerate.
      	* generated/maxloc1_8_s1.c: Regenerate.
      	* generated/maxloc1_8_s4.c: Regenerate.
      	* generated/maxval1_s1.c: Regenerate.
      	* generated/maxval1_s4.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_r17.c: Regenerate.
      	* generated/maxval_r4.c: Regenerate.
      	* generated/maxval_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_r17.c: Regenerate.
      	* generated/minloc1_16_r4.c: Regenerate.
      	* generated/minloc1_16_r8.c: Regenerate.
      	* generated/minloc1_16_s1.c: Regenerate.
      	* generated/minloc1_16_s4.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_r17.c: Regenerate.
      	* generated/minloc1_4_r4.c: Regenerate.
      	* generated/minloc1_4_r8.c: Regenerate.
      	* generated/minloc1_4_s1.c: Regenerate.
      	* generated/minloc1_4_s4.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_r17.c: Regenerate.
      	* generated/minloc1_8_r4.c: Regenerate.
      	* generated/minloc1_8_r8.c: Regenerate.
      	* generated/minloc1_8_s1.c: Regenerate.
      	* generated/minloc1_8_s4.c: Regenerate.
      	* generated/minval1_s1.c: Regenerate.
      	* generated/minval1_s4.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_r17.c: Regenerate.
      	* generated/minval_r4.c: Regenerate.
      	* generated/minval_r8.c: Regenerate.
      	* generated/norm2_r10.c: Regenerate.
      	* generated/norm2_r16.c: Regenerate.
      	* generated/norm2_r17.c: Regenerate.
      	* generated/norm2_r4.c: Regenerate.
      	* generated/norm2_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_c17.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_r17.c: Regenerate.
      	* generated/product_r4.c: Regenerate.
      	* generated/product_r8.c: Regenerate.
      	* generated/sum_c10.c: Regenerate.
      	* generated/sum_c16.c: Regenerate.
      	* generated/sum_c17.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_r17.c: Regenerate.
      	* generated/sum_r4.c: Regenerate.
      	* generated/sum_r8.c: Regenerate.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/bound_11.f90: New test.
      62715bf8
    • Mikael Morin's avatar
      libgfortran: Remove early return if extent is zero [PR112371] · 85a96881
      Mikael Morin authored
      Remove the early return present in function templates for transformational
      functions doing a (masked) reduction of an array along a dimension.
      This early return, which triggered if the extent in the reduction dimension
      was zero, was wrong because even if the reduction operation degenerates to
      a constant value in that case, one has to loop anyway along the other
      dimensions to initialize every element of the resulting array with that
      constant value.  The case of negative extent (not sure whether it may happen
      in practice) which was also early returning, is handled by clamping to zero.
      
      The offending piece of code was present in several places, and this removes
      them all.  Namely, the impacted m4 files are ifunction.m4 for regular
      functions and types, ifunction-s.m4 for character minloc and maxloc, and
      ifunction-s2.m4 for character minval and maxval.
      
      	PR fortran/112371
      
      libgfortran/ChangeLog:
      
      	* m4/ifunction.m4 (START_MASKED_ARRAY_FUNCTION): Remove early return if
      	extent is zero or less, and clamp negative value to zero.
      	* m4/ifunction-s.m4 (START_MASKED_ARRAY_FUNCTION): Ditto.
      	* m4/ifunction-s2.m4 (START_MASKED_ARRAY_FUNCTION): Ditto.
      	* 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/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/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_r17.c: Regenerate.
      	* generated/maxloc1_16_r4.c: Regenerate.
      	* generated/maxloc1_16_r8.c: Regenerate.
      	* generated/maxloc1_16_s1.c: Regenerate.
      	* generated/maxloc1_16_s4.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_r17.c: Regenerate.
      	* generated/maxloc1_4_r4.c: Regenerate.
      	* generated/maxloc1_4_r8.c: Regenerate.
      	* generated/maxloc1_4_s1.c: Regenerate.
      	* generated/maxloc1_4_s4.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_r17.c: Regenerate.
      	* generated/maxloc1_8_r4.c: Regenerate.
      	* generated/maxloc1_8_r8.c: Regenerate.
      	* generated/maxloc1_8_s1.c: Regenerate.
      	* generated/maxloc1_8_s4.c: Regenerate.
      	* generated/maxval1_s1.c: Regenerate.
      	* generated/maxval1_s4.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_r17.c: Regenerate.
      	* generated/maxval_r4.c: Regenerate.
      	* generated/maxval_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_r17.c: Regenerate.
      	* generated/minloc1_16_r4.c: Regenerate.
      	* generated/minloc1_16_r8.c: Regenerate.
      	* generated/minloc1_16_s1.c: Regenerate.
      	* generated/minloc1_16_s4.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_r17.c: Regenerate.
      	* generated/minloc1_4_r4.c: Regenerate.
      	* generated/minloc1_4_r8.c: Regenerate.
      	* generated/minloc1_4_s1.c: Regenerate.
      	* generated/minloc1_4_s4.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_r17.c: Regenerate.
      	* generated/minloc1_8_r4.c: Regenerate.
      	* generated/minloc1_8_r8.c: Regenerate.
      	* generated/minloc1_8_s1.c: Regenerate.
      	* generated/minloc1_8_s4.c: Regenerate.
      	* generated/minval1_s1.c: Regenerate.
      	* generated/minval1_s4.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_r17.c: Regenerate.
      	* generated/minval_r4.c: Regenerate.
      	* generated/minval_r8.c: Regenerate.
      	* generated/product_c10.c: Regenerate.
      	* generated/product_c16.c: Regenerate.
      	* generated/product_c17.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_r17.c: Regenerate.
      	* generated/product_r4.c: Regenerate.
      	* generated/product_r8.c: Regenerate.
      	* generated/sum_c10.c: Regenerate.
      	* generated/sum_c16.c: Regenerate.
      	* generated/sum_c17.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_r17.c: Regenerate.
      	* generated/sum_r4.c: Regenerate.
      	* generated/sum_r8.c: Regenerate.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/bound_10.f90: New test.
      85a96881
    • Mikael Morin's avatar
      libgfortran: Don't skip allocation if size is zero [PR112412] · d56bf419
      Mikael Morin authored
      In the function template of transformational functions doing a reduction
      of an array along one dimension, if the passed in result array was
      unallocated and the calculated allocation size was zero (this is the case
      of empty result arrays), an early return used to skip the allocation.  This
      change moves the allocation before the early return, so that empty result
      arrays are not seen as unallocated.  This is possible because zero size is
      explicitly supported by the allocation function.
      
      The offending code is present in several places, and this updates them all.
      More precisely, there is one place in the template for logical reductions,
      and there are two places in the templates corresponding to masked reductions
      with respectively array mask and scalar mask.  Templates for unmasked
      reductions, which already allocate before returning, are not affected, but
      unmasked reductions are checked nevertheless in the testcase.  The affected
      m4 files are ifunction.m4 for regular functions and types, ifunction-s.m4
      for character minloc and maxloc, ifunction-s2.m4 for character minval and
      maxval, and ifunction_logical for logical reductions.
      
      	PR fortran/112412
      
      libgfortran/ChangeLog:
      
      	* m4/ifunction.m4 (START_MASKED_ARRAY_FUNCTION, SCALAR_ARRAY_FUNCTION):
      	Don't skip allocation if the allocation size is zero.
      	* m4/ifunction-s.m4 (START_MASKED_ARRAY_FUNCTION,
      	SCALAR_ARRAY_FUNCTION): Ditto.
      	* m4/ifunction-s2.m4 (START_MASKED_ARRAY_FUNCTION,
      	SCALAR_ARRAY_FUNCTION): Ditto.
      	* m4/ifunction_logical.m4 (START_ARRAY_FUNCTION): Ditto.
      	* 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/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/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/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/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_r17.c: Regenerate.
      	* generated/maxloc1_16_r4.c: Regenerate.
      	* generated/maxloc1_16_r8.c: Regenerate.
      	* generated/maxloc1_16_s1.c: Regenerate.
      	* generated/maxloc1_16_s4.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_r17.c: Regenerate.
      	* generated/maxloc1_4_r4.c: Regenerate.
      	* generated/maxloc1_4_r8.c: Regenerate.
      	* generated/maxloc1_4_s1.c: Regenerate.
      	* generated/maxloc1_4_s4.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_r17.c: Regenerate.
      	* generated/maxloc1_8_r4.c: Regenerate.
      	* generated/maxloc1_8_r8.c: Regenerate.
      	* generated/maxloc1_8_s1.c: Regenerate.
      	* generated/maxloc1_8_s4.c: Regenerate.
      	* generated/maxval1_s1.c: Regenerate.
      	* generated/maxval1_s4.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_r17.c: Regenerate.
      	* generated/maxval_r4.c: Regenerate.
      	* generated/maxval_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_r17.c: Regenerate.
      	* generated/minloc1_16_r4.c: Regenerate.
      	* generated/minloc1_16_r8.c: Regenerate.
      	* generated/minloc1_16_s1.c: Regenerate.
      	* generated/minloc1_16_s4.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_r17.c: Regenerate.
      	* generated/minloc1_4_r4.c: Regenerate.
      	* generated/minloc1_4_r8.c: Regenerate.
      	* generated/minloc1_4_s1.c: Regenerate.
      	* generated/minloc1_4_s4.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_r17.c: Regenerate.
      	* generated/minloc1_8_r4.c: Regenerate.
      	* generated/minloc1_8_r8.c: Regenerate.
      	* generated/minloc1_8_s1.c: Regenerate.
      	* generated/minloc1_8_s4.c: Regenerate.
      	* generated/minval1_s1.c: Regenerate.
      	* generated/minval1_s4.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_r17.c: Regenerate.
      	* generated/minval_r4.c: Regenerate.
      	* generated/minval_r8.c: Regenerate.
      	* generated/product_c10.c: Regenerate.
      	* generated/product_c16.c: Regenerate.
      	* generated/product_c17.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_r17.c: Regenerate.
      	* generated/product_r4.c: Regenerate.
      	* generated/product_r8.c: Regenerate.
      	* generated/sum_c10.c: Regenerate.
      	* generated/sum_c16.c: Regenerate.
      	* generated/sum_c17.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_r17.c: Regenerate.
      	* generated/sum_r4.c: Regenerate.
      	* generated/sum_r8.c: Regenerate.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/allocated_4.f90: New test.
      d56bf419
  31. Nov 07, 2023
  32. Nov 06, 2023
    • Tobias Burnus's avatar
      libgfortran: Fix calloc call by swapping arg order [PR112364] · 17df6ddc
      Tobias Burnus authored
      The prototype of calloc is
        void *calloc(size_t nmemb, size_t size);
      denoting "an array of nmemb objects, each of whose size is size." (C23)
      
      In order to follow the meaning of the argument names and to silence
      a -Walloc-size warning, this commit swaps the order of the two args
      to read now:  calloc (1, sizeof (transfer_queue));
      
      libgfortran/ChangeLog:
      
      	PR libfortran/112364
      	* io/async.c (enqueue_transfer, enqueue_done_id, enqueue_done,
      	enqueue_close): Swap 1st and 2nd arg in calloc call.
      17df6ddc
  33. Oct 23, 2023
Loading