]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
openmp, fortran: Move udm field of gfc_omp_namelist into a new union
authorKwok Cheung Yeung <kcyeung@baylibre.com>
Thu, 12 Sep 2024 20:30:34 +0000 (21:30 +0100)
committerKwok Cheung Yeung <kcyeung@baylibre.com>
Thu, 17 Apr 2025 22:29:50 +0000 (23:29 +0100)
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.

gcc/fortran/ChangeLog.omp
gcc/fortran/gfortran.h
gcc/fortran/match.cc
gcc/fortran/module.cc
gcc/fortran/openmp.cc
gcc/fortran/trans-openmp.cc

index 969b2f306bc200871b0e67a566a063f27dca0cc4..2b9d095cfa33d1b4d173347deb5d02bb78b3b063 100644 (file)
@@ -1,3 +1,18 @@
+2025-04-17  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+
+       * 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.
+
 2025-03-21  Paul-Antoine Arras  <parras@baylibre.com>
 
        Backported from master:
index 40711fcec52f60c82da19f829486c1593ee10e3f..2cef5a1d913c23a761d2129971111f6dce950c5a 100644 (file)
@@ -1410,13 +1410,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;
 }
index 0f01e28dc692ebcc0817be8fbcf4fe231c30aae8..02f6468b6b7f7e7c61ffcdf03b3452914695175a 100644 (file)
@@ -5578,8 +5578,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)
index e5c14d76f9c30a3a4e11f3251ff9d5d035f990d8..32e17c92a0ef0b73465e04af94550dce84a1f00c 100644 (file)
@@ -5548,14 +5548,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 ();
@@ -6628,11 +6628,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 ();
index 7fe89b5da2379c4f24391d9e96343e6d646fd9d0..1e274ddf9f25cf0388a8ed99e941da33177f2bcb 100644 (file)
@@ -1474,8 +1474,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;
@@ -3770,8 +3770,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);
                        }
                    }
@@ -10189,7 +10189,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);
@@ -10198,13 +10198,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;
                      }
                  }
              }
@@ -14013,9 +14013,9 @@ gfc_omp_instantiate_mapper (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;
            }
@@ -14095,10 +14095,10 @@ gfc_omp_instantiate_mapper (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 (outlistp, new_clause,
                                                 outer_map_op, inner_udm, cd,
                                                 list);
@@ -14123,7 +14123,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;
 
@@ -14144,7 +14144,7 @@ gfc_omp_instantiate_mappers (gfc_code *code, gfc_omp_clauses *clauses,
              gcc_unreachable ();
            }
          clausep = gfc_omp_instantiate_mapper (clausep, clause, outer_map_op,
-                                               clause->u2.udm->udm, cd, list);
+                                               clause->u3.udm->udm, cd, list);
          *clausep = clause->next;
          invoked_mappers = true;
        }
index 534e5b769eaebfbcff8bb4fb52c2f3ebedfa0358..7c76360a56e4d6ce666d54214463bb6abcb5adf0 100644 (file)
@@ -6211,7 +6211,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 "
                                             "with mapper at %C");
@@ -6219,7 +6219,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
                                  goto finalize_map_clause;
                                }
 
-                             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 "
                                             "with mapper at %C");
@@ -6303,15 +6303,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);
@@ -10411,9 +10411,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);