blob: 35860182a31123c5c0f8ecd82ee118e34a1e1952 (
plain)
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
|
! { dg-do run }
! This tests the "virtual fix" for PR19561, where functions returning
! pointers to derived types were not generating correct code. This
! testcase is based on a simplified example in the PR discussion.
!
! Submitted by Paul Thomas pault@gcc.gnu.org
! Slightly extended by Tobias Schlüter
module mpoint
type :: mytype
integer :: i
end type mytype
contains
function get (a) result (b)
type (mytype), target :: a
type (mytype), pointer :: b
b => a
end function get
function get2 (a)
type (mytype), target :: a
type (mytype), pointer :: get2
get2 => a
end function get2
end module mpoint
program func_derived_2
use mpoint
type (mytype), target :: x
type (mytype), pointer :: y
x = mytype (42)
y => get (x)
if (y%i.ne.42) call abort ()
x = mytype (112)
y => get2 (x)
if (y%i.ne.112) call abort ()
end program func_derived_2
! { dg-final { cleanup-modules "mpoint" } }
|