cast between incompatible function types when compiling core with gcc/10.2.0 and mpi.ompi/4.1.0
Hi,
I'm trying to compile core with relatively recent compilers, and get errors due to cast between incompatible function types.
These errors can be bypassed by removing Werror from the FLAGS (but I suppose you want to fix the warning rather than fix the flag).
diff --git a/cmake/bob.cmake b/cmake/bob.cmake
index fb68a8dc..21ce40f4 100644
--- a/cmake/bob.cmake
+++ b/cmake/bob.cmake
@@ -64,11 +64,11 @@ function(bob_begin_cxx_flags)
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if (${PROJECT_NAME}_CXX_WARNINGS)
- set(FLAGS "${FLAGS} -Werror -Wall -Wextra -Wno-strict-overflow")
+ set(FLAGS "${FLAGS} -Wall -Wextra -Wno-strict-overflow")
endif()
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
if (${PROJECT_NAME}_CXX_WARNINGS)
- set(FLAGS "${FLAGS} -Werror -Wall -Wextra -Wno-strict-overflow")
+ set(FLAGS "${FLAGS} -Wall -Wextra -Wno-strict-overflow")
endif()
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
else()
My compilers:
Currently Loaded Modulefiles:
1) paraview/5.10.0(default) 2) gcc/10.2.0(default) 3) mpi.ompi/4.1.0(default)
Some environments variables for compiling:
export myLibs=/export/dump/ulrich/myLibs/
export path_to_SimModeler=$myLibs/simModelerLib/16.0-220326/
export mpi_name=openmpi3
export path_to_pumi=$myLibs/core/
export path_to_SimModeler_lib=$path_to_SimModeler/lib/x64_rhel8_gcc83
export path_to_SimModeler_include_dir=$path_to_SimModeler/include
The compiling process and the errors:
ulrich@heisenbug:/export/dump/ulrich/myLibs/core$ mkdir build && cd build
ulrich@heisenbug:/export/dump/ulrich/myLibs/core/build$ cmake .. \
> -DCMAKE_C_COMPILER="`which mpicc`" \
> -DCMAKE_CXX_COMPILER="`which mpiCC`" \
> -DSCOREC_EXTRA_C_FLAGS="-O2 -g -Wall" \
> -DSCOREC_EXTRA_CXX_FLAGS="-O2 -g -Wall" \
> -DCMAKE_INSTALL_PREFIX=$path_to_pumi \
> -DENABLE_SIMMETRIX=ON \
> -DSIM_MPI=$mpi_name \
> -DSIMMETRIX_LIB_DIR=$path_to_SimModeler_lib \
> -DSIMMODSUITE_INCLUDE_DIR=$path_to_SimModeler_include_dir
-- The CXX compiler identification is GNU 10.2.0
-- The C compiler identification is GNU 10.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /opt/software/openmpi/buster/4.1.0_gcc-10.2.0/bin/mpiCC - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /opt/software/openmpi/buster/4.1.0_gcc-10.2.0/bin/mpicc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- CMAKE_VERSION: 3.18.4
-- SCOREC_VERSION: 2.2.7
-- BUILD_TESTING: OFF
-- CMAKE_INSTALL_PREFIX: /export/dump/ulrich/myLibs/core
-- BUILD_SHARED_LIBS: OFF
-- CMAKE_CXX_FLAGS: -O2 -g -Werror -Wall -Wextra -Wno-strict-overflow -O2 -g -Wall
-- CMAKE_CXX_FLAGS = -O2 -g -Werror -Wall -Wextra -Wno-strict-overflow -O2 -g -Wall
-- Try C99 C flag = [ ]
-- Performing Test C99_FLAG_DETECTED
-- Performing Test C99_FLAG_DETECTED - Success
-- CMAKE_C_FLAGS = -O2 -g -Werror -Wall -Wextra -Wno-strict-overflow -O2 -g -Wall
-- IS_TESTING: OFF
-- MESHES: /export/dump/ulrich/myLibs/core/pumi-meshes
-- BUILD_EXES: ON
-- PUMI_FORTRAN_INTERFACE: OFF
-- PUMI_PYTHON_INTERFACE: OFF
-- MPIRUN: /opt/software/openmpi/buster/4.1.0_gcc-10.2.0/bin/mpirun -np
-- Found Doxygen: /usr/bin/doxygen (found version "1.8.13") found components: doxygen dot
-- ENABLE_SIMMETRIX: ON
-- ENABLE_OMEGA_H: OFF
-- ENABLE_FPP: OFF
-- Building with SimModSuite 16.0.220326
-- SIM_ARCHOS x64_rhel8_gcc83
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
CMake Warning (dev) at /usr/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:273 (message):
The package name passed to `find_package_handle_standard_args`
(SIMMODSUITE) does not match the name of the calling package (SimModSuite).
This can lead to problems in calling code that expects `find_package`
result variables (e.g., `_FOUND`) to follow a certain pattern.
Call Stack (most recent call first):
cmake/FindSimModSuite.cmake:177 (find_package_handle_standard_args)
CMakeLists.txt:114 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.
-- Found SIMMODSUITE: /export/dump/ulrich/myLibs/simModelerLib/16.0-220326/lib/x64_rhel8_gcc83/libSimPartitionedMesh-mpi.a;/export/dump/ulrich/myLibs/simModelerLib/16.0-220326/lib/x64_rhel8_gcc83/libSimDiscrete.a;/export/dump/ulrich/myLibs/simModelerLib/16.0-220326/lib/x64_rhel8_gcc83/libSimField.a;/export/dump/ulrich/myLibs/simModelerLib/16.0-220326/lib/x64_rhel8_gcc83/libSimAdvMeshing.a;/export/dump/ulrich/myLibs/simModelerLib/16.0-220326/lib/x64_rhel8_gcc83/libSimPartitionedMesh-mpi.a;/export/dump/ulrich/myLibs/simModelerLib/16.0-220326/lib/x64_rhel8_gcc83/libSimMeshing.a;/export/dump/ulrich/myLibs/simModelerLib/16.0-220326/lib/x64_rhel8_gcc83/libSimMeshTools.a;/export/dump/ulrich/myLibs/simModelerLib/16.0-220326/lib/x64_rhel8_gcc83/libSimModel.a;/export/dump/ulrich/myLibs/simModelerLib/16.0-220326/lib/x64_rhel8_gcc83/libSimPartitionWrapper-mpich3.a
-- LION_COMPRESS: OFF
-- PCU_COMPRESS: OFF
-- ENABLE_FIELDSIM: OFF
-- MDS_SET_MAX: 256
-- MDS_ID_TYPE: int
-- ENABLE_ZOLTAN: OFF
-- Looking for clock_gettime
-- Looking for clock_gettime - found
-- ENABLE_STK: OFF
-- ENABLE_STK_MESH: OFF
-- ENABLE_DSP: OFF
-- Looking for mallinfo2
-- Looking for mallinfo2 - not found
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:
SCOREC_EXTRA_C_FLAGS
-- Build files have been written to: /export/dump/ulrich/myLibs/core/build
ulrich@heisenbug:/export/dump/ulrich/myLibs/core/build$ make
Scanning dependencies of target lion
[ 1%] Building CXX object lion/CMakeFiles/lion.dir/lionBase64.cc.o
[ 1%] Building C object lion/CMakeFiles/lion.dir/lionPrint.c.o
[ 1%] Building CXX object lion/CMakeFiles/lion.dir/lionNoZLib.cc.o
[ 1%] Linking CXX static library liblion.a
[ 1%] Built target lion
Scanning dependencies of target pcu
[ 1%] Building C object pcu/CMakeFiles/pcu.dir/pcu.c.o
[ 1%] Building C object pcu/CMakeFiles/pcu.dir/pcu_aa.c.o
[ 2%] Building C object pcu/CMakeFiles/pcu.dir/pcu_coll.c.o
[ 2%] Building C object pcu/CMakeFiles/pcu.dir/pcu_io.c.o
[ 2%] Building C object pcu/CMakeFiles/pcu.dir/pcu_buffer.c.o
[ 2%] Building C object pcu/CMakeFiles/pcu.dir/pcu_mpi.c.o
[ 2%] Building C object pcu/CMakeFiles/pcu.dir/pcu_msg.c.o
[ 4%] Building C object pcu/CMakeFiles/pcu.dir/pcu_order.c.o
[ 4%] Building C object pcu/CMakeFiles/pcu.dir/pcu_pmpi.c.o
[ 4%] Building C object pcu/CMakeFiles/pcu.dir/pcu_util.c.o
[ 4%] Building C object pcu/CMakeFiles/pcu.dir/noto/noto_malloc.c.o
[ 4%] Building C object pcu/CMakeFiles/pcu.dir/reel/reel.c.o
[ 4%] Linking C static library libpcu.a
[ 4%] Built target pcu
Scanning dependencies of target gmi
[ 4%] Building C object gmi/CMakeFiles/gmi.dir/gmi.c.o
[ 4%] Building C object gmi/CMakeFiles/gmi.dir/agm.c.o
[ 4%] Building C object gmi/CMakeFiles/gmi.dir/gmi_base.c.o
[ 4%] Building C object gmi/CMakeFiles/gmi.dir/gmi_file.c.o
[ 5%] Building C object gmi/CMakeFiles/gmi.dir/gmi_lookup.c.o
[ 5%] Building C object gmi/CMakeFiles/gmi.dir/gmi_mesh.c.o
[ 5%] Building C object gmi/CMakeFiles/gmi.dir/gmi_null.c.o
[ 5%] Building C object gmi/CMakeFiles/gmi.dir/gmi_analytic.c.o
[ 5%] Linking CXX static library libgmi.a
[ 5%] Built target gmi
Scanning dependencies of target gmi_sim
[ 6%] Building CXX object gmi_sim/CMakeFiles/gmi_sim.dir/gmi_sim.cc.o
In file included from /opt/software/openmpi/buster/4.1.0_gcc-10.2.0/include/openmpi/ompi/mpi/cxx/mpicxx.h:277,
from /opt/software/openmpi/buster/4.1.0_gcc-10.2.0/include/mpi.h:2887,
from /export/dump/ulrich/myLibs/core/pcu/PCU.h:16,
from /export/dump/ulrich/myLibs/core/gmi_sim/gmi_sim.cc:10:
/opt/software/openmpi/buster/4.1.0_gcc-10.2.0/include/openmpi/ompi/mpi/cxx/op_inln.h: In member function ‘virtual void MPI::Op::Init(void (*)(const void*, void*, int, const MPI::Datatype&), bool)’:
/opt/software/openmpi/buster/4.1.0_gcc-10.2.0/include/openmpi/ompi/mpi/cxx/op_inln.h:121:25: error: cast between incompatible function types from ‘void (*)(void*, void*, int*, ompi_datatype_t**, void (*)(void*, void*, int*, ompi_datatype_t**))’ to ‘void (*)(void*, void*, int*, ompi_datatype_t**)’ [-Werror=cast-function-type]
121 | (void)MPI_Op_create((MPI_User_function*) ompi_mpi_cxx_op_intercept,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/software/openmpi/buster/4.1.0_gcc-10.2.0/include/openmpi/ompi/mpi/cxx/op_inln.h:123:38: error: cast between incompatible function types from ‘void (*)(const void*, void*, int, const MPI::Datatype&)’ to ‘void (*)(void*, void*, int*, ompi_datatype_t**)’ [-Werror=cast-function-type]
123 | ompi_op_set_cxx_callback(mpi_op, (MPI_User_function*) func);
| ^~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors
make[2]: *** [gmi_sim/CMakeFiles/gmi_sim.dir/build.make:82: gmi_sim/CMakeFiles/gmi_sim.dir/gmi_sim.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:876: gmi_sim/CMakeFiles/gmi_sim.dir/all] Error 2
make: *** [Makefile:160: all] Error 2
Thanks in advance, Thomas Ulrich.
I ran into similar issues in the past when I use recent compilers. Why is Werror activated by default?
@Thomas-Ulrich Thank you for reporting this and providing all the details.
It looks like we are hitting this warning/error described here:
https://github.com/open-mpi/ompi/issues/5157
I tried, and failed, to reproduce this on my arch linux based system with GCC 11.2.0 and OpenMPI 4.1.2-1. I'm installing OpenMPI 4.1.0 now and will attempt a fix following what the other folks in that issue did. I'll keep you posted.
@krenzland Thank you for the feedback. Warnings and errors have been disabled by default with https://github.com/SCOREC/core/commit/1e604ecc4cbed9ff7bd562c78781d6fe9c039acc. This should appear in master tomorrow morning.