SCOREC / core

parallel finite element unstructured meshes
Other
179 stars 63 forks source link

cast between incompatible function types when compiling core with gcc/10.2.0 and mpi.ompi/4.1.0 #363

Closed Thomas-Ulrich closed 11 months ago

Thomas-Ulrich commented 2 years ago

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.

krenzland commented 2 years ago

I ran into similar issues in the past when I use recent compilers. Why is Werror activated by default?

cwsmith commented 2 years ago

@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.