https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125534

--- Comment #1 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jerry DeLisle <[email protected]>:

https://gcc.gnu.org/g:81a0bec12189136350dbb43969743fab8b87a212

commit r17-1409-g81a0bec12189136350dbb43969743fab8b87a212
Author: Jerry DeLisle <[email protected]>
Date:   Fri Jun 5 13:19:58 2026 -0700

    fortran: ALLOCATE of parameterized derived-type array initializes only
first element

    gfc_trans_allocate passed expr->rank to gfc_allocate_pdt_comp and
    gfc_deallocate_pdt_comp for array allocations of parameterized derived
    types.  For an allocate-shape-spec expression (e.g. "allocate(a(n))"),
    expr->rank is 0 even though the symbol is an array; the rank is carried on
    the symbol rather than on the allocate expression.  With rank 0 the loop
    that initialises each element's allocatable components ran zero times, so
    only element zero was initialised.  Subsequent accesses to elements 1..N-1
    used garbage pointers and crashed.

    Fix: when se.expr is a GFC array descriptor, take the rank from the
    descriptor via GFC_TYPE_ARRAY_RANK instead of from expr->rank.  Apply the
    same correction to the CLASS path and to the matching deallocate calls in
    gfc_trans_deallocate.

    Assisted by: Claude Sonnet 4.6

            PR fortran/125534

    gcc/fortran/ChangeLog:

            * trans-stmt.cc (gfc_trans_allocate): Use GFC_TYPE_ARRAY_RANK from
            the GFC descriptor type when se.expr is a descriptor, rather than
            expr->rank, for the rank passed to gfc_allocate_pdt_comp.  Apply
            the same fix to the CLASS path.
            (gfc_trans_deallocate): Likewise for gfc_deallocate_pdt_comp.

    gcc/testsuite/ChangeLog:

            * gfortran.dg/pdt_array_alloc_1.f90: New test.

Reply via email to