Skip to content
Snippets Groups Projects
  1. Feb 04, 2024
  2. 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
  3. Jan 16, 2024
  4. 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
  5. Jan 08, 2024
  6. Jan 07, 2024
  7. Jan 03, 2024
  8. Dec 20, 2023
  9. Dec 19, 2023
  10. 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
  11. Dec 12, 2023
  12. 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
  13. Dec 06, 2023
  14. 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
  15. Nov 09, 2023
  16. 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
  17. Nov 07, 2023
  18. 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
  19. Oct 23, 2023
  20. Oct 22, 2023
    • Iain Sandoe's avatar
      Config,Darwin: Allow for configuring Darwin to use embedded runpath. · 6a6d3817
      Iain Sandoe authored
      Recent Darwin versions place contraints on the use of run paths
      specified in environment variables.  This breaks some assumptions
      in the GCC build.
      
      This change allows the user to configure a Darwin build to use
      '@rpath/libraryname.dylib' in library names and then to add an
      embedded runpath to executables (and libraries with dependents).
      
      The embedded runpath is added by default unless the user adds
      '-nodefaultrpaths' to the link line.
      
      For an installed compiler, it means that any executable built with
      that compiler will reference the runtimes installed with the
      compiler (equivalent to hard-coding the library path into the name
      of the library).
      
      During build-time configurations  any "-B" entries will be added to
      the runpath thus the newly-built libraries will be found by exes.
      
      Since the install name is set in libtool, that decision needs to be
      available here (but might also cause dependent ones in Makefiles,
      so we need to export a conditional).
      
      This facility is not available for Darwin 8 or earlier, however the
      existing environment variable runpath does work there.
      
      We default this on for systems where the external DYLD_LIBRARY_PATH
      does not work and off for Darwin 8 or earlier.  For systems that can
      use either method, if the value is unset, we use the default (which
      is currently DYLD_LIBRARY_PATH).
      
      ChangeLog:
      
      	* configure: Regenerate.
      	* configure.ac: Do not add default runpaths to GCC exes
      	when we are building -static-libstdc++/-static-libgcc (the
      	default).
      	* libtool.m4: Add 'enable-darwin-at-runpath'.  Act  on the
      	enable flag to alter Darwin libraries to use @rpath names.
      
      gcc/ChangeLog:
      
      	* aclocal.m4: Regenerate.
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      	* config/darwin.h: Handle Darwin rpaths.
      	* config/darwin.opt: Handle Darwin rpaths.
      	* Makefile.in:  Handle Darwin rpaths.
      
      gcc/ada/ChangeLog:
      
      	* gcc-interface/Makefile.in: Handle Darwin rpaths.
      
      gcc/jit/ChangeLog:
      	* Make-lang.in: Handle Darwin rpaths.
      
      libatomic/ChangeLog:
      
      	* Makefile.am: Handle Darwin rpaths.
      	* Makefile.in: Regenerate.
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      
      libbacktrace/ChangeLog:
      
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      
      libcc1/ChangeLog:
      
      	* configure: Regenerate.
      
      libffi/ChangeLog:
      
      	* Makefile.am: Handle Darwin rpaths.
      	* Makefile.in: Regenerate.
      	* configure: Regenerate.
      
      libgcc/ChangeLog:
      
      	* config/t-slibgcc-darwin: Generate libgcc_s
      	with an @rpath name.
      	* config.host: Handle Darwin rpaths.
      
      libgfortran/ChangeLog:
      
      	* Makefile.am: Handle Darwin rpaths.
      	* Makefile.in: Regenerate.
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths
      
      libgm2/ChangeLog:
      
      	* Makefile.am: Handle Darwin rpaths.
      	* Makefile.in: Regenerate.
      	* aclocal.m4: Regenerate.
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      	* libm2cor/Makefile.am: Handle Darwin rpaths.
      	* libm2cor/Makefile.in: Regenerate.
      	* libm2iso/Makefile.am: Handle Darwin rpaths.
      	* libm2iso/Makefile.in: Regenerate.
      	* libm2log/Makefile.am: Handle Darwin rpaths.
      	* libm2log/Makefile.in: Regenerate.
      	* libm2min/Makefile.am: Handle Darwin rpaths.
      	* libm2min/Makefile.in: Regenerate.
      	* libm2pim/Makefile.am: Handle Darwin rpaths.
      	* libm2pim/Makefile.in: Regenerate.
      
      libgomp/ChangeLog:
      
      	* Makefile.am: Handle Darwin rpaths.
      	* Makefile.in: Regenerate.
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths
      
      libitm/ChangeLog:
      
      	* Makefile.am: Handle Darwin rpaths.
      	* Makefile.in: Regenerate.
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      
      libobjc/ChangeLog:
      
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      
      libphobos/ChangeLog:
      
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      	* libdruntime/Makefile.am: Handle Darwin rpaths.
      	* libdruntime/Makefile.in: Regenerate.
      	* src/Makefile.am: Handle Darwin rpaths.
      	* src/Makefile.in: Regenerate.
      
      libquadmath/ChangeLog:
      
      	* Makefile.am: Handle Darwin rpaths.
      	* Makefile.in: Regenerate.
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      
      libsanitizer/ChangeLog:
      
      	* asan/Makefile.am: Handle Darwin rpaths.
      	* asan/Makefile.in: Regenerate.
      	* configure: Regenerate.
      	* hwasan/Makefile.am: Handle Darwin rpaths.
      	* hwasan/Makefile.in: Regenerate.
      	* lsan/Makefile.am: Handle Darwin rpaths.
      	* lsan/Makefile.in: Regenerate.
      	* tsan/Makefile.am: Handle Darwin rpaths.
      	* tsan/Makefile.in: Regenerate.
      	* ubsan/Makefile.am: Handle Darwin rpaths.
      	* ubsan/Makefile.in: Regenerate.
      
      libssp/ChangeLog:
      
      	* Makefile.am: Handle Darwin rpaths.
      	* Makefile.in: Regenerate.
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      
      libstdc++-v3/ChangeLog:
      
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      	* src/Makefile.am: Handle Darwin rpaths.
      	* src/Makefile.in: Regenerate.
      
      libvtv/ChangeLog:
      
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      
      lto-plugin/ChangeLog:
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      
      zlib/ChangeLog:
      	* configure: Regenerate.
      	* configure.ac: Handle Darwin rpaths.
      6a6d3817
  21. Sep 29, 2023
  22. Sep 28, 2023
    • Tobias Burnus's avatar
      libgfortran: Use __builtin_unreachable() not -Wno-stringop-overflow to silence warning · 4f41d497
      Tobias Burnus authored
      The only caller of write_z is formatted_transfer_scalar_write that passes
      kind to 'len'; in turn, write_z is the only caller of xtoa_big, passing on
      its 'len'.  The kind is passed as is, except for GFC_REAL_17 for which
      len = 16 is used.
      
      libgfortran/
      	* io/write.c (xtoa_big): Change a 'GCC diagnostic ignored
      	"-Wstringop-overflow"' to an assumption (via __builtin_unreachable).t
      4f41d497
  23. Aug 08, 2023
  24. Aug 07, 2023
    • Nick Alcock's avatar
      libtool.m4: augment symcode for Solaris 11 · dc17ceb3
      Nick Alcock authored
      This reports common symbols like GNU nm, via a type code of 'C'.
      
      ChangeLog:
      
      	* libtool.m4 (lt_cv_sys_global_symbol_pipe): Augment symcode for
      	Solaris 11.
      
      gcc/ChangeLog:
      
      	* configure: Regenerate.
      
      libatomic/ChangeLog:
      
      	* configure: Regenerate.
      
      libbacktrace/ChangeLog:
      
      	* configure: Regenerate.
      
      libcc1/ChangeLog:
      
      	* configure: Regenerate.
      
      libffi/ChangeLog:
      
      	* configure: Regenerate.
      
      libgfortran/ChangeLog:
      
      	* configure: Regenerate.
      
      libgm2/ChangeLog:
      
      	* configure: Regenerate.
      
      libgomp/ChangeLog:
      
      	* configure: Regenerate.
      
      libitm/ChangeLog:
      
      	* configure: Regenerate.
      
      libobjc/ChangeLog:
      
      	* configure: Regenerate.
      
      libphobos/ChangeLog:
      
      	* configure: Regenerate.
      
      libquadmath/ChangeLog:
      
      	* configure: Regenerate.
      
      libsanitizer/ChangeLog:
      
      	* configure: Regenerate.
      
      libssp/ChangeLog:
      
      	* configure: Regenerate.
      
      libstdc++-v3/ChangeLog:
      
      	* configure: Regenerate.
      
      libvtv/ChangeLog:
      
      	* configure: Regenerate.
      
      lto-plugin/ChangeLog:
      
      	* configure: Regenerate.
      
      zlib/ChangeLog:
      
      	* configure: Regenerate.
      dc17ceb3
    • Alexander von Gluck IV's avatar
      Add support for the haiku operating system · ead5103c
      Alexander von Gluck IV authored
      These are the os support patches we have been grooming and maintaining
      for quite a few years over on git.haiku-os.org.  All of these
      architectures are working and most have been stable for quite some time.
      
      ChangeLog:
      
      	* configure: Regenerate.
      	* configure.ac: Add Haiku to list of ELF OSes
      	* libtool.m4: Update sys_lib_dlsearch_path_spec on Haiku.
      
      gcc/ChangeLog:
      
      	* configure: Regenerate.
      
      libatomic/ChangeLog:
      
      	* configure: Regenerate.
      
      libbacktrace/ChangeLog:
      
      	* configure: Regenerate.
      
      libcc1/ChangeLog:
      
      	* configure: Regenerate.
      
      libffi/ChangeLog:
      
      	* configure: Regenerate.
      
      libgfortran/ChangeLog:
      
      	* configure: Regenerate.
      
      libgm2/ChangeLog:
      
      	* configure: Regenerate.
      
      libgomp/ChangeLog:
      
      	* configure: Regenerate.
      
      libitm/ChangeLog:
      
      	* configure: Regenerate.
      
      libobjc/ChangeLog:
      
      	* configure: Regenerate.
      
      libphobos/ChangeLog:
      
      	* configure: Regenerate.
      
      libquadmath/ChangeLog:
      
      	* configure: Regenerate.
      
      libsanitizer/ChangeLog:
      
      	* configure: Regenerate.
      
      libssp/ChangeLog:
      
      	* configure: Regenerate.
      
      libstdc++-v3/ChangeLog:
      
      	* configure: Regenerate.
      
      libvtv/ChangeLog:
      
      	* configure: Regenerate.
      
      lto-plugin/ChangeLog:
      
      	* configure: Regenerate.
      
      zlib/ChangeLog:
      
      	* configure: Regenerate.
      ead5103c
    • Nick Alcock's avatar
      libtool.m4: fix the NM="/nm/over/here -B/option/with/path" case · f3307109
      Nick Alcock authored
      My previous nm patch handled all cases but one -- if the user set NM in
      the environment to a path which contained an option, libtool's nm
      detection tries to run nm against a copy of nm with the options in it:
      e.g. if NM was set to "nm --blargle", and nm was found in /usr/bin, the
      test would try to run "/usr/bin/nm --blargle /usr/bin/nm --blargle".
      This is unlikely to be desirable: in this case we should run
      "/usr/bin/nm --blargle /usr/bin/nm".
      
      Furthermore, as part of this nm has to detect when the passed-in $NM
      contains a path, and in that case avoid doing a path search itself.
      This too was thrown off if an option contained something that looked
      like a path, e.g. NM="nm -B../prev-gcc"; libtool then tries to run
      "nm -B../prev-gcc nm" which rarely works well (and indeed it looks
      to see whether that nm exists, finds it doesn't, and wrongly concludes
      that nm -p or whatever does not work).
      
      Fix all of these by clipping all options (defined as everything
      including and after the first " -") before deciding whether nm
      contains a path (but not using the clipped value for anything else),
      and then removing all options from the path-modified nm before
      looking to see whether that nm existed.
      
      NM=my-nm now does a path search and runs e.g.
        /usr/bin/my-nm -B /usr/bin/my-nm
      
      NM=/usr/bin/my-nm now avoids a path search and runs e.g.
        /usr/bin/my-nm -B /usr/bin/my-nm
      
      NM="my-nm -p../wombat" now does a path search and runs e.g.
        /usr/bin/my-nm -p../wombat -B /usr/bin/my-nm
      
      NM="../prev-binutils/new-nm -B../prev-gcc" now avoids a path search:
        ../prev-binutils/my-nm -B../prev-gcc -B ../prev-binutils/my-nm
      
      This seems to be all combinations, including those used by GCC bootstrap
      (which, before this commit, fails to bootstrap when configured
      --with-build-config=bootstrap-lto, because the lto plugin is now using
      --export-symbols-regex, which requires libtool to find a working nm,
      while also using -B../prev-gcc to point at the lto plugin associated
      with the GCC just built.)
      
      Regenerate all affected configure scripts.
      
      ChangeLog:
      
      	* libtool.m4 (LT_PATH_NM): Handle user-specified NM with
      	options, including options containing paths.
      
      gcc/ChangeLog:
      
      	* configure: Regenerate.
      
      libatomic/ChangeLog:
      
      	* configure: Regenerate.
      
      libbacktrace/ChangeLog:
      
      	* configure: Regenerate.
      
      libcc1/ChangeLog:
      
      	* configure: Regenerate.
      
      libffi/ChangeLog:
      
      	* configure: Regenerate.
      
      libgfortran/ChangeLog:
      
      	* configure: Regenerate.
      
      libgm2/ChangeLog:
      
      	* configure: Regenerate.
      
      libgomp/ChangeLog:
      
      	* configure: Regenerate.
      
      libitm/ChangeLog:
      
      	* configure: Regenerate.
      
      libobjc/ChangeLog:
      
      	* configure: Regenerate.
      
      libphobos/ChangeLog:
      
      	* configure: Regenerate.
      
      libquadmath/ChangeLog:
      
      	* configure: Regenerate.
      
      libsanitizer/ChangeLog:
      
      	* configure: Regenerate.
      
      libssp/ChangeLog:
      
      	* configure: Regenerate.
      
      libstdc++-v3/ChangeLog:
      
      	* configure: Regenerate.
      
      libvtv/ChangeLog:
      
      	* configure: Regenerate.
      
      lto-plugin/ChangeLog:
      
      	* configure: Regenerate.
      
      zlib/ChangeLog:
      
      	* configure: Regenerate.
      f3307109
    • Nick Alcock's avatar
      libtool.m4: fix nm BSD flag detection · ab422974
      Nick Alcock authored
      Libtool needs to get BSD-format (or MS-format) output out of the system
      nm, so that it can scan generated object files for symbol names for
      -export-symbols-regex support.  Some nms need specific flags to turn on
      BSD-formatted output, so libtool checks for this in its AC_PATH_NM.
      Unfortunately the code to do this has a pair of interlocking flaws:
      
       - it runs the test by doing an nm of /dev/null.  Some platforms
         reasonably refuse to do an nm on a device file, but before now this
         has only been worked around by assuming that the error message has a
         specific textual form emitted by Tru64 nm, and that getting this
         error means this is Tru64 nm and that nm -B would work to produce
         BSD-format output, even though the test never actually got anything
         but an error message out of nm -B.  This is fixable by nm'ing *nm
         itself* (since we necessarily have a path to it).
      
       - the test is entirely skipped if NM is set in the environment, on the
         grounds that the user has overridden the test: but the user cannot
         reasonably be expected to know that libtool wants not only nm but
         also flags forcing BSD-format output.  Worse yet, one such "user" is
         the top-level Cygnus configure script, which neither tests for
         nor specifies any BSD-format flags.  So platforms needing BSD-format
         flags always fail to set them when run in a Cygnus tree, breaking
         -export-symbols-regex on such platforms.  Libtool also needs to
         augment $LD on some platforms, but this is done unconditionally,
         augmenting whatever the user specified: the nm check should do the
         same.
      
         One wrinkle: if the user has overridden $NM, a path might have been
         provided: so we use the user-specified path if there was one, and
         otherwise do the path search as usual.  (If the nm specified doesn't
         work, this might lead to a few extra pointless path searches -- but
         the test is going to fail anyway, so that's not a problem.)
      
      (Tested with NM unset, and set to nm, /usr/bin/nm, my-nm where my-nm is a
      symlink to /usr/bin/nm on the PATH, and /not-on-the-path/my-nm where
      *that* is a symlink to /usr/bin/nm.)
      
      ChangeLog:
      
      	* libtool.m4 (LT_PATH_NM): Try BSDization flags with a user-provided
      	NM, if there is one.  Run nm on itself, not on /dev/null, to avoid
      	errors from nms that refuse to work on non-regular files.  Remove
      	other workarounds for this problem.  Strip out blank lines from the
      	nm output.
      
      fixincludes/ChangeLog:
      
      	* configure: Regenerate.
      
      gcc/ChangeLog:
      
      	* configure: Regenerate.
      
      libatomic/ChangeLog:
      
      	* configure: Regenerate.
      
      libbacktrace/ChangeLog:
      
      	* configure: Regenerate.
      
      libcc1/ChangeLog:
      
      	* configure: Regenerate.
      
      libffi/ChangeLog:
      
      	* configure: Regenerate.
      
      libgfortran/ChangeLog:
      
      	* configure: Regenerate.
      
      libgm2/ChangeLog:
      
      	* configure: Regenerate.
      
      libgomp/ChangeLog:
      
      	* configure: Regenerate.
      
      libitm/ChangeLog:
      
      	* configure: Regenerate.
      
      libobjc/ChangeLog:
      
      	* configure: Regenerate.
      
      libphobos/ChangeLog:
      
      	* configure: Regenerate.
      
      libquadmath/ChangeLog:
      
      	* configure: Regenerate.
      
      libsanitizer/ChangeLog:
      
      	* configure: Regenerate.
      
      libssp/ChangeLog:
      
      	* configure: Regenerate.
      
      libstdc++-v3/ChangeLog:
      
      	* configure: Regenerate.
      
      libvtv/ChangeLog:
      
      	* configure: Regenerate.
      
      lto-plugin/ChangeLog:
      
      	* configure: Regenerate.
      
      zlib/ChangeLog:
      
      	* configure: Regenerate.
      ab422974
    • H.J. Lu's avatar
      GCC: Check if AR works with --plugin and rc · 9c7797a8
      H.J. Lu authored
      AR from older binutils doesn't work with --plugin and rc:
      
      [hjl@gnu-cfl-2 bin]$ touch foo.c
      [hjl@gnu-cfl-2 bin]$ ar --plugin /usr/libexec/gcc/x86_64-redhat-linux/10/liblto_plugin.so rc libfoo.a foo.c
      [hjl@gnu-cfl-2 bin]$ ./ar --plugin /usr/libexec/gcc/x86_64-redhat-linux/10/liblto_plugin.so rc libfoo.a foo.c
      ./ar: no operation specified
      [hjl@gnu-cfl-2 bin]$ ./ar --version
      GNU ar (Linux/GNU Binutils) 2.29.51.0.1.20180112
      Copyright (C) 2018 Free Software Foundation, Inc.
      This program is free software; you may redistribute it under the terms of
      the GNU General Public License version 3 or (at your option) any later version.
      This program has absolutely no warranty.
      [hjl@gnu-cfl-2 bin]$
      
      Check if AR works with --plugin and rc before passing --plugin to AR and
      RANLIB.
      
      ChangeLog:
      
      	* configure: Regenerated.
      	* libtool.m4 (_LT_CMD_OLD_ARCHIVE): Check if AR works with
      	--plugin and rc before enabling --plugin.
      
      config/ChangeLog:
      
      	* gcc-plugin.m4 (GCC_PLUGIN_OPTION): Check if AR works with
      	--plugin and rc before enabling --plugin.
      
      gcc/ChangeLog:
      
      	* configure: Regenerate.
      
      libatomic/ChangeLog:
      
      	* configure: Regenerate.
      
      libbacktrace/ChangeLog:
      
      	* configure: Regenerate.
      
      libcc1/ChangeLog:
      
      	* configure: Regenerate.
      
      libffi/ChangeLog:
      
      	* configure: Regenerate.
      
      libgfortran/ChangeLog:
      
      	* configure: Regenerate.
      
      libgm2/ChangeLog:
      
      	* configure: Regenerate.
      
      libgomp/ChangeLog:
      
      	* configure: Regenerate.
      
      libiberty/ChangeLog:
      
      	* configure: Regenerate.
      
      libitm/ChangeLog:
      
      	* configure: Regenerate.
      
      libobjc/ChangeLog:
      
      	* configure: Regenerate.
      
      libphobos/ChangeLog:
      
      	* configure: Regenerate.
      
      libquadmath/ChangeLog:
      
      	* configure: Regenerate.
      
      libsanitizer/ChangeLog:
      
      	* configure: Regenerate.
      
      libssp/ChangeLog:
      
      	* configure: Regenerate.
      
      libstdc++-v3/ChangeLog:
      
      	* configure: Regenerate.
      
      libvtv/ChangeLog:
      
      	* configure: Regenerate.
      
      lto-plugin/ChangeLog:
      
      	* configure: Regenerate.
      
      zlib/ChangeLog:
      
      	* configure: Regenerate.
      9c7797a8
    • H.J. Lu's avatar
      Sync with binutils: GCC: Pass --plugin to AR and RANLIB · 126f707e
      H.J. Lu authored
      Sync with binutils for building binutils with LTO:
      
      50ad1254d50 GCC: Pass --plugin to AR and RANLIB
      
      Detect GCC LTO plugin.  Pass --plugin to AR and RANLIB to support LTO
      build.
      
      ChangeLog:
      
      	* Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
      	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
      	* configure.ac: Include config/gcc-plugin.m4.
      	AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
      	* libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
      	RANLIB if possible.
      	* Makefile.in: Regenerated.
      	* configure: Likewise.
      
      config/ChangeLog:
      
      	* gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
      
      libiberty/ChangeLog:
      
      	* Makefile.in (AR): Add @AR_PLUGIN_OPTION@
      	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
      	(configure_deps): Depend on ../config/gcc-plugin.m4.
      	* configure.ac: AC_SUBST AR_PLUGIN_OPTION and
      	RANLIB_PLUGIN_OPTION.
      	* aclocal.m4: Regenerated.
      	* configure: Likewise.
      
      zlib/ChangeLog:
      
      	* configure: Regenerated.
      
      gcc/ChangeLog:
      
      	* configure: Regenerate.
      
      libatomic/ChangeLog:
      
      	* configure: Regenerate.
      
      libbacktrace/ChangeLog:
      
      	* configure: Regenerate.
      
      libcc1/ChangeLog:
      
      	* configure: Regenerate.
      
      libffi/ChangeLog:
      
      	* configure: Regenerate.
      
      libgfortran/ChangeLog:
      
      	* configure: Regenerate.
      
      libgm2/ChangeLog:
      
      	* configure: Regenerate.
      
      libgomp/ChangeLog:
      
      	* configure: Regenerate.
      
      libitm/ChangeLog:
      
      	* configure: Regenerate.
      
      libobjc/ChangeLog:
      
      	* configure: Regenerate.
      
      libphobos/ChangeLog:
      
      	* configure: Regenerate.
      
      libquadmath/ChangeLog:
      
      	* configure: Regenerate.
      
      libsanitizer/ChangeLog:
      
      	* configure: Regenerate.
      
      libssp/ChangeLog:
      
      	* configure: Regenerate.
      
      libstdc++-v3/ChangeLog:
      
      	* configure: Regenerate.
      
      libvtv/ChangeLog:
      
      	* configure: Regenerate.
      
      lto-plugin/ChangeLog:
      
      	* configure: Regenerate.
      126f707e
  25. Jul 22, 2023
  26. Jul 21, 2023
    • Andrew Pinski's avatar
      libfortran: Fix build for targets that don't have 10byte or 16 byte floating point · f3251872
      Andrew Pinski authored
      So the problem here is EXPAND_INTER_MACRO_16 expands to nothing if 16 byte FP does not
      exist but we still add a comma after it and that causes a build failure.
      The same is true for EXPAND_INTER_MACRO_10 too.
      
      Committed as obvious after a bootstrap and test on x86_64-linux-gnu and aarch64-linux-gnu.
      
      libgfortran/ChangeLog:
      
      	PR libfortran/110759
      	* ieee/ieee_arithmetic.F90
      	(COMP_INTERFACE): Remove the comma after EXPAND_INTER_MACRO_16
      	and EXPAND_INTER_MACRO_10.
      	(EXPAND_INTER_MACRO_16): Add comma here if 16 byte fp exist.
      	(EXPAND_INTER_MACRO_10): Likewise.
      f3251872
    • GCC Administrator's avatar
      Daily bump. · e2bf82d5
      GCC Administrator authored
      e2bf82d5
  27. Jul 20, 2023
    • Francois-Xavier Coudert's avatar
      Fortran: add IEEE_QUIET_* and IEEE_SIGNALING_* comparisons · dca28748
      Francois-Xavier Coudert authored
      Those operations were added to Fortran 2018, and correspond to
      well-defined IEEE comparison operations, with defined signaling
      semantics for NaNs. All are implemented in terms of GCC expressions and
      built-ins, with no library support needed.
      
      gcc/fortran/
      
      	* f95-lang.cc (gfc_init_builtin_functions): Add __builtin_iseqsig.
      	* trans-intrinsic.cc (conv_intrinsic_ieee_comparison): New
      	function.
      	(gfc_conv_ieee_arithmetic_function): Handle IEEE comparisons.
      
      gcc/testsuite/
      
      	* gfortran.dg/ieee/comparisons_1.f90: New test.
      	* gfortran.dg/ieee/comparisons_2.f90: New test.
      	* gfortran.dg/ieee/comparisons_3.F90: New test.
      
      libgfortran/
      	* ieee/ieee_arithmetic.F90: Add IEEE_QUIET_* and
      	IEEE_SIGNALING_* functions.
      dca28748
  28. Jun 12, 2023
  29. Jun 11, 2023
Loading