* PING *
Since today, due to a just committed patch, Open MPI (trunk version)
won't compile with GCC 4.9 without this patch ...
Patches in this trilogy - the last one is required for Open MPI:
*http://gcc.gnu.org/ml/fortran/2013-05/msg00048.html - COMMON
*http://gcc.gnu.org/ml/fortran/2013-05/msg00051.html - PROCEDURE
* http://gcc.gnu.org/ml/fortran/2013-05/msg00056.html - more on bind
label handling
On May 17, 2013 08:45, Tobias Burnus wrote:
Followup (and depending on) to the C binding patches for
* COMMON: http://gcc.gnu.org/ml/fortran/2013-05/msg00048.html
* Procedures: http://gcc.gnu.org/ml/fortran/2013-05/msg00051.html
which honour Fortran 2008, where the Fortran name is no longer a
global identifier if a binding name has been specified.
The main reason for this patch is a build failure of Open MPI
(requires !gcc$ attributes no_arg_check, i.e. it only affects GCC
4.9). Open MPI uses somethine like:
interface
subroutine pmpi_something() bind(C,name="MPI_something")
...
and in a different module:
interface
subroutine mpi_something() bind(C,name="MPI_something")
...
Currently, gfortran rejects it because it only permits one
definition/declaration per translation unit. However, there is no
reason why multiple INTERFACE blocks shouldn't be permitted.
Remarks:
a) Better argument checks if definition and declaration are in the
same file. (see INTENT patch in a test case)
b) Currently, no check is done regarding the characteristic of
procedure declarations. Of course, the declaration has to be
compatible with the C procedure. However, there seems to be the wish*
to permit compatible input - even if the Fortran characteristic is
different. For instance "int *" takes both a scalar integer ("int i;
f(&i)") and arrays ("int i[5]; f(i)"). Or also popular according to
the PRs: Taking a C_LOC or an integer(c_intptr_t).
(* Seemingly, also J3 and/or WG5 discussed this (plenum? subgroups?)
and they had the permit it. However, finding some official document is
difficult.)
I was wondering for a while what should be permitted and what
shouldn't, but I have now decided to put that completely into the
hands of the user.
Build and regtested on x86-64-gnu-linux.
OK for the trunk?
Tobias