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

--- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> ---
> Anyway, renaming the binding label, like
>    subroutine acc_attach_c(x) bind(C, name="acc_attach_renamed")
> makes the code compile.

Well, the code *does* compile as it is only a warning.

* * *

I think the problem here is a bit that on the Fortran-user side ('acc_attach'
vs. 'acc_attach_c') and on the assembler-level side ('acc_attach_' vs.
'acc_attach') everything is fine (except with -fno-underscore) but, admittedly,
not from the Fortran lanaguage side.

(On the other hand, Fortran itself is perfectly happy with:
'subroutine foo' and 'subroutine bar() Bind(C, name='foo_')' but that will
break with most Fortran compilers.)

Thus, the question is whether we (gfortran) want to do something here - or are
happy with issuing the semi-correct/semi-bogus warning here.

* * *

And renaming "acc_attach_c" does not really help as 'acc_attach' with C binding
does exist. In this case it exists as:
 
https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgomp/oacc-mem.c;hb=refs/heads/master#l944
and renaming would just add another wrapper around it.


However, an alternative is the following - which is (nearly) identical, except
that GCC does some GFC-CFC and back conversations – independent whether
implemented in C or in Fortran:

subroutine acc_attach(x) bind(C, name="acc_attach_")
  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

Reply via email to