* [Patch, fortran] PR86242 [6/7/8/9 Regression] [OOP] ICE for derived type with allocatable component and proc-ptr component
@ 2018-06-30 20:49 Paul Richard Thomas
0 siblings, 0 replies; only message in thread
From: Paul Richard Thomas @ 2018-06-30 20:49 UTC (permalink / raw)
To: fortran, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 519 bytes --]
This patch is 'obvious' and I will commit to trunk tomorrow night if
there are no objections. The other branches will follow next week.
Bootstrapped and regtested on FC28/x86_64.
Cheers
Paul
2018-06-30 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82969
PR fortran/86242
* trans-array.c (structure_alloc_comps): Do not explicitly copy
procedure pointer components.
2018-06-30 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82969
PR fortran/86242
* gfortran.dg/proc_ptr_50.f90: New test.
[-- Attachment #2: submit.diff --]
[-- Type: text/x-patch, Size: 2456 bytes --]
Index: gcc/fortran/trans-array.c
===================================================================
*** gcc/fortran/trans-array.c (revision 261974)
--- gcc/fortran/trans-array.c (working copy)
*************** structure_alloc_comps (gfc_symbol * der_
*** 8842,8848 ****
break;
case COPY_ALLOC_COMP:
! if (c->attr.pointer)
continue;
/* We need source and destination components. */
--- 8842,8848 ----
break;
case COPY_ALLOC_COMP:
! if (c->attr.pointer || c->attr.proc_pointer)
continue;
/* We need source and destination components. */
Index: gcc/testsuite/gfortran.dg/proc_ptr_50.f90
===================================================================
*** gcc/testsuite/gfortran.dg/proc_ptr_50.f90 (nonexistent)
--- gcc/testsuite/gfortran.dg/proc_ptr_50.f90 (working copy)
***************
*** 0 ****
--- 1,68 ----
+ ! { dg-do compile }
+ !
+ ! Test the fix for PR86242, in which the procedure pointer in 'tester'
+ ! was being copied as if it were an allocatable class component.
+ !
+ ! Contributed by <cfd@mnet-mail.de>
+ !
+ module test
+
+ implicit none
+
+ private
+ public :: tester
+
+ type :: wrapper
+ integer(4) :: n
+ end type wrapper
+
+ type :: output
+ real(8) :: dummy
+ end type output
+
+ type :: tester
+ class(wrapper), allocatable :: wrap
+ procedure(proc1), pointer :: ptr => null()
+ end type tester
+
+ abstract interface
+ function proc1(self) result(uc)
+ import :: tester, output
+ class(tester), intent(in) :: self
+ class(output), allocatable :: uc
+ end function proc1
+ end interface
+
+ end module test
+
+ ! Comment #2 from Janus Weil <janus@gcc.gnu.org>
+ module test1
+
+ implicit none
+
+ type :: output
+ end type
+
+ type :: tester
+ integer, allocatable :: wrap
+ procedure(proc1), pointer, nopass :: ptr
+ end type
+
+ interface ! Originally abstract
+ function proc1() result(uc)
+ import :: output
+ class(output), allocatable :: uc ! Works if a pointer
+ end function
+ end interface
+
+ ! PR82969 from Gerhard Steinmetz <gscfq@t-online.de>
+ type t
+ real, allocatable :: x(:)
+ procedure(f), nopass, pointer :: g
+ end type
+ contains
+ function f() result(z)
+ class(t), allocatable :: z
+ end
+
+ end module test1
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2018-06-30 15:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-30 20:49 [Patch, fortran] PR86242 [6/7/8/9 Regression] [OOP] ICE for derived type with allocatable component and proc-ptr component Paul Richard Thomas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).