Hello Mr. Wuellen,
thanks for the bug report!

On Wednesday 04 February 2009 09:21:38 am Christoph van Wüllen wrote:
> there is an error in the above mentioned file, in line 74:
>
>     if (MPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) {
>         OMPI_ARRAY_INT_2_FINT(coords, OMPI_FINT_2_INT(*maxdims));
>
> the OMPI_ARRAY_INT_2_FINT macro uses the second argument with
> pre-decrement, such that it must be an lvalue and should not
> contain a type-cast.
>
> In the built at hand this code expands to
>
>     if (0 == (int) (*ierr)) {
>         while((int) (*maxdims) > 0) { coords[(int) (*maxdims) - 1] =
> c_coords[(int) (*maxdims) - 1]; --(int) (*maxdims); } free(c_coords);
>     }
>
> if MPI_FINT is, e.g. "long long" (that is, if FORTRAN integers are
> 64 bit, but C int/long is 32 bit), and
>
> --(int) (*maxdims)
>
> is not correct syntactically. I guess one could omit the
> OMPI_FINT_2_INT in the second line, but you should check this.

Good catch.
That was introduced by me in r14762, where I didn't notice the lvalue usage.

This should be moved into the v1.3.1 release.

> Anyway, bad testing. The code has probably never been build for
> FORTRAN with 64-bit integers.
Hmm, not by me after r8254, when the same applied to sizeof(logical)!= 
sizeof(int)... Then I tested these cases.

Thanks again.

With best regards,
Rainer Keller
-- 
------------------------------------------------------------------------
Rainer Keller, PhD                  Tel: (865) 241-6293
Oak Ridge National Lab          Fax: (865) 241-4811
PO Box 2008 MS 6164           Email: kel...@ornl.gov
Oak Ridge, TN 37831-2008    AIM/Skype: rusraink



Reply via email to