annotate gcc/testsuite/gfortran.dg/move_alloc_8.f90 @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! { dg-do compile }
kono
parents:
diff changeset
2 !
kono
parents:
diff changeset
3 ! PR fortran/50684
kono
parents:
diff changeset
4 !
kono
parents:
diff changeset
5 ! Module "bug" contributed by Martin Steghöfer.
kono
parents:
diff changeset
6 !
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 MODULE BUG
kono
parents:
diff changeset
9 TYPE MY_TYPE
kono
parents:
diff changeset
10 INTEGER, ALLOCATABLE :: VALUE
kono
parents:
diff changeset
11 END TYPE
kono
parents:
diff changeset
12 CONTAINS
kono
parents:
diff changeset
13 SUBROUTINE POINTER_INTENT_IN_BUG_WORKING(POINTER_INTENT_IN_VARIABLE)
kono
parents:
diff changeset
14 TYPE(MY_TYPE), POINTER, INTENT(IN) :: POINTER_INTENT_IN_VARIABLE
kono
parents:
diff changeset
15 TYPE(MY_TYPE), POINTER :: POINTER_VARIABLE_LOCAL
kono
parents:
diff changeset
16 INTEGER, ALLOCATABLE :: LOCAL_VALUE
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 POINTER_VARIABLE_LOCAL=>POINTER_INTENT_IN_VARIABLE
kono
parents:
diff changeset
19 CALL MOVE_ALLOC(POINTER_VARIABLE_LOCAL%VALUE, LOCAL_VALUE)
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 RETURN
kono
parents:
diff changeset
22 END SUBROUTINE POINTER_INTENT_IN_BUG_WORKING
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 SUBROUTINE POINTER_INTENT_IN_BUG_FAILING(POINTER_INTENT_IN_VARIABLE)
kono
parents:
diff changeset
25 TYPE(MY_TYPE), POINTER, INTENT(IN) :: POINTER_INTENT_IN_VARIABLE
kono
parents:
diff changeset
26 INTEGER, ALLOCATABLE :: LOCAL_VALUE
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 CALL MOVE_ALLOC(POINTER_INTENT_IN_VARIABLE%VALUE, LOCAL_VALUE)
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 RETURN
kono
parents:
diff changeset
31 END SUBROUTINE POINTER_INTENT_IN_BUG_FAILING
kono
parents:
diff changeset
32 end module bug
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 subroutine test1()
kono
parents:
diff changeset
35 TYPE MY_TYPE
kono
parents:
diff changeset
36 INTEGER, ALLOCATABLE :: VALUE
kono
parents:
diff changeset
37 END TYPE
kono
parents:
diff changeset
38 CONTAINS
kono
parents:
diff changeset
39 SUBROUTINE sub (dt)
kono
parents:
diff changeset
40 type(MY_TYPE), intent(in) :: dt
kono
parents:
diff changeset
41 INTEGER, ALLOCATABLE :: lv
kono
parents:
diff changeset
42 call move_alloc(dt%VALUE, lv) ! { dg-error "cannot be INTENT.IN." }
kono
parents:
diff changeset
43 END SUBROUTINE
kono
parents:
diff changeset
44 end subroutine test1
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 subroutine test2 (x, px)
kono
parents:
diff changeset
47 implicit none
kono
parents:
diff changeset
48 type t
kono
parents:
diff changeset
49 integer, allocatable :: a
kono
parents:
diff changeset
50 end type t
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 type t2
kono
parents:
diff changeset
53 type(t), pointer :: ptr
kono
parents:
diff changeset
54 integer, allocatable :: a
kono
parents:
diff changeset
55 end type t2
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 type(t2), intent(in) :: x
kono
parents:
diff changeset
58 type(t2), pointer, intent(in) :: px
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 integer, allocatable :: a
kono
parents:
diff changeset
61 type(t2), pointer :: ta
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 call move_alloc (px, ta) ! { dg-error "cannot be INTENT.IN." }
kono
parents:
diff changeset
64 call move_alloc (x%a, a) ! { dg-error "cannot be INTENT.IN." }
kono
parents:
diff changeset
65 call move_alloc (x%ptr%a, a) ! OK (3)
kono
parents:
diff changeset
66 call move_alloc (px%a, a) ! OK (4)
kono
parents:
diff changeset
67 call move_alloc (px%ptr%a, a) ! OK (5)
kono
parents:
diff changeset
68 end subroutine test2
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 subroutine test3 (x, px)
kono
parents:
diff changeset
71 implicit none
kono
parents:
diff changeset
72 type t
kono
parents:
diff changeset
73 integer, allocatable :: a
kono
parents:
diff changeset
74 end type t
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76 type t2
kono
parents:
diff changeset
77 class(t), pointer :: ptr
kono
parents:
diff changeset
78 integer, allocatable :: a
kono
parents:
diff changeset
79 end type t2
kono
parents:
diff changeset
80
kono
parents:
diff changeset
81 type(t2), intent(in) :: x
kono
parents:
diff changeset
82 class(t2), pointer, intent(in) :: px
kono
parents:
diff changeset
83
kono
parents:
diff changeset
84 integer, allocatable :: a
kono
parents:
diff changeset
85 class(t2), pointer :: ta
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 call move_alloc (px, ta) ! { dg-error "cannot be INTENT.IN." }
kono
parents:
diff changeset
88 call move_alloc (x%a, a) ! { dg-error "cannot be INTENT.IN." }
kono
parents:
diff changeset
89 call move_alloc (x%ptr%a, a) ! OK (6)
kono
parents:
diff changeset
90 call move_alloc (px%a, a) ! OK (7)
kono
parents:
diff changeset
91 call move_alloc (px%ptr%a, a) ! OK (8)
kono
parents:
diff changeset
92 end subroutine test3
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94 subroutine test4()
kono
parents:
diff changeset
95 TYPE MY_TYPE
kono
parents:
diff changeset
96 INTEGER, ALLOCATABLE :: VALUE
kono
parents:
diff changeset
97 END TYPE
kono
parents:
diff changeset
98 CONTAINS
kono
parents:
diff changeset
99 SUBROUTINE sub (dt)
kono
parents:
diff changeset
100 CLASS(MY_TYPE), intent(in) :: dt
kono
parents:
diff changeset
101 INTEGER, ALLOCATABLE :: lv
kono
parents:
diff changeset
102 call move_alloc(dt%VALUE, lv) ! { dg-error "cannot be INTENT.IN." }
kono
parents:
diff changeset
103 END SUBROUTINE
kono
parents:
diff changeset
104 end subroutine test4