]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/82969 (ICE in gfc_class_vptr_get, at fortran/trans-expr.c:211)
authorPaul Thomas <pault@gcc.gnu.org>
Tue, 3 Jul 2018 10:45:52 +0000 (10:45 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Tue, 3 Jul 2018 10:45:52 +0000 (10:45 +0000)
2018-07-03  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-07-03  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82969
PR fortran/86242
* gfortran.dg/proc_ptr_50.f90: New test.

From-SVN: r262339

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/proc_ptr_50.f90 [new file with mode: 0644]

index 695caeb0c97a5e1b7f46490a7b3fdb5fdeaf8d58..ce30a70c4c45492064e899f630db6263d7420199 100644 (file)
@@ -1,3 +1,10 @@
+2018-07-03  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-25  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index 0842a39db1aaa73f1fb9f756a621f93b421b59c1..a719cb57f910008600d273a09397efd582a0409e 100644 (file)
@@ -8240,7 +8240,7 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
          break;
 
        case COPY_ALLOC_COMP:
-         if (c->attr.pointer)
+         if (c->attr.pointer || c->attr.proc_pointer)
            continue;
 
          /* We need source and destination components.  */
index 1cb8d92ecf9c26a767bea85981c684214291e9c2..cfc0e599c07d1a9d0cc3ea29482abde89560610f 100644 (file)
@@ -1,3 +1,9 @@
+2018-07-03  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/82969
+       PR fortran/86242
+       * gfortran.dg/proc_ptr_50.f90: New test.
+
 2018-06-26  Kelvin Nilsen  <kelvin@gcc.gnu.org>
 
        Backported from mainline
        * gcc.target/i386/pr80819-2.c: New test.
 
        2017-11-24  Jakub Jelinek  <jakub@redhat.com>
+
        PR sanitizer/83014
        * gcc.dg/ubsan/pr83014.c: New test.
 
        * gcc.dg/torture/pr85989.c: New test.
 
 2018-06-21  Richard Biener  <rguenther@suse.de>
+
        Backport from mainline
        2017-09-06  Richard Biener  <rguenther@suse.de>
 
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_50.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_50.f90
new file mode 100644 (file)
index 0000000..14f0c0a
--- /dev/null
@@ -0,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