! { 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