diff mbox series

[Fortran,PR84244,v1] Fix ICE in recompute_tree_invariant_for_addr_expr, at tree.c:4535

Message ID 20240711160509.06263884@gmx.de
State New
Headers show
Series [Fortran,PR84244,v1] Fix ICE in recompute_tree_invariant_for_addr_expr, at tree.c:4535 | expand

Commit Message

Andre Vehreschild July 11, 2024, 2:05 p.m. UTC
Hi all,

the attached patch fixes a segfault in the compiler, where for pointer
components of a derived type the caf_token in the component was not
set, when the derived was previously used outside of a coarray.

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

Regards,
	Andre
--
Andre Vehreschild * Email: vehre ad gcc dot gnu dot org

Comments

Andre Vehreschild July 17, 2024, 1:11 p.m. UTC | #1
Hi all,

and the last ping.

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

Regards,
	Andre

On Thu, 11 Jul 2024 16:05:09 +0200
Andre Vehreschild <vehre@gmx.de> wrote:

> Hi all,
>
> the attached patch fixes a segfault in the compiler, where for pointer
> components of a derived type the caf_token in the component was not
> set, when the derived was previously used outside of a coarray.
>
> 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 Aug. 9, 2024, 2:27 p.m. UTC | #2
Ping!

On Wed, 17 Jul 2024 15:11:33 +0200
Andre Vehreschild <vehre@gmx.de> wrote:

> Hi all,
>
> and the last ping.
>
> Regtests ok on x86_64-pc-linux-gnu / Fedora 39. Ok for mainline?
>
> Regards,
> 	Andre
>
> On Thu, 11 Jul 2024 16:05:09 +0200
> Andre Vehreschild <vehre@gmx.de> wrote:
>
> > Hi all,
> >
> > the attached patch fixes a segfault in the compiler, where for pointer
> > components of a derived type the caf_token in the component was not
> > set, when the derived was previously used outside of a coarray.
> >
> > 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
Andre Vehreschild Aug. 16, 2024, 10:05 a.m. UTC | #3
Hi all,

any one for a review? This patch is over a month old and starts to rot.

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

- Andre

On Fri, 9 Aug 2024 16:27:42 +0200
Andre Vehreschild <vehre@gmx.de> wrote:

> Ping!
>
> On Wed, 17 Jul 2024 15:11:33 +0200
> Andre Vehreschild <vehre@gmx.de> wrote:
>
> > Hi all,
> >
> > and the last ping.
> >
> > Regtests ok on x86_64-pc-linux-gnu / Fedora 39. Ok for mainline?
> >
> > Regards,
> > 	Andre
> >
> > On Thu, 11 Jul 2024 16:05:09 +0200
> > Andre Vehreschild <vehre@gmx.de> wrote:
> >
> > > Hi all,
> > >
> > > the attached patch fixes a segfault in the compiler, where for pointer
> > > components of a derived type the caf_token in the component was not
> > > set, when the derived was previously used outside of a coarray.
> > >
> > > 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


--
Andre Vehreschild * Email: vehre ad gmx dot de
Harald Anlauf Aug. 16, 2024, 5:20 p.m. UTC | #4
Hi Andre,

Am 16.08.24 um 12:05 schrieb Andre Vehreschild:
> Hi all,
>
> any one for a review? This patch is over a month old and starts to rot.
>
> Regtests ok on x86_64-pc-linux-gnu / Fedora 39. Ok for mainline?

this is good to go.

Thanks for the patch!

Harald

> - Andre
>
> On Fri, 9 Aug 2024 16:27:42 +0200
> Andre Vehreschild <vehre@gmx.de> wrote:
>
>> Ping!
>>
>> On Wed, 17 Jul 2024 15:11:33 +0200
>> Andre Vehreschild <vehre@gmx.de> wrote:
>>
>>> Hi all,
>>>
>>> and the last ping.
>>>
>>> Regtests ok on x86_64-pc-linux-gnu / Fedora 39. Ok for mainline?
>>>
>>> Regards,
>>> 	Andre
>>>
>>> On Thu, 11 Jul 2024 16:05:09 +0200
>>> Andre Vehreschild <vehre@gmx.de> wrote:
>>>
>>>> Hi all,
>>>>
>>>> the attached patch fixes a segfault in the compiler, where for pointer
>>>> components of a derived type the caf_token in the component was not
>>>> set, when the derived was previously used outside of a coarray.
>>>>
>>>> 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
>
>
> --
> Andre Vehreschild * Email: vehre ad gmx dot de
Andre Vehreschild Aug. 19, 2024, 7:33 a.m. UTC | #5
Hi Harald,

thanks for the review. Committed as: gcc-15-3014-g661acde60ef

Regards,
	Andre

