3 ! Testcase for PR 94289
5 ! - if the dummy argument is a pointer/allocatable, it has the same
6 ! bounds as the dummy argument
7 ! - if is is nonallocatable nonpointer, the lower bounds are [1, 1, 1].
22 integer, parameter :: lb1
= 3
23 integer, parameter :: lb2
= 5
24 integer, parameter :: lb3
= 9
25 integer, parameter :: ub1
= 4
26 integer, parameter :: ub2
= 50
27 integer, parameter :: ub3
= 11
28 integer, parameter :: ex1
= ub1
- lb1
+ 1
29 integer, parameter :: ex2
= ub2
- lb2
+ 1
30 integer, parameter :: ex3
= ub3
- lb3
+ 1
32 integer, parameter :: lf(*) = [1,1,1]
33 integer, parameter :: lb(*) = [lb1
,lb2
,lb3
]
34 integer, parameter :: ub(*) = [ub1
,ub2
,ub3
]
35 integer, parameter :: ex(*) = [ex1
,ex2
,ex3
]
39 subroutine bounds(a
, lb
, ub
)
40 integer, pointer, intent(in
) :: a(..)
41 integer, intent(in
) :: lb(3)
42 integer, intent(in
) :: ub(3)
47 if(any(lbound(a
)/=lb
)) stop 101
48 if(any(ubound(a
)/=ub
)) stop 102
49 if(any( shape(a
)/=ex
)) stop 103
53 subroutine bnds_p(this
)
54 integer, pointer, intent(in
) :: this(..)
56 if(any(lbound(this
)/=lb
)) stop 1
57 if(any(ubound(this
)/=ub
)) stop 2
58 if(any( shape(this
)/=ex
)) stop 3
59 call bounds(this
, lb
, ub
)
63 subroutine bnds_a(this
)
64 integer, allocatable
, target
, intent(in
) :: this(..)
66 if(any(lbound(this
)/=lb
)) stop 4
67 if(any(ubound(this
)/=ub
)) stop 5
68 if(any( shape(this
)/=ex
)) stop 6
69 call bounds(this
, lb
, ub
)
73 subroutine bnds_e(this
)
74 integer, target
, intent(in
) :: this(..)
76 if(any(lbound(this
)/=lf
)) stop 7
77 if(any(ubound(this
)/=ex
)) stop 8
78 if(any( shape(this
)/=ex
)) stop 9
79 call bounds(this
, lf
, ex
)
87 use, intrinsic :: iso_c_binding
, only
: c_int
93 integer, parameter :: fpn
= 1
94 integer, parameter :: fan
= 2
95 integer, parameter :: fon
= 3
113 integer, intent(in
) :: t
115 integer, pointer :: a(:,:,:)
117 allocate(a(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3)))
129 end subroutine test_p
132 integer, intent(in
) :: t
134 integer, allocatable
, target
:: a(:,:,:)
136 allocate(a(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3)))
149 end subroutine test_a
152 integer, intent(in
) :: t
154 integer, target
:: a(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3))
166 end subroutine test_e