summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/pointer_assign_9.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/pointer_assign_9.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/pointer_assign_9.f9036
1 files changed, 36 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/pointer_assign_9.f90 b/gcc/testsuite/gfortran.dg/pointer_assign_9.f90
new file mode 100644
index 00000000000..7f8152aae6b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pointer_assign_9.f90
@@ -0,0 +1,36 @@
+! { dg-do run }
+!
+! PR fortran/57530
+!
+!
+! TYPE => CLASS pointer assignment for functions
+!
+module m
+ implicit none
+ type t
+ integer :: ii = 55
+ end type t
+contains
+ function f1()
+ class(t), pointer :: f1
+ allocate (f1)
+ f1%ii = 123
+ end function f1
+ function f2()
+ class(t), pointer :: f2(:)
+ allocate (f2(3))
+ f2(:)%ii = [-11,-22,-33]
+ end function f2
+end module m
+
+program test
+ use m
+ implicit none
+ type(t), pointer :: p1, p2(:),p3(:,:)
+ p1 => f1()
+ if (p1%ii /= 123) call abort ()
+ p2 => f2()
+ if (any (p2%ii /= [-11,-22,-33])) call abort ()
+ p3(2:2,1:3) => f2()
+ if (any (p3(2,:)%ii /= [-11,-22,-33])) call abort ()
+end program test