1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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
|