https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107266

--- Comment #11 from Steve Kargl <sgk at troutmask dot apl.washington.edu> ---
On Tue, Oct 18, 2022 at 10:40:59AM +0000, burnus at gcc dot gnu.org wrote:
> 
> (b) subroutine bar(x, y, z) bind(C)
>       character(kind=4,len=*) :: x
>       character(kind=4) :: y(:)
>       character(kind=4), allocatable :: z
> 
> This one is valid as F2018's "18.3.6 Interoperability of procedures and
> procedure interfaces" states:

I'm going to assume that you did not compile the above, or
read the patch.

% gfcx -c a.f90
a.f90:1:22:

    1 | subroutine bar(x, y, z) bind(C)
      |                      1
Error: Allocatable character dummy argument 'z' at (1) must have deferred
length as procedure 'bar' is BIND(C)

% cat a.f90
subroutine bar(x, y, z) bind(C)
    character(kind=4,len=*) :: x
    character(kind=4) :: y(:)
    character(kind=4,len=:), allocatable :: z
end subroutine bar

% gfcx -c a.f90 && nm a.o | grep bar
0000000000000000 T bar
% gfcx -c -std=f2018 a.f90 && nm a.o | grep bar
0000000000000000 T bar

% cat a.f90 
character(kind=4) function bar(x, y, z) bind(C)
    character(kind=4,len=*) :: x
    character(kind=4) :: y(:)
    character(kind=4,len=:), allocatable :: z
end function bar

% gfcx -c a.f90 && nm a.o | grep bar
0000000000000000 T bar

% gfcx -c -std=f2018 a.f90
a.f90:1:30:

    1 | character(kind=4) function bar(x, y, z) bind(C)
      |                              1
Error: GNU Extension: Symbol 'bar' at (1) with type CHARACTER(KIND=4) cannot
have the BIND(C) attribute

The patch checks a *function* result variable for an interoperable
CHARACTER kind.

Reply via email to