annotate gcc/testsuite/gfortran.dg/unlimited_polymorphic_19.f90 @ 144:8f4e72ab4e11

fix segmentation fault caused by nothing next cur_op to end
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Sun, 23 Dec 2018 21:23:56 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! { dg-do run }
kono
parents:
diff changeset
2 !
kono
parents:
diff changeset
3 ! PR 64209: [OOP] runtime segfault with CLASS(*), INTENT(OUT) dummy argument
kono
parents:
diff changeset
4 !
kono
parents:
diff changeset
5 ! Contributed by Miha Polajnar <polajnar.miha@gmail.com>
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 MODULE m
kono
parents:
diff changeset
8 IMPLICIT NONE
kono
parents:
diff changeset
9 TYPE :: t
kono
parents:
diff changeset
10 CLASS(*), ALLOCATABLE :: x(:)
kono
parents:
diff changeset
11 CONTAINS
kono
parents:
diff changeset
12 PROCEDURE :: copy
kono
parents:
diff changeset
13 END TYPE t
kono
parents:
diff changeset
14 INTERFACE
kono
parents:
diff changeset
15 SUBROUTINE copy_proc_intr(a,b)
kono
parents:
diff changeset
16 CLASS(*), INTENT(IN) :: a
kono
parents:
diff changeset
17 CLASS(*), INTENT(OUT) :: b
kono
parents:
diff changeset
18 END SUBROUTINE copy_proc_intr
kono
parents:
diff changeset
19 END INTERFACE
kono
parents:
diff changeset
20 CONTAINS
kono
parents:
diff changeset
21 SUBROUTINE copy(self,cp,a)
kono
parents:
diff changeset
22 CLASS(t), INTENT(IN) :: self
kono
parents:
diff changeset
23 PROCEDURE(copy_proc_intr) :: cp
kono
parents:
diff changeset
24 CLASS(*), INTENT(OUT) :: a(:)
kono
parents:
diff changeset
25 INTEGER :: i
kono
parents:
diff changeset
26 IF( .not.same_type_as(self%x(1),a(1)) ) STOP -1
kono
parents:
diff changeset
27 DO i = 1, size(self%x)
kono
parents:
diff changeset
28 CALL cp(self%x(i),a(i))
kono
parents:
diff changeset
29 END DO
kono
parents:
diff changeset
30 END SUBROUTINE copy
kono
parents:
diff changeset
31 END MODULE m
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 PROGRAM main
kono
parents:
diff changeset
34 USE m
kono
parents:
diff changeset
35 IMPLICIT NONE
kono
parents:
diff changeset
36 INTEGER, PARAMETER :: n = 3, x(n) = [ 1, 2, 3 ]
kono
parents:
diff changeset
37 INTEGER :: copy_x(n)
kono
parents:
diff changeset
38 TYPE(t) :: test
kono
parents:
diff changeset
39 ALLOCATE(test%x(n),SOURCE=x)
kono
parents:
diff changeset
40 CALL test%copy(copy_int,copy_x)
kono
parents:
diff changeset
41 ! PRINT '(*(I0,:2X))', copy_x
kono
parents:
diff changeset
42 CONTAINS
kono
parents:
diff changeset
43 SUBROUTINE copy_int(a,b)
kono
parents:
diff changeset
44 CLASS(*), INTENT(IN) :: a
kono
parents:
diff changeset
45 CLASS(*), INTENT(OUT) :: b
kono
parents:
diff changeset
46 SELECT TYPE(a); TYPE IS(integer)
kono
parents:
diff changeset
47 SELECT TYPE(b); TYPE IS(integer)
kono
parents:
diff changeset
48 b = a
kono
parents:
diff changeset
49 END SELECT; END SELECT
kono
parents:
diff changeset
50 END SUBROUTINE copy_int
kono
parents:
diff changeset
51 END PROGRAM main