George Bosilca <[email protected]> writes:
>> No. The Fortran status must __always__ be 6, because we need enough room to
>> correctly convert the 3 useful variables to Fortran, plus copy the rest of
>> the hidden things.These 6 type will be INTEGER (which will then be different
>> than the C int). The C<->F stuff will do not a memcpy but copy all elements
>> while casting to the correct Fortran type (ompi_fortran_integer_t).
>>
>> The fact that we are talking about 3 integers in the Fortran status might
>> explain the segfault. This number should never be 3 it should be ALWAYS 6 or
>> the function MPI_Status_c2f will clearly overwrite the memory.
>
> I did manage to try this idea on an -i8 enabled Open MPI version. The test
> application provided on one of the early email successfully complete without
> the segfault and with a correct output.
>
> node= 0 and size= 2 : Hello
> node= 1 and size= 2 : Hello
> Iam = 1 and my temp value is = 1
> Iam = 0 and my temp value is = 1
>
> So the fix is trivial, make MPI_STATUS_SIZE always equal to
> sizeof(MPI_Status)/sizeof(int). Everything else is already taken care of by
> the current Fortran <-> C infrastructure.
This doesn't seem to have been fixed, and I think it's going to bite
here. Is this the right change?
--- openmpi-1.6.5/ompi/config/ompi_setup_mpi_fortran.m4~ 2012-04-03
15:30:24.000000000 +0100
+++ openmpi-1.6.5/ompi/config/ompi_setup_mpi_fortran.m4 2013-12-10
12:23:54.232854527 +0000
@@ -127,8 +127,8 @@
AC_MSG_RESULT([skipped (no Fortran bindings)])
else
bytes=`expr 4 \* $ac_cv_sizeof_int + $ac_cv_sizeof_size_t`
- num_integers=`expr $bytes / $OMPI_SIZEOF_FORTRAN_INTEGER`
- sanity=`expr $num_integers \* $OMPI_SIZEOF_FORTRAN_INTEGER`
+ num_integers=`expr $bytes / $ac_cv_sizeof_int`
+ sanity=`expr $num_integers \* $ac_cv_sizeof_int`
AS_IF([test "$sanity" != "$bytes"],
[AC_MSG_RESULT([unknown!])
AC_MSG_WARN([WARNING: Size of C int: $ac_cv_sizeof_int])