summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/proc_ptr_comp_5.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/proc_ptr_comp_5.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_comp_5.f9047
1 files changed, 47 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_5.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_5.f90
new file mode 100644
index 000000000..216cb4e9b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_5.f90
@@ -0,0 +1,47 @@
+! { dg-do run }
+!
+! PR39630: Fortran 2003: Procedure pointer components.
+!
+! Nested types / double component references.
+!
+! Contributed by Janus Weil <janus@gcc.gnu.org>
+
+abstract interface
+ subroutine as
+ end subroutine
+ integer function af()
+ end function
+end interface
+
+type :: t1
+ procedure(as), pointer, nopass :: s
+ procedure(af), pointer, nopass :: f
+end type
+
+type :: t2
+ type(t1) :: c
+end type
+
+type(t2) :: x
+integer :: j = 0
+
+x%c%s => is
+call x%c%s
+if (j/=5) call abort
+
+x%c%f => if
+j=x%c%f()
+if (j/=42) call abort
+
+contains
+
+subroutine is
+ j = 5
+end subroutine
+
+integer function if()
+ if = 42
+end function
+
+end
+