blob: d6461614a4ffcceca2a264604bb0d948d348f58d [file] [log] [blame]
! { dg-do run }
! { dg-additional-options "-fdump-tree-original" }
! In this program shall be no kind=1,
! except for the 'argv' of the 'main' program.
! PR fortran/107266
! { dg-final { scan-tree-dump-times "kind=1" 1 "original" } }
! { dg-final { scan-tree-dump-times "character\\(kind=1\\) \\* \\* argv\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "character\\(kind=4\\) f \\(character\\(kind=4\\) x\\)" 1 "original" } }
character(kind=4) function f(x) bind(C)
character(kind=4), value :: x
end
program testit
implicit none (type, external)
character (kind=4, len=:), allocatable :: aa
character (kind=4, len=:), pointer :: pp
pp => NULL ()
call frobf (aa, pp)
if (.not. allocated (aa)) stop 101
if (storage_size(aa) /= storage_size(4_'foo')) stop 1
if (aa .ne. 4_'foo') stop 102
if (.not. associated (pp)) stop 103
if (storage_size(pp) /= storage_size(4_'bar')) stop 2
if (pp .ne. 4_'bar') stop 104
pp => NULL ()
call frobc (aa, pp)
if (.not. allocated (aa)) stop 105
if (storage_size(aa) /= storage_size(4_'frog')) stop 3
if (aa .ne. 4_'frog') stop 106
if (.not. associated (pp)) stop 107
if (storage_size(pp) /= storage_size(4_'toad')) stop 4
if (pp .ne. 4_'toad') stop 108
contains
subroutine frobf (a, p) Bind(C)
character (kind=4, len=:), allocatable :: a
character (kind=4, len=:), pointer :: p
allocate (character(kind=4, len=3) :: p)
a = 4_'foo'
p = 4_'bar'
end subroutine
subroutine frobc (a, p) Bind(C)
character (kind=4, len=:), allocatable :: a
character (kind=4, len=:), pointer :: p
allocate (character(kind=4, len=4) :: p)
a = 4_'frog'
p = 4_'toad'
end subroutine
end program