! { dg-do run } ! { dg-additional-sources ISO_Fortran_binding_6.c } ! ! Test fix of PR89366. ! ! Contributed by Reinhold Bader ! program assumed_length_01 use, intrinsic :: iso_c_binding implicit none integer, parameter :: strlen = 12 integer(c_int) :: ierr(3) character(kind=c_char,len=strlen) :: s1 character(kind=c_char,len=:), allocatable :: s2 character(kind=c_char,len=:), pointer :: s3 ! ! invoke a C function that processes an assumed length string interface subroutine process_string(this, ierr) BIND(C) import :: c_char, c_int character(kind=c_char,len=*), intent(in) :: this(..) integer(c_int), intent(inout) :: ierr end subroutine process_string end interface ! ! ierr = 0 s1 = c_char_'wrzlprmft' // c_null_char call process_string(s1, ierr(1)) if (ierr(1) /= 0) stop 1 s2 = c_char_'wrzlprmft' // c_null_char allocate(s3, source=trim(s1)) call process_string(s2, ierr(2)) if (ierr(2) /= 0) stop 2 call process_string(s3, ierr(3)) if (ierr(3) /= 0) stop 3 if (sum(abs(ierr)) == 0) write(*,*) 'OK' deallocate(s2,s3) end program assumed_length_01