Mishima-san,
the root cause is macro expansion does not always occur as one would
have expected ...
could you please give a try to the attached patch ?
it compiles (at least with gcc) and i made zero tests so far ....
Cheers,
Gilles
On 2014/09/01 10:44, [email protected] wrote:
> Hi folks,
>
> I tried to build openmpi-1.8.2 with PGI fortran and -i8(64bit fortran int)
> option
> as shown below:
>
> ./configure \
> --prefix=/home/mishima/opt/mpi/openmpi-1.8.2-pgi14.7_int64 \
> --enable-abi-breaking-fortran-status-i8-fix \
> --with-tm \
> --with-verbs \
> --disable-ipv6 \
> CC=pgcc CFLAGS="-tp k8-64e -fast" \
> CXX=pgCC CXXFLAGS="-tp k8-64e -fast" \
> F77=pgfortran FFLAGS="-i8 -tp k8-64e -fast" \
> FC=pgfortran FCFLAGS="-i8 -tp k8-64e -fast"
>
> Then I saw this compile error in making oshmem at the last stage:
>
> if test ! -r pshmem_real8_swap_f.c ; then \
> pname=`echo pshmem_real8_swap_f.c | cut -b '2-'` ; \
> ln -s ../../../../oshmem/shmem/fortran/$pname
> pshmem_real8_swap_f.c ; \
> fi
> CC pshmem_real8_swap_f.lo
> if test ! -r pshmem_int4_cswap_f.c ; then \
> pname=`echo pshmem_int4_cswap_f.c | cut -b '2-'` ; \
> ln -s ../../../../oshmem/shmem/fortran/$pname
> pshmem_int4_cswap_f.c ; \
> fi
> CC pshmem_int4_cswap_f.lo
> PGC-S-0058-Illegal lvalue (pshmem_int4_cswap_f.c: 39)
> PGC/x86-64 Linux 14.7-0: compilation completed with severe errors
> make[3]: *** [pshmem_int4_cswap_f.lo] Error 1
> make[3]: Leaving directory
> `/home/mishima/mis/openmpi/openmpi-pgi14.7/int64/openmpi-1.8.2/oshmem/shmem/fortran/profile'
> make[2]: *** [all-recursive] Error 1
> make[2]: Leaving directory
> `/home/mishima/mis/openmpi/openmpi-pgi14.7/int64/openmpi-1.8.2/oshmem/shmem/fortran'
> make[1]: *** [all-recursive] Error 1
> make[1]: Leaving directory
> `/home/mishima/mis/openmpi/openmpi-pgi14.7/int64/openmpi-1.8.2/oshmem'
> make: *** [all-recursive] Error 1
>
> I confirmed that it worked if I added configure option of --disable-oshmem.
> So, I hope that oshmem experts would fix this problem.
>
> (additional note)
> I switched to use gnu compiler and checked with this configuration, then
> I got the same error:
>
> ./configure \
> --prefix=/home/mishima/opt/mpi/openmpi-1.8.2-gnu_int64 \
> --enable-abi-breaking-fortran-status-i8-fix \
> --disable-ipv6 \
> F77=gfortran \
> FC=gfortran \
> CC=gcc \
> CXX=g++ \
> FFLAGS="-m64 -fdefault-integer-8" \
> FCFLAGS="-m64 -fdefault-integer-8" \
> CFLAGS=-m64 \
> CXXFLAGS=-m64
>
> make
> ....
> if test ! -r pshmem_int4_cswap_f.c ; then \
> pname=`echo pshmem_int4_cswap_f.c | cut -b '2-'` ; \
> ln -s ../../../../oshmem/shmem/fortran/$pname
> pshmem_int4_cswap_f.c ; \
> fi
> CC pshmem_int4_cswap_f.lo
> pshmem_int4_cswap_f.c: In function 'shmem_int4_cswap_f':
> pshmem_int4_cswap_f.c:39: error: invalid lvalue in unary '&'
> make[3]: *** [pshmem_int4_cswap_f.lo] Error 1
>
> Regards
> Tetsuya Mishima
>
> _______________________________________________
> devel mailing list
> [email protected]
> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
> Link to this post:
> http://www.open-mpi.org/community/lists/devel/2014/08/15764.php
Index: oshmem/shmem/fortran/shmem_int4_cswap_f.c
===================================================================
--- oshmem/shmem/fortran/shmem_int4_cswap_f.c (revision 32657)
+++ oshmem/shmem/fortran/shmem_int4_cswap_f.c (working copy)
@@ -2,6 +2,8 @@
* Copyright (c) 2013 Mellanox Technologies, Inc.
* All rights reserved.
* Copyright (c) 2013 Cisco Systems, Inc. All rights reserved.
+ * Copyright (c) 2014 Research Organization for Information Science
+ * and Technology (RIST). All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@@ -38,7 +40,7 @@
MCA_ATOMIC_CALL(cswap(FPTR_2_VOID_PTR(target),
(void *)&out_value,
- (const void*)(&OMPI_FINT_2_INT(*cond)),
+ (const void*)(OMPI_PFINT_2_PINT(cond)),
FPTR_2_VOID_PTR(value),
sizeof(out_value),
OMPI_FINT_2_INT(*pe)));
Index: oshmem/shmem/fortran/shmem_int8_cswap_f.c
===================================================================
--- oshmem/shmem/fortran/shmem_int8_cswap_f.c (revision 32657)
+++ oshmem/shmem/fortran/shmem_int8_cswap_f.c (working copy)
@@ -2,6 +2,8 @@
* Copyright (c) 2013 Mellanox Technologies, Inc.
* All rights reserved.
* Copyright (c) 2013 Cisco Systems, Inc. All rights reserved.
+ * Copyright (c) 2014 Research Organization for Information Science
+ * and Technology (RIST). All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@@ -38,7 +40,7 @@
MCA_ATOMIC_CALL(cswap(FPTR_2_VOID_PTR(target),
(void *)&out_value,
- (const void*)(&OMPI_FINT_2_INT(*cond)),
+ (const void*)(OMPI_PFINT_2_PINT(cond)),
FPTR_2_VOID_PTR(value),
sizeof(out_value),
OMPI_FINT_2_INT(*pe)));
Index: ompi/mpi/fortran/base/fint_2_int.h
===================================================================
--- ompi/mpi/fortran/base/fint_2_int.h (revision 32657)
+++ ompi/mpi/fortran/base/fint_2_int.h (working copy)
@@ -11,6 +11,8 @@
* All rights reserved.
* Copyright (c) 2011-2012 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014 Research Organization for Information Science
+ * and Technology (RIST). All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@@ -37,6 +39,7 @@
#define OMPI_SINGLE_NAME_CONVERT(a) a
#define OMPI_INT_2_FINT(a) a
#define OMPI_FINT_2_INT(a) a
+ #define OMPI_PFINT_2_PINT(a) a
#define OMPI_ARRAY_FINT_2_INT_ALLOC(in, n)
#define OMPI_ARRAY_FINT_2_INT(in, n)
#define OMPI_2_DIM_ARRAY_FINT_2_INT(in, n, dim2)
@@ -53,6 +56,7 @@
#define OMPI_SINGLE_NAME_CONVERT(a) &c_##a
#define OMPI_INT_2_FINT(a) a
#define OMPI_FINT_2_INT(a) (int) (a)
+ #define OMPI_PFINT_2_PINT(a) (int *) (a)
/* This is for OUT parameters. Does only alloc */
#define OMPI_ARRAY_FINT_2_INT_ALLOC(in, n) \
@@ -109,6 +113,7 @@
#define OMPI_SINGLE_NAME_CONVERT(a) &c_##a
#define OMPI_INT_2_FINT(a) (MPI_Fint)(a)
#define OMPI_FINT_2_INT(a) (a)
+ #define OMPI_PFINT_2_PINT(a) a
/* This is for OUT parameters. Does only alloc */
#define OMPI_ARRAY_FINT_2_INT_ALLOC(in, n) \