aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKwok Cheung Yeung <kcyeung@baylibre.com>2025-05-03 20:42:46 +0000
committerSandra Loosemore <sloosemore@baylibre.com>2025-05-15 20:25:53 +0000
commit6e66dfea0a5cbad897100a1841c8599d5812fab7 (patch)
tree73e9b818dde6cd994260cf3ac9367f320f2ab0d1 /gcc
parent752ef8f4f5ddf9a3372e6d5dc08df6aa05a60ea3 (diff)
downloadgcc-6e66dfea0a5cbad897100a1841c8599d5812fab7.zip
gcc-6e66dfea0a5cbad897100a1841c8599d5812fab7.tar.gz
gcc-6e66dfea0a5cbad897100a1841c8599d5812fab7.tar.bz2
openmp, Fortran: Add support using iterators with custom mappers in Fortran
gcc/fortran/ * openmp.cc (gfc_omp_instantiate_mapper): Add argument for namespace. Apply namespace to new clauses. Propagate namespace to nested mappers. (gfc_omp_instantiate_mappers): Pass namespace of clause to clauses generated by mappers. libgomp/ * testsuite/libgomp.fortran/mapper-iterators-1.f90: New test. * testsuite/libgomp.fortran/mapper-iterators-2.f90: New test. * testsuite/libgomp.fortran/mapper-iterators-3.f90: New test. * testsuite/libgomp.fortran/mapper-iterators-4.f90: New test. Co-authored-by: Andrew Stubbs <ams@baylibre.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/openmp.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc
index d2f19db..c202045 100644
--- a/gcc/fortran/openmp.cc
+++ b/gcc/fortran/openmp.cc
@@ -14110,6 +14110,7 @@ static gfc_omp_namelist **
gfc_omp_instantiate_mapper (gfc_code *code, gfc_omp_namelist **outlistp,
gfc_omp_namelist *clause,
gfc_omp_map_op outer_map_op, gfc_omp_udm *udm,
+ gfc_namespace *ns,
toc_directive cd, int list)
{
/* Here "sym" and "expr" describe the clause as written, to be substituted
@@ -14227,14 +14228,15 @@ gfc_omp_instantiate_mapper (gfc_code *code, gfc_omp_namelist **outlistp,
new_clause->u.map.op = new_kind;
new_clause->where = clause->where;
+ new_clause->u2.ns = ns;
if (mapper_clause->u3.udm
&& mapper_clause->u3.udm->udm != udm)
{
gfc_omp_udm *inner_udm = mapper_clause->u3.udm->udm;
outlistp = gfc_omp_instantiate_mapper (code, outlistp, new_clause,
- outer_map_op, inner_udm, cd,
- list);
+ outer_map_op, inner_udm, ns,
+ cd, list);
}
else
{
@@ -14283,7 +14285,8 @@ gfc_omp_instantiate_mappers (gfc_code *code, gfc_omp_clauses *clauses,
}
clausep = gfc_omp_instantiate_mapper (code, clausep, clause,
outer_map_op,
- clause->u3.udm->udm, cd, list);
+ clause->u3.udm->udm,
+ clause->u2.ns, cd, list);
*clausep = clause->next;
invoked_mappers = true;
}