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

--- Comment #8 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:e53a7510be51139ff4297e65e69895a6243caa9d

commit r16-8068-ge53a7510be51139ff4297e65e69895a6243caa9d
Author: Christopher Albert <[email protected]>
Date:   Tue Mar 10 19:16:24 2026 +0100

    Fortran: Allow task-reduction allocatable scalars without outer ref
[PR102596]

    OpenMP task reduction lowering can call gfc_omp_clause_default_ctor for
    an allocatable scalar with outer == NULL_TREE.  That is valid for scalar
    allocatables that only need fresh storage allocation and do not need a
    copied descriptor or allocatable-component walk.

    The Fortran hook asserted unconditionally on outer != NULL_TREE, so
    reduction(task, +:r) with an allocatable scalar ICEd during omplower.

    Fix this by requiring outer only for the cases that actually use it:
    descriptor-based allocatables and types with allocatable components.
    Keep the assertion for those cases and allow NULL outer for plain scalar
    allocatables.  Add a regression test for the allocatable task-reduction
    case.

    gcc/fortran/ChangeLog:

            PR fortran/102596
            * trans-openmp.cc (gfc_omp_clause_default_ctor): Only require an
            outer reference when the constructor path actually uses it.

    gcc/testsuite/ChangeLog:

            PR fortran/102596
            * gfortran.dg/pr102596.f90: New test.

    Signed-off-by: Christopher Albert <[email protected]>

Reply via email to