Hi,

attached patch prevents generation of a token component in derived types, when
-fcoarray=single is used. Generating the token only wastes memory. It is never
even initialized nor accessed.

Regtests ok on x86_64-pc-linux-gnu / F41. Ok for mainline?

Regards,
        Andre
-- 
Andre Vehreschild * Email: vehre ad gmx dot de 
From a888d8952e8fa6f516fde22519fab33d60d3f0c4 Mon Sep 17 00:00:00 2001
From: Andre Vehreschild <ve...@gcc.gnu.org>
Date: Wed, 25 Jun 2025 12:27:04 +0200
Subject: [PATCH 2/3] Fortran: Fix wasting memory in coarray single mode.

gcc/fortran/ChangeLog:

	* resolve.cc (resolve_fl_derived0): Do not create the token
	component when not in coarray lib mode.
	* trans-types.cc: Do not access the token when not in coarray
	lib mode.
---
 gcc/fortran/resolve.cc     | 4 ++--
 gcc/fortran/trans-types.cc | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index 7089e4f171d..58f7aee29c3 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -16841,8 +16841,8 @@ resolve_fl_derived0 (gfc_symbol *sym)
     return false;
 
   /* Now add the caf token field, where needed.  */
-  if (flag_coarray != GFC_FCOARRAY_NONE
-      && !sym->attr.is_class && !sym->attr.vtype)
+  if (flag_coarray == GFC_FCOARRAY_LIB && !sym->attr.is_class
+      && !sym->attr.vtype)
     {
       for (c = sym->components; c; c = c->next)
 	if (!c->attr.dimension && !c->attr.codimension
diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc
index e15b1bb89f0..1754d982153 100644
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -3187,7 +3187,7 @@ copy_derived_types:
     for (c = derived->components; c; c = c->next)
       {
 	/* Do not add a caf_token field for class container components.  */
-	if ((codimen || coarray_flag) && !c->attr.dimension
+	if (codimen && coarray_flag && !c->attr.dimension
 	    && !c->attr.codimension && (c->attr.allocatable || c->attr.pointer)
 	    && !derived->attr.is_class)
 	  {
-- 
2.49.0

Reply via email to