On 6/5/26 03:49, Tobias Burnus wrote:
@Sandra - please fix the u3 issue before committing the 4/11 and this 5/11
patch, cf. below.
[snip]
I am not sure what's the best way - by possibly to do what Kwok
did in commit (here: OG14):
2afb6281a5a openmp, fortran: Move udm field of gfc_omp_namelist into
a new union
* * *
Thus: Could you do so? On mainline, it currently only affects:
gcc/fortran/gfortran.h: struct gfc_omp_namelist_udm udm;
gcc/fortran/match.cc: { } /* For now, u2.udm is not a pointer. */
gcc/fortran/openmp.cc: n->u2.udm.udm = udm;
As Kwok's change reduced to those three cases is trivial,
please just commit it.
Thanks for the speedy review. :-) I've pushed the attached patch,
along with parts 4 and 5.
-Sandra
From 98741d8fe7dc47f856ad99cf4369f671ea7903d7 Mon Sep 17 00:00:00 2001
From: Kwok Cheung Yeung <[email protected]>
Date: Sun, 7 Jun 2026 01:37:15 +0000
Subject: [PATCH 1/9] 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 reference to u2.udm to
u3.udm.
* openmp.cc (gfc_match_omp_clauses): Likewise.
Co-authored-by: Sandra Loosemore <[email protected]>
---
gcc/fortran/gfortran.h | 5 ++++-
gcc/fortran/match.cc | 2 +-
gcc/fortran/openmp.cc | 2 +-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index d8d8f3faae2..ef6239cd667 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1477,13 +1477,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 9172f46ed7c..98b59cc3379 100644
--- a/gcc/fortran/match.cc
+++ b/gcc/fortran/match.cc
@@ -6554,7 +6554,7 @@ gfc_free_omp_namelist (gfc_omp_namelist *name, enum gfc_omp_list_type list)
}
}
else if (free_mapper)
- { } /* For now, u2.udm is not a pointer. */
+ { } /* For now, u3.udm is not a pointer. */
else if (!free_mapper && name->u2.udr)
{
if (name->u2.udr->combiner)
diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc
index 476a6604892..73a96b05cb2 100644
--- a/gcc/fortran/openmp.cc
+++ b/gcc/fortran/openmp.cc
@@ -3856,7 +3856,7 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask,
= gfc_find_omp_udm (gfc_current_ns, mapper_id, ts);
if (udm)
{
- n->u2.udm.udm = udm;
+ n->u3.udm.udm = udm;
}
}
continue;
--
2.39.5