Janus Weil - Re: [Patch, Fortran, F03] PR 40870: include formal args in backend_dec (original) (raw)

This is the mail archive of the fortran@gcc.gnu.orgmailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch, Fortran, F03] PR 40870: include formal args in backend_decl of PPCs


My suggestion would be to commit the patch as attached,

here ...

Index: gcc/testsuite/gfortran.dg/proc_ptr_comp_13.f90

--- gcc/testsuite/gfortran.dg/proc_ptr_comp_13.f90 (revision 150822) +++ gcc/testsuite/gfortran.dg/proc_ptr_comp_13.f90 (working copy) @@ -1,6 +1,7 @@ ! { dg-do run } ! -! PR 40882: [F03] infinite recursion in gfc_get_derived_type with PPC returning derived type +! PR 40882: [F03] infinite recursion in gfc_get_derived_type with PPC returning derived type. +! At the same time, check that a formal argument does not cause infinite recursion (PR 40870). ! ! Contributed by Janus Weil janus@gcc.gnu.org @@ -9,6 +10,7 @@ implicit none type :: t integer :: data procedure(foo), pointer, nopass :: ppc + procedure(type(t)), pointer, nopass :: ppc2 end type type(t) :: o,o2 @@ -16,7 +18,7 @@ type(t) :: o,o2 o%data = 1 o%ppc => foo -o2 = o%ppc() +o2 = o%ppc(o) if (o%data /= 1) call abort() if (o2%data /= 5) call abort() @@ -25,9 +27,9 @@ if (associated(o2%ppc)) call abort() contains - function foo() - type(t) :: foo - foo%data = 5 + function foo(arg) + type(t) :: foo, arg + foo%data = arg%data * 5 foo%ppc => NULL() end function Index: gcc/fortran/trans-types.c

--- gcc/fortran/trans-types.c (revision 150822) +++ gcc/fortran/trans-types.c (working copy) @@ -1895,16 +1895,18 @@ tree gfc_get_ppc_type (gfc_component* c) { tree t;

else t = void_type_node;

@@ -2012,8 +2014,11 @@ gfc_get_derived_type (gfc_symbol * deriv components' backend_decl may have not been built. */ if (derived->backend_decl) {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]