One has to admit that gfc_free_omp_namelist got a bit unhandy.
Solution pass the OMP_LIST_ enum value instead of a bunch of
booleans. The change has been split-off from Julian's mapper
patch, which otherwise had to add another boolean.
Contrary to his patch, it adds a name to the enum and uses
the enum; the argument is also mandatory to make the caller
think whether it is needed or not. And it also replaces
0 byOMP_LIST_FIRST (=OMP_LIST_PRIVATE) to avoid magic numbers.
Julian's patch is part of commit on OG14 (devel/omp/gcc-14)
015cb4002d6 OpenMP: Fortran "!$omp declare mapper" support
aliashttps://gcc.gnu.org/g:015cb4002d6 - originally put on
OG13 as 6d82b6c4156 Jun 30, 2023.(Post-commit) comments, remarks, suggestions? Committed as
r17-279-g357207648f16ee Tobias PS: Next step is to add the Fortran
parser support parts of Julian's declare-mapper commit.
commit 357207648f16eeb6768e081d320bf131a33316fc
Author: Tobias Burnus <[email protected]>
Date: Sat May 2 22:25:48 2026 +0200
Fortran/OpenMP: cleanup gfc_free_omp_namelist
Move the logic to deduce what needs to be freed from the
caller to the callee by passing the OMP_LIST_... enum value
instead of multiple bool arguments to gfc_free_omp_namelist.
Additionally, add the name 'gfc_omp_list_type' to the existing
OMP_LIST_... enum values and OMP_LIST_NONE (== OMP_LIST_NUM)
as special value.
As an enum is available, use it properly and replace 0 by
OMP_LIST_FIRST in the list walks.
gcc/fortran/ChangeLog:
* gfortran.h (enum gfc_omp_list_type): Add this name
to the existing OMP_LIST... enum; add OMP_LIST_NONE.
(gfc_free_omp_namelist): Take that enum as arg instead of bool args.
* match.cc (gfc_free_omp_namelist): Update.
* openmp.cc (gfc_free_omp_clauses, gfc_free_omp_declare_variant_list,
gfc_match_omp_clause_reduction, gfc_match_omp_clauses,
gfc_match_omp_allocate, gfc_match_omp_flush,
gfc_match_omp_declare_target, resolve_omp_clauses,
gfc_resolve_omp_parallel_blocks, resolve_omp_do,
gfc_resolve_oacc_blocks, gfc_resolve_oacc_declare): Update
gfc_free_omp_namelist call and used enum type instead of
int.
* st.cc (gfc_free_statement): Likewise.
Co-Authored-By: Julian Brown <[email protected]>
gcc/fortran/gfortran.h | 7 ++--
gcc/fortran/match.cc | 9 +++--
gcc/fortran/openmp.cc | 95 ++++++++++++++++++++++++++------------------------
gcc/fortran/st.cc | 2 +-
4 files changed, 61 insertions(+), 52 deletions(-)