https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113997
Bug ID: 113997 Summary: Bogus 'Warning: Interface mismatch in global procedure' with C binding Product: gcc Version: 14.0 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: burnus at gcc dot gnu.org Target Milestone: --- The following warning is bogus, unless -fno-leading-underscore is used: 8 | subroutine foo_c(x) bind(C, name="foo") | 1 Warning: Interface mismatch in global procedure 'foo_c' at (1): Type mismatch in argument 'x' (TYPE(c_ptr)/TYPE(*)) * * * Because for 'subroutine acc_attach()' 'subroutine acc_attach_c(x) bind(C, name="acc_attach"') (A) the global Fortran name 'acc_attach' differs from the local name 'acc_attach_c' (B) the actual name (DECL_ASSEMBLER_NAME) differs: 'acc_attach_c' is 'acc_attach' but 'acc_attach' is 'acc_attach_c'. * * * ! The C and Fortran interfaces are part of OpenACC 3.3 ! An alternative implementation would be a C implementation using ! ISO_Fortran_binding.h. subroutine acc_attach(x) use iso_c_binding, only : c_loc implicit none (external, type) type(*), dimension(..), target :: x interface subroutine acc_attach_c(x) bind(C, name="acc_attach") use iso_c_binding type(c_ptr) :: x end subroutine end interface call acc_attach_c(c_loc(x)) end