blob: 6185031afc572d6fed635c5be1ff952eba3f6435 [file] [log] [blame]
! { dg-do run }
! { dg-additional-sources PR94331.c }
!
! Test the fix for PR94331
!
program main_p
use, intrinsic :: iso_c_binding, only: &
c_int
implicit none
integer :: i
integer, parameter :: ex = 11
integer, parameter :: lb = 11
integer, parameter :: ub = ex+lb-1
integer, parameter :: u(*) = [(i, i=1,ex)]
interface
function checkb_p_as(a, l, u) result(c) &
bind(c, name="check_bounds")
use, intrinsic :: iso_c_binding, only: &
c_int, c_bool
implicit none
integer(kind=c_int), pointer, intent(in) :: a(:)
integer(kind=c_int), value, intent(in) :: l
integer(kind=c_int), value, intent(in) :: u
logical(kind=c_bool) :: c
end function checkb_p_as
function checkb_a_as(a, l, u) result(c) &
bind(c, name="check_bounds")
use, intrinsic :: iso_c_binding, only: &
c_int, c_bool
implicit none
integer(kind=c_int), allocatable, intent(in) :: a(:)
integer(kind=c_int), value, intent(in) :: l
integer(kind=c_int), value, intent(in) :: u
logical(kind=c_bool) :: c
end function checkb_a_as
function checkb_o_as(a, l, u) result(c) &
bind(c, name="check_bounds")
use, intrinsic :: iso_c_binding, only: &
c_int, c_bool
implicit none
integer(kind=c_int), intent(in) :: a(:)
integer(kind=c_int), value, intent(in) :: l
integer(kind=c_int), value, intent(in) :: u
logical(kind=c_bool) :: c
end function checkb_o_as
function checkb_p_ar(a, l, u) result(c) &
bind(c, name="check_bounds")
use, intrinsic :: iso_c_binding, only: &
c_int, c_bool
implicit none
integer(kind=c_int), pointer, intent(in) :: a(..)
integer(kind=c_int), value, intent(in) :: l
integer(kind=c_int), value, intent(in) :: u
logical(kind=c_bool) :: c
end function checkb_p_ar
function checkb_a_ar(a, l, u) result(c) &
bind(c, name="check_bounds")
use, intrinsic :: iso_c_binding, only: &
c_int, c_bool
implicit none
integer(kind=c_int), allocatable, intent(in) :: a(..)
integer(kind=c_int), value, intent(in) :: l
integer(kind=c_int), value, intent(in) :: u
logical(kind=c_bool) :: c
end function checkb_a_ar
function checkb_o_ar(a, l, u) result(c) &
bind(c, name="check_bounds")
use, intrinsic :: iso_c_binding, only: &
c_int, c_bool
implicit none
integer(kind=c_int), intent(in) :: a(..)
integer(kind=c_int), value, intent(in) :: l
integer(kind=c_int), value, intent(in) :: u
logical(kind=c_bool) :: c
end function checkb_o_ar
end interface
integer(kind=c_int), target :: a(lb:ub)
integer(kind=c_int), allocatable, target :: b(:)
integer(kind=c_int), pointer :: p(:)
a = u
if(lbound(a,1)/=lb) stop 1
if(ubound(a,1)/=ub) stop 2
if(any(shape(a)/=[ex])) stop 3
if(.not.checkb_p_as(a, lb, ub)) stop 4
if(lbound(a,1)/=lb) stop 5
if(ubound(a,1)/=ub) stop 6
if(any(shape(a)/=[ex])) stop 7
if(any(a/=u)) stop 8
!
a = u
if(lbound(a,1)/=lb) stop 9
if(ubound(a,1)/=ub) stop 10
if(any(shape(a)/=[ex])) stop 11
if(.not.checkb_p_ar(a, lb, ub)) stop 12
if(lbound(a,1)/=lb) stop 13
if(ubound(a,1)/=ub) stop 14
if(any(shape(a)/=[ex])) stop 15
if(any(a/=u)) stop 16
!
a = u
if(lbound(a,1)/=lb) stop 17
if(ubound(a,1)/=ub) stop 18
if(any(shape(a)/=[ex])) stop 19
if(.not.checkb_o_as(a, 0, ex-1))stop 20
if(lbound(a,1)/=lb) stop 21
if(ubound(a,1)/=ub) stop 22
if(any(shape(a)/=[ex])) stop 23
if(any(a/=u)) stop 24
!
a = u
if(lbound(a,1)/=lb) stop 25
if(ubound(a,1)/=ub) stop 26
if(any(shape(a)/=[ex])) stop 27
if(.not.checkb_o_ar(a, 0, ex-1))stop 28
if(lbound(a,1)/=lb) stop 29
if(ubound(a,1)/=ub) stop 30
if(any(shape(a)/=[ex])) stop 31
if(any(a/=u)) stop 32
!
allocate(b(lb:ub), source=u)
if(lbound(b,1)/=lb) stop 33
if(ubound(b,1)/=ub) stop 34
if(any(shape(b)/=[ex])) stop 35
if(.not.checkb_p_as(b, lb, ub)) stop 36
if(.not.allocated(b)) stop 37
if(lbound(b,1)/=lb) stop 38
if(ubound(b,1)/=ub) stop 39
if(any(shape(b)/=[ex])) stop 40
if(any(b/=u)) stop 41
!
deallocate(b)
allocate(b(lb:ub), source=u)
if(lbound(b,1)/=lb) stop 42
if(ubound(b,1)/=ub) stop 43
if(any(shape(b)/=[ex])) stop 44
if(.not.checkb_p_ar(b, lb, ub)) stop 45
if(.not.allocated(b)) stop 46
if(lbound(b,1)/=lb) stop 47
if(ubound(b,1)/=ub) stop 48
if(any(shape(b)/=[ex])) stop 49
if(any(b/=u)) stop 50
!
deallocate(b)
allocate(b(lb:ub), source=u)
if(lbound(b,1)/=lb) stop 51
if(ubound(b,1)/=ub) stop 52
if(any(shape(b)/=[ex])) stop 53
if(.not.checkb_a_as(b, lb, ub)) stop 54
if(.not.allocated(b)) stop 55
if(lbound(b,1)/=lb) stop 56
if(ubound(b,1)/=ub) stop 57
if(any(shape(b)/=[ex])) stop 58
if(any(b/=u)) stop 59
!
deallocate(b)
allocate(b(lb:ub), source=u)
if(lbound(b,1)/=lb) stop 60
if(ubound(b,1)/=ub) stop 61
if(any(shape(b)/=[ex])) stop 62
if(.not.checkb_a_ar(b, lb, ub)) stop 63
if(.not.allocated(b)) stop 64
if(lbound(b,1)/=lb) stop 65
if(ubound(b,1)/=ub) stop 66
if(any(shape(b)/=[ex])) stop 67
if(any(b/=u)) stop 68
!
deallocate(b)
allocate(b(lb:ub), source=u)
if(lbound(b,1)/=lb) stop 69
if(ubound(b,1)/=ub) stop 70
if(any(shape(b)/=[ex])) stop 71
if(.not.checkb_o_as(b, 0, ex-1))stop 72
if(.not.allocated(b)) stop 73
if(lbound(b,1)/=lb) stop 74
if(ubound(b,1)/=ub) stop 75
if(any(shape(b)/=[ex])) stop 76
if(any(b/=u)) stop 77
!
deallocate(b)
allocate(b(lb:ub), source=u)
if(lbound(b,1)/=lb) stop 78
if(ubound(b,1)/=ub) stop 79
if(any(shape(b)/=[ex])) stop 80
if(.not.checkb_o_ar(b, 0, ex-1))stop 81
if(.not.allocated(b)) stop 82
if(lbound(b,1)/=lb) stop 83
if(ubound(b,1)/=ub) stop 84
if(any(shape(b)/=[ex])) stop 85
if(any(b/=u)) stop 86
deallocate(b)
!
p(lb:ub) => a
if(lbound(p,1)/=lb) stop 87
if(ubound(p,1)/=ub) stop 88
if(any(shape(p)/=[ex])) stop 89
if(.not.checkb_p_as(p, lb, ub)) stop 90
if(.not.associated(p)) stop 91
if(.not.associated(p, a)) stop 92
if(lbound(p,1)/=lb) stop 93
if(ubound(p,1)/=ub) stop 94
if(any(shape(p)/=[ex])) stop 95
if(any(p/=u)) stop 96
!
nullify(p)
p(lb:ub) => a
if(lbound(p,1)/=lb) stop 97
if(ubound(p,1)/=ub) stop 98
if(any(shape(p)/=[ex])) stop 99
if(.not.checkb_p_ar(p, lb, ub)) stop 100
if(.not.associated(p)) stop 101
if(.not.associated(p, a)) stop 102
if(lbound(p,1)/=lb) stop 103
if(ubound(p,1)/=ub) stop 104
if(any(shape(p)/=[ex])) stop 105
if(any(p/=u)) stop 106
!
nullify(p)
p(lb:ub) => a
if(lbound(p,1)/=lb) stop 107
if(ubound(p,1)/=ub) stop 108
if(any(shape(p)/=[ex])) stop 109
if(.not.checkb_o_as(p, 0, ex-1))stop 110
if(.not.associated(p)) stop 111
if(.not.associated(p, a)) stop 112
if(lbound(p,1)/=lb) stop 113
if(ubound(p,1)/=ub) stop 114
if(any(shape(p)/=[ex])) stop 115
if(any(p/=u)) stop 116
!
nullify(p)
p(lb:ub) => a
if(lbound(p,1)/=lb) stop 117
if(ubound(p,1)/=ub) stop 118
if(any(shape(p)/=[ex])) stop 119
if(.not.checkb_o_ar(p, 0, ex-1))stop 120
if(.not.associated(p)) stop 121
if(.not.associated(p, a)) stop 122
if(lbound(p,1)/=lb) stop 123
if(ubound(p,1)/=ub) stop 124
if(any(shape(p)/=[ex])) stop 125
if(any(p/=u)) stop 126
nullify(p)
stop
end program main_p