On Fri, 16 Aug 2024 19:20:58 +0200
Harald Anlauf <anlauf@gmx.de> wrote:

> Hi Andre,
>
> Am 16.08.24 um 12:05 schrieb Andre Vehreschild:
> > Hi all,
> >
> > any one for a review? This patch is over a month old and starts to rot.
> >
> > Regtests ok on x86_64-pc-linux-gnu / Fedora 39. Ok for mainline?
>
> this is good to go.
>
> Thanks for the patch!
>
> Harald
>
> > - Andre
> >
> > On Fri, 9 Aug 2024 16:27:42 +0200
> > Andre Vehreschild <vehre@gmx.de> wrote:
> >
> >> Ping!
> >>
> >> On Wed, 17 Jul 2024 15:11:33 +0200
> >> Andre Vehreschild <vehre@gmx.de> wrote:
> >>
> >>> Hi all,
> >>>
> >>> and the last ping.
> >>>
> >>> Regtests ok on x86_64-pc-linux-gnu / Fedora 39. Ok for mainline?
> >>>
> >>> Regards,
> >>> 	Andre
> >>>
> >>> On Thu, 11 Jul 2024 16:05:09 +0200
> >>> Andre Vehreschild <vehre@gmx.de> wrote:
> >>>
> >>>> Hi all,
> >>>>
> >>>> the attached patch fixes a segfault in the compiler, where for pointer
> >>>> components of a derived type the caf_token in the component was not
> >>>> set, when the derived was previously used outside of a coarray.
> >>>>
> >>>> 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
> >
> >
> > --
> > Andre Vehreschild * Email: vehre ad gmx dot de
>


--
Andre Vehreschild * Email: vehre ad gmx dot de
diff mbox series

Patch

From 88f209316a980fbe78423d6aba747bb6b7fd404f Mon Sep 17 00:00:00 2001
From: Andre Vehreschild <vehre@gcc.gnu.org>
Date: Thu, 11 Jul 2024 15:44:56 +0200
Subject: [PATCH] [Fortran] Fix ICE in recompute_tree_invariant_for_addr_expr,
 at tree.c:4535 [PR84244]

Declaring an unused function with a derived type having a pointer
component and using that derived type as a coarray, lead the compiler to
ICE because the caf_token for the pointer was not linked into the
component correctly.

	PR fortran/84244

gcc/fortran/ChangeLog:

	* trans-types.cc (gfc_get_derived_type): When a caf_sub_token is
	generated for a component, link it to the component it is
	generated for (the previous one).

gcc/testsuite/ChangeLog:

	* gfortran.dg/coarray/ptr_comp_5.f08: New test.
---
 gcc/fortran/trans-types.cc                    |  6 +++++-
 .../gfortran.dg/coarray/ptr_comp_5.f08        | 19 +++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gfortran.dg/coarray/ptr_comp_5.f08

diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc
index c76cdca4eae..83c0708ccbd 100644
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -2647,7 +2647,7 @@  gfc_get_derived_type (gfc_symbol * derived, int codimen)
   tree *chain = NULL;
   bool got_canonical = false;
   bool unlimited_entity = false;
-  gfc_component *c;
+  gfc_component *c, *last_c = nullptr;
   gfc_namespace *ns;
   tree tmp;
   bool coarray_flag, class_coarray_flag;
@@ -2947,10 +2947,14 @@  gfc_get_derived_type (gfc_symbol * derived, int codimen)
 	 types.  */
       if (class_coarray_flag || !c->backend_decl)
 	c->backend_decl = field;
+      if (c->attr.caf_token && last_c)
+	last_c->caf_token = field;

       if (c->attr.pointer && (c->attr.dimension || c->attr.codimension)
 	  && !(c->ts.type == BT_DERIVED && strcmp (c->name, "_data") == 0))
 	GFC_DECL_PTR_ARRAY_P (c->backend_decl) = 1;
+
+      last_c = c;
     }

   /* Now lay out the derived type, including the fields.  */
diff --git a/gcc/testsuite/gfortran.dg/coarray/ptr_comp_5.f08 b/gcc/testsuite/gfortran.dg/coarray/ptr_comp_5.f08
new file mode 100644
index 00000000000..ed3a8db13fa
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray/ptr_comp_5.f08
@@ -0,0 +1,19 @@ 
+! { dg-do compile }
+
+! Check PR84244 does not ICE anymore.
+
+program ptr_comp_5
+  integer, target :: dest = 42
+  type t
+    integer, pointer :: p
+  end type
+  type(t) :: o[*]
+
+  o%p => dest
+contains
+  ! This unused routine is crucial for the ICE.
+  function f(x)
+    type(t), intent(in) ::x
+  end function
+end program
+
--
2.45.2