Le 25/08/2026 à 01:35, Jerry D a écrit :
See attached 3 of 5 patch

Regression tested on x86_64

Regards,

Jerry

---

fortran: [PR49802]-3 Allow VALUE on assumed-shape and
  explicit-shape array dummies

Fortran 2003 C527 prohibited the VALUE attribute on any array dummy.
Fortran 2008 relaxed this with C557, which prohibits only an
assumed-size array, a coarray, and an entity with a coarray ultimate
component.  gfortran was rejecting the whole combination in
gfc_check_conflict, so the diagnostic for an assumed-rank dummy also
came out as a VALUE/DIMENSION conflict rather than naming the real
constraint.

resolve.cc takes over the check, gated by gfc_notify_std so that
-std=f2003 still rejects an array VALUE dummy.  An assumed-size array
is rejected outright.  So is an array VALUE dummy of a BIND(C)
procedure, since only a scalar VALUE dummy is interoperable with a
formal parameter of the C prototype (F2023, 18.3.6 (4)), and a
polymorphic array VALUE dummy, as not yet implemented.

trans-types.cc keeps the dummy passed by reference, and
gfc_conv_procedure_call gives it a private copy of the actual argument
through gfc_conv_subref_array_arg with INTENT_IN, so nothing is written
back.  The copy is deep, so that a callee cannot reach the actual
argument's data through a shared allocatable component.

     PR fortran/49802

gcc/fortran/ChangeLog:

     * resolve.cc (resolve_symbol): Allow VALUE on assumed-shape and
     explicit-shape array dummies under Fortran 2008 (C557); reject it
     on assumed-size arrays, on array dummies of a BIND(C) procedure,
     and, as not yet implemented, on polymorphic array dummies.
     * symbol.cc (gfc_check_conflict): Remove the conflict between
     VALUE and DIMENSION; only VALUE and CODIMENSION remain mutually
     exclusive.
     * trans-expr.cc (gfc_conv_procedure_call): For a VALUE array
     dummy, pass a private deep copy of the actual argument via
     gfc_conv_subref_array_arg with INTENT_IN.
     * trans-types.cc (gfc_sym_type): Use byref=1 for VALUE array
     dummies, so the ABI still passes by reference.

gcc/testsuite/ChangeLog:

     * gfortran.dg/value_3.f90: Compile under -std=f2003 and replace the
     now-invalid expectation that an explicit-shape array dummy with
     VALUE conflicts with DIMENSION; this combination is permitted
     (F2008, C557).
     * gfortran.dg/assumed_rank_11.f90: Update expected diagnostic for
     VALUE on an assumed-rank dummy.
     * gfortran.dg/c-interop/c535a-2.f90: Likewise.
     * gfortran.dg/value_12.f90: New test.
     * gfortran.dg/value_13.f90: New test.
     * gfortran.dg/value_16.f90: New test.
     * gfortran.dg/value_17.f90: New test.
---
OK.

Reply via email to