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

--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Andre Vehreschild <ve...@gcc.gnu.org>:

https://gcc.gnu.org/g:8f4ee36bd5248cd244f65282167e3a13a3c98bc2

commit r16-75-g8f4ee36bd5248cd244f65282167e3a13a3c98bc2
Author: Andre Vehreschild <ve...@gcc.gnu.org>
Date:   Mon Apr 7 09:36:24 2025 +0200

    Fortran: Improve F2018 TEAM handling [PR87326, PR87556, PR88254, PR103896]

    Improve the implementation of F2018 TEAM handling routines. Add
    runtime-functions to caf_single to allow testing.

            PR fortran/87326
            PR fortran/87556
            PR fortran/88254
            PR fortran/103796

    gcc/fortran/ChangeLog:

            * coarray.cc (split_expr_at_caf_ref): Treat polymorphic types
            correctly.  Ensure resolve of expression after coindex.
            (create_allocated_callback): Fix parameter of allocated function
            for coarrays.
            (coindexed_expr_callback): Improve detection of coarrays in
            allocated function.
            * decl.cc (gfc_match_end): Add team block matching.
            * dump-parse-tree.cc (show_code_node): Dump change team block as
            such.
            * frontend-passes.cc (gfc_code_walker): Recognice team block.
            * gfortran.texi: Add documentation for team api functions.
            * intrinsic.texi: Add documentation about team_type in
            iso_fortran_env module.
            * iso-fortran-env.def (team_type): Use helper to get pointer
            kind.
            * match.cc (gfc_match_associate): Factor out matching of
            association list, because it is used in change team as well.
            (check_coarray_assoc): Ensure, that the association is to a
            coarray.
            (match_association_list): Match a list of association either in
            associate or in change team.
            (gfc_match_form_team): Match form team correctly include
            new_index.
            (gfc_match_change_team): Match change team with association
            list.
            (gfc_match_end_team): Match end team including stat and errmsg.
            (gfc_match_return): Prevent return from team block.
            * parse.cc (decode_statement): Sort team block.
            (next_statement): Same.
            (check_statement_label): Same.
            (accept_statement): Same.
            (verify_st_order): Same.
            (parse_associate): Renamed to move_associates_to_block...
            (move_associates_to_block): ... to enable reuse for change team.
            (parse_change_team): Parse it as block.
            (parse_executable): Same.
            * parse.h (enum gfc_compile_state): Add team block as compiler
            state.
            * resolve.cc (resolve_scalar_argument): New function to resolve
            an argument to a statement as a scalar.
            (resolve_form_team): Resolve its members.
            (resolve_change_team): Same.
            (resolve_branch): Prevent branch from jumping out of team block.
            (check_team): Removed.
            * trans-decl.cc (gfc_build_builtin_function_decls): Add stat and
            errmsg to team API functions and update their arguments.
            * trans-expr.cc (gfc_trans_subcomponent_assign): Also null the
            token when moving memory or an allocated() will not detect a
            free.
            * trans-intrinsic.cc (gfc_conv_intrinsic_caf_is_present_remote):
            Adapt to signature change no longer a pointer-pointer.
            * trans-stmt.cc (gfc_trans_form_team): Translate a form team
            including new_index.
            (gfc_trans_change_team): Translate a change team as a block.

    libgfortran/ChangeLog:

            * caf/libcaf.h: Remove commented block.
            (_gfortran_caf_form_team): Allow for all relevant arguments.
            (_gfortran_caf_change_team): Same.
            (_gfortran_caf_end_team): Same.
            (_gfortran_caf_sync_team): Same.
            * caf/single.c (struct caf_single_team): Team handling
            structures.
            (_gfortran_caf_init): Initialize initial team.
            (free_team_list): Free all teams and the memory they hold.
            (_gfortran_caf_finalize): Free initial and sibling teams.
            (_gfortran_caf_register): Add memory registered to current team.
            (_gfortran_caf_deregister): Unregister memory from current team.
            (_gfortran_caf_is_present_on_remote): Check token's memptr for
            llocation.  May have been deallocated by an end team.
            (_gfortran_caf_form_team): Push a new team stub to the list.
            (_gfortran_caf_change_team): Push a formed team on top of the
            ctive teams stack.
            (_gfortran_caf_end_team): End the active team, free all memory
            allocated during its livespan.
            (_gfortran_caf_sync_team): Take stat and errmsg into account.

    gcc/testsuite/ChangeLog:

            * gfortran.dg/team_change_2.f90: New test.
            * gfortran.dg/team_change_3.f90: New test.
            * gfortran.dg/team_end_2.f90: New test.
            * gfortran.dg/team_end_3.f90: New test.
            * gfortran.dg/team_form_2.f90: New test.
            * gfortran.dg/team_form_3.f90: New test.
            * gfortran.dg/team_sync_2.f90: New test.

Reply via email to