aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKwok Cheung Yeung <kcyeung@baylibre.com>2025-05-03 20:30:16 +0000
committerSandra Loosemore <sloosemore@baylibre.com>2025-05-15 20:25:52 +0000
commit12341d4f4a89cf2ebe3f73037b83d33f75baff11 (patch)
tree37dc2ade055e5deb5a2106fc785defe887c686e0
parent176d660537b2edc8007a4bed1eb936d881a46277 (diff)
downloadgcc-12341d4f4a89cf2ebe3f73037b83d33f75baff11.zip
gcc-12341d4f4a89cf2ebe3f73037b83d33f75baff11.tar.gz
gcc-12341d4f4a89cf2ebe3f73037b83d33f75baff11.tar.bz2
openmp, fortran: Move udm field of gfc_omp_namelist into a new union
This patch moves u2.udm into u3.udm. This is necessary to avoid clashes when mappers are used together with iterators, which uses u2.ns. gcc/fortran/ * gfortran.h (struct gfc_omp_namelist): Move udm field into a new union u3. * match.cc (gfc_free_omp_namelist): Change references to u2.udm to u3.udm. * module.cc (load_omp_udms): Likewise. (write_omp_udm): Likewise. * openmp.cc (gfc_match_motion_var_list): Likewise. (gfc_match_omp_clauses): Likewise. (resolve_omp_clauses): Likewise. (gfc_omp_instantiate_mapper): Likewise. * trans-openmp.cc (gfc_trans_omp_clauses): Likewise. (gfc_find_nested_mappers): Likewise.
-rw-r--r--gcc/fortran/gfortran.h5
-rw-r--r--gcc/fortran/match.cc4
-rw-r--r--gcc/fortran/module.cc20
-rw-r--r--gcc/fortran/openmp.cc32
-rw-r--r--gcc/fortran/trans-openmp.cc14
5 files changed, 39 insertions, 36 deletions
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 67cf255..c9cf072 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1437,13 +1437,16 @@ typedef struct gfc_omp_namelist
union
{
struct gfc_omp_namelist_udr *udr;
- struct gfc_omp_namelist_udm *udm;
gfc_namespace *ns;
gfc_expr *allocator;
struct gfc_symbol *traits_sym;
struct gfc_omp_namelist *duplicate_of;
char *init_interop;
} u2;
+ union
+ {
+ struct gfc_omp_namelist_udm *udm;
+ } u3;
struct gfc_omp_namelist *next;
locus where;
}
diff --git a/gcc/fortran/match.cc b/gcc/fortran/match.cc
index d1648fd..269e152 100644
--- a/gcc/fortran/match.cc
+++ b/gcc/fortran/match.cc
@@ -5920,8 +5920,8 @@ gfc_free_omp_namelist (gfc_omp_namelist *name, int list)
free (name->u2.init_interop);
}
}
- else if (free_mapper && name->u2.udm)
- free (name->u2.udm);
+ else if (free_mapper && name->u3.udm)
+ free (name->u3.udm);
else if (!free_mapper && name->u2.udr)
{
if (name->u2.udr->combiner)
diff --git a/gcc/fortran/module.cc b/gcc/fortran/module.cc
index bf43ed5..1389dee 100644
--- a/gcc/fortran/module.cc
+++ b/gcc/fortran/module.cc
@@ -5561,14 +5561,14 @@ load_omp_udms (void)
if (peek_atom () != ATOM_RPAREN)
{
- n->u2.udm = gfc_get_omp_namelist_udm ();
- mio_pool_string (&n->u2.udm->mapper_id);
+ n->u3.udm = gfc_get_omp_namelist_udm ();
+ mio_pool_string (&n->u3.udm->mapper_id);
- if (n->u2.udm->mapper_id == NULL)
- n->u2.udm->mapper_id = gfc_get_string ("%s", "");
+ if (n->u3.udm->mapper_id == NULL)
+ n->u3.udm->mapper_id = gfc_get_string ("%s", "");
- n->u2.udm->multiple_elems_p = mio_name (0, omp_map_cardinality);
- mio_pointer_ref (&n->u2.udm->udm);
+ n->u3.udm->multiple_elems_p = mio_name (0, omp_map_cardinality);
+ mio_pointer_ref (&n->u3.udm->udm);
}
mio_rparen ();
@@ -6641,11 +6641,11 @@ write_omp_udm (gfc_omp_udm *udm)
mio_lparen ();
- if (n->u2.udm)
+ if (n->u3.udm)
{
- mio_pool_string (&n->u2.udm->mapper_id);
- mio_name (n->u2.udm->multiple_elems_p, omp_map_cardinality);
- mio_pointer_ref (&n->u2.udm->udm);
+ mio_pool_string (&n->u3.udm->mapper_id);
+ mio_name (n->u3.udm->multiple_elems_p, omp_map_cardinality);
+ mio_pointer_ref (&n->u3.udm->udm);
}
mio_rparen ();
diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc
index 563ba57..a658172 100644
--- a/gcc/fortran/openmp.cc
+++ b/gcc/fortran/openmp.cc
@@ -1484,8 +1484,8 @@ gfc_match_motion_var_list (const char *str, gfc_omp_namelist **list,
if (mapper_id[0] != '\0')
{
- n->u2.udm = gfc_get_omp_namelist_udm ();
- n->u2.udm->mapper_id = gfc_get_string ("%s", mapper_id);
+ n->u3.udm = gfc_get_omp_namelist_udm ();
+ n->u3.udm->mapper_id = gfc_get_string ("%s", mapper_id);
}
}
return MATCH_YES;
@@ -3780,8 +3780,8 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask,
n->u.map.op = map_op;
if (mapper_id[0] != '\0')
{
- n->u2.udm = gfc_get_omp_namelist_udm ();
- n->u2.udm->mapper_id
+ n->u3.udm = gfc_get_omp_namelist_udm ();
+ n->u3.udm->mapper_id
= gfc_get_string ("%s", mapper_id);
}
}
@@ -10234,7 +10234,7 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses,
ts = &n->sym->ts;
const char *mapper_id
- = n->u2.udm ? n->u2.udm->mapper_id : "";
+ = n->u3.udm ? n->u3.udm->mapper_id : "";
gfc_omp_udm *udm = gfc_find_omp_udm (gfc_current_ns,
mapper_id, ts);
@@ -10243,13 +10243,13 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses,
mapper_id, &n->where);
else if (udm)
{
- if (!n->u2.udm)
+ if (!n->u3.udm)
{
- n->u2.udm = gfc_get_omp_namelist_udm ();
+ n->u3.udm = gfc_get_omp_namelist_udm ();
gcc_assert (mapper_id[0] == '\0');
- n->u2.udm->mapper_id = mapper_id;
+ n->u3.udm->mapper_id = mapper_id;
}
- n->u2.udm->udm = udm;
+ n->u3.udm->udm = udm;
}
}
}
@@ -14097,9 +14097,9 @@ gfc_omp_instantiate_mapper (gfc_code *code, gfc_omp_namelist **outlistp,
else
multiple_elems_p = true;
- if (multiple_elems_p && clause->u2.udm)
+ if (multiple_elems_p && clause->u3.udm)
{
- clause->u2.udm->multiple_elems_p = true;
+ clause->u3.udm->multiple_elems_p = true;
*outlistp = clause;
return &(*outlistp)->next;
}
@@ -14181,10 +14181,10 @@ gfc_omp_instantiate_mapper (gfc_code *code, gfc_omp_namelist **outlistp,
new_clause->where = clause->where;
- if (mapper_clause->u2.udm
- && mapper_clause->u2.udm->udm != udm)
+ if (mapper_clause->u3.udm
+ && mapper_clause->u3.udm->udm != udm)
{
- gfc_omp_udm *inner_udm = mapper_clause->u2.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);
@@ -14214,7 +14214,7 @@ gfc_omp_instantiate_mappers (gfc_code *code, gfc_omp_clauses *clauses,
for (; clause; clause = *clausep)
{
- if (clause->u2.udm)
+ if (clause->u3.udm)
{
gfc_omp_map_op outer_map_op;
@@ -14236,7 +14236,7 @@ gfc_omp_instantiate_mappers (gfc_code *code, gfc_omp_clauses *clauses,
}
clausep = gfc_omp_instantiate_mapper (code, clausep, clause,
outer_map_op,
- clause->u2.udm->udm, cd, list);
+ clause->u3.udm->udm, cd, list);
*clausep = clause->next;
invoked_mappers = true;
}
diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc
index cec01475..3678f79 100644
--- a/gcc/fortran/trans-openmp.cc
+++ b/gcc/fortran/trans-openmp.cc
@@ -5579,7 +5579,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
}
if (drop_mapping)
continue;
- if (n->u2.udm && n->u2.udm->multiple_elems_p)
+ if (n->u3.udm && n->u3.udm->multiple_elems_p)
{
gfc_error ("cannot map non-unit size array "
@@ -5663,15 +5663,15 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
else
container = cl;
- if (n->u2.udm
- && n->u2.udm->udm->mapper_id
- && n->u2.udm->udm->mapper_id[0] != '\0')
+ if (n->u3.udm
+ && n->u3.udm->udm->mapper_id
+ && n->u3.udm->udm->mapper_id[0] != '\0')
{
tree push = build_omp_clause (input_location,
OMP_CLAUSE_MAP);
OMP_CLAUSE_SET_MAP_KIND (push, GOMP_MAP_PUSH_MAPPER_NAME);
OMP_CLAUSE_DECL (push)
- = get_identifier (n->u2.udm->udm->mapper_id);
+ = get_identifier (n->u3.udm->udm->mapper_id);
tree pop = build_omp_clause (input_location,
OMP_CLAUSE_MAP);
OMP_CLAUSE_SET_MAP_KIND (pop, GOMP_MAP_POP_MAPPER_NAME);
@@ -9772,9 +9772,9 @@ gfc_find_nested_mappers (omp_mapper_list<gfc_typespec *> *mlist,
for (; ns; ns = ns->next)
{
- if (ns->u2.udm && ns->u2.udm->udm != udm)
+ if (ns->u3.udm && ns->u3.udm->udm != udm)
{
- gfc_omp_udm *nested_udm = ns->u2.udm->udm;
+ gfc_omp_udm *nested_udm = ns->u3.udm->udm;
tree mapper_id
= (nested_udm->mapper_id ? get_identifier (nested_udm->mapper_id)
: NULL_TREE);