Hi all,
I figured this patch has not been okay'ed yet. Anyone in for a review?
Regtests ok on x86_64-pc-linux-gnu / F39. Ok for trunk?
Regards,
Andre
On Thu, 26 Sep 2024 16:02:21 +0200
Andre Vehreschild <[email protected]> wrote:
> Hi all,
>
> attached patch fixes an ICE when a derived type was used as a coarray in a
> submodule. The fix is to not allow caf-token creation for vtypes. Again this,
> like the previous patch on pr80235, feels like fixing the symptom and not the
> cause. But I can't find where it goes wrong. So if some one has more insight,
> let me know, please.
>
> Besides that regtests ok on x86_64-pc-linux-gnu / Fedora 39. Ok for mainline?
>
> Regards,
> Andre
> --
> Andre Vehreschild * Email: vehre ad gmx dot de
--
Andre Vehreschild * Email: vehre ad gmx dot de
From 4fd053badaa08e1c21109a23fed5669383be1094 Mon Sep 17 00:00:00 2001
From: Andre Vehreschild <[email protected]>
Date: Wed, 25 Sep 2024 14:19:38 +0200
Subject: [PATCH] [Fortran] Fix ICE when extended coarray is used in submodule
[PR93158]
gcc/fortran/ChangeLog:
PR fortran/93158
* trans-types.cc: Prevent adding caf-tokens to vtypes.
gcc/testsuite/ChangeLog:
* gfortran.dg/coarray/add_sources/submodule_2_mod.f90: New test.
* gfortran.dg/coarray/submodule_2.f90: New test.
---
gcc/fortran/trans-types.cc | 36 +++++++++----------
.../coarray/add_sources/submodule_2_mod.f90 | 14 ++++++++
.../gfortran.dg/coarray/submodule_2.f90 | 14 ++++++++
3 files changed, 46 insertions(+), 18 deletions(-)
create mode 100644 gcc/testsuite/gfortran.dg/coarray/add_sources/submodule_2_mod.f90
create mode 100644 gcc/testsuite/gfortran.dg/coarray/submodule_2.f90
diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc
index e596a362c02..aa181adcb98 100644
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -3162,24 +3162,24 @@ gfc_get_derived_type (gfc_symbol * derived, int codimen)
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 && !c->attr.codimension
- && (c->attr.allocatable || c->attr.pointer)
- && !derived->attr.is_class)
- {
- /* Provide sufficient space to hold "_caf_symbol". */
- char caf_name[GFC_MAX_SYMBOL_LEN + 6];
- gfc_component *token;
- snprintf (caf_name, sizeof (caf_name), "_caf_%s", c->name);
- token = gfc_find_component (derived, caf_name, true, true, NULL);
- gcc_assert (token);
- c->caf_token = token->backend_decl;
- suppress_warning (c->caf_token);
- }
- }
+ if (!derived->attr.vtype)
+ 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
+ && !c->attr.codimension && (c->attr.allocatable || c->attr.pointer)
+ && !derived->attr.is_class)
+ {
+ /* Provide sufficient space to hold "_caf_symbol". */
+ char caf_name[GFC_MAX_SYMBOL_LEN + 6];
+ gfc_component *token;
+ snprintf (caf_name, sizeof (caf_name), "_caf_%s", c->name);
+ token = gfc_find_component (derived, caf_name, true, true, NULL);
+ gcc_assert (token);
+ c->caf_token = token->backend_decl;
+ suppress_warning (c->caf_token);
+ }
+ }
for (gfc_symbol *dt = gfc_derived_types; dt; dt = dt->dt_next)
{
diff --git a/gcc/testsuite/gfortran.dg/coarray/add_sources/submodule_2_mod.f90 b/gcc/testsuite/gfortran.dg/coarray/add_sources/submodule_2_mod.f90
new file mode 100644
index 00000000000..b0d79565fe5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray/add_sources/submodule_2_mod.f90
@@ -0,0 +1,14 @@
+module surfaces_interface
+ type package
+ end type
+
+ type surfaces
+ class(package), allocatable :: halo_data
+ end type
+
+ interface
+ module subroutine set_halo_data()
+ end subroutine
+ end interface
+end module
+
diff --git a/gcc/testsuite/gfortran.dg/coarray/submodule_2.f90 b/gcc/testsuite/gfortran.dg/coarray/submodule_2.f90
new file mode 100644
index 00000000000..663dac67d67
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray/submodule_2.f90
@@ -0,0 +1,14 @@
+!{ dg-do compile }
+!{ dg-compile-aux-modules add_sources/submodule_2_mod.f90 }
+
+! Contributed by Damian Rouson <[email protected]>
+! Check PR93158 is fixed.
+
+submodule(surfaces_interface) surfaces_implementation
+ type(surfaces) singleton[*]
+contains
+ module procedure set_halo_data
+ stop 0
+ end procedure
+end submodule
+
--
2.47.0