diff options
author | Kwok Cheung Yeung <kcyeung@baylibre.com> | 2025-05-03 20:30:16 +0000 |
---|---|---|
committer | Sandra Loosemore <sloosemore@baylibre.com> | 2025-05-15 20:25:52 +0000 |
commit | 12341d4f4a89cf2ebe3f73037b83d33f75baff11 (patch) | |
tree | 37dc2ade055e5deb5a2106fc785defe887c686e0 | |
parent | 176d660537b2edc8007a4bed1eb936d881a46277 (diff) | |
download | gcc-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.h | 5 | ||||
-rw-r--r-- | gcc/fortran/match.cc | 4 | ||||
-rw-r--r-- | gcc/fortran/module.cc | 20 | ||||
-rw-r--r-- | gcc/fortran/openmp.cc | 32 | ||||
-rw-r--r-- | gcc/fortran/trans-openmp.cc | 14 |
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); |