| ! |
| ! { dg-do run } |
| ! |
| ! PR117643 F_C_STRING from F23 is missing. |
| ! Test case and initial patch provided by Steve Kargl. |
| program foo |
| |
| use iso_c_binding, only : c_null_char, c_char, f_c_string, c_size_t |
| |
| implicit none |
| |
| logical asis |
| character(len=6, kind=c_char) :: s1 |
| character(len=:, kind=c_char), allocatable :: s2 |
| |
| interface |
| ! |
| ! strlen() counts up to '\0', and excludes it from the count |
| ! |
| function strlen(s) bind(c,name="strlen") |
| import c_char, c_size_t |
| integer(c_size_t) strlen |
| character(len=1,kind=c_char), intent(in) :: s(*) |
| end function strlen |
| end interface |
| |
| s1 = 'abc ' |
| s2 = f_c_string(s1) |
| if (len_trim(s1) /= int(strlen(s2), 4)) stop 1 |
| |
| s1 = ' ghij ' |
| s2 = f_c_string(s1) |
| if (len_trim(s1) /= int(strlen(s2), 4)) stop 2 |
| |
| s2 = f_c_string(s1, .true.) |
| if (len(s1) /= int(strlen(s2), 4)) stop 3 |
| |
| s2 = f_c_string(s1, .false.) |
| if (len_trim(s1) /= int(strlen(s2), 4)) stop 4 |
| |
| asis = .true. |
| s2 = f_c_string(s1, asis) |
| if (len(s1) /= int(strlen(s2), 4)) stop 5 |
| |
| asis = .false. |
| s2 = f_c_string(s1, asis) |
| if (len_trim(s1) /= int(strlen(s2), 4)) stop 6 |
| |
| end program foo |