Return-To-The-Roots / s25client

Return To The Roots (Settlers II(R) Clone)
http://www.rttr.info
GNU General Public License v2.0
470 stars 75 forks source link

Compile error `dangling reference` #1587

Closed erenard closed 1 year ago

erenard commented 1 year ago

Steps done to compile:

git clone --recursive https://github.com/Return-To-The-Roots/s25client s25client
cd s25client
mkdir -p build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr -D RTTR_BUILD_UPDATER=OFF -D RTTR_USE_SYSTEM_LIBS=ON -D BUILD_TESTING=OFF -D LUA_INCLUDE_DIR=/usr/include/lua5.1/ ..

Also tried the procedure with cmake -DCMAKE_BUILD_TYPE=Release .. And then LC_ALL=C make gives the following error:

[ 36%] Building CXX object libs/s25main/CMakeFiles/s25Main.dir/Loader.cpp.o
/home/eric/Sources/s25client/libs/s25main/Loader.cpp: In member function 'void Loader::fillCaches()':
/home/eric/Sources/s25client/libs/s25main/Loader.cpp:688:29: error: possibly dangling reference to a temporary [-Werror=dangling-reference]
  688 |                 const auto& fightAnimIds = natFightAnimIds[rank][dir];
      |                             ^~~~~~~~~~~~
/home/eric/Sources/s25client/libs/s25main/Loader.cpp:688:69: note: the temporary was destroyed at the end of the full expression '(& natFightAnimIds)->helpers::MultiArray<FightAnimation, 5, 2>::operator[](((size_t)rank)).helpers::detail::MultiArrayRef<const FightAnimation, 2>::operator[](((size_t)dir))'
  688 |                 const auto& fightAnimIds = natFightAnimIds[rank][dir];
      |                                                                     ^
/home/eric/Sources/s25client/libs/s25main/Loader.cpp:689:29: error: possibly dangling reference to a temporary [-Werror=dangling-reference]
  689 |                 const auto& altFightAnimIds = altNatFightAnimIds[rank][dir];
      |                             ^~~~~~~~~~~~~~~
/home/eric/Sources/s25client/libs/s25main/Loader.cpp:689:75: note: the temporary was destroyed at the end of the full expression '(& altNatFightAnimIds)->helpers::MultiArray<FightAnimation, 5, 2>::operator[](((size_t)rank)).helpers::detail::MultiArrayRef<const FightAnimation, 2>::operator[](((size_t)dir))'
  689 |                 const auto& altFightAnimIds = altNatFightAnimIds[rank][dir];
      |                                                                           ^
cc1plus: all warnings being treated as errors
make[2]: *** [libs/s25main/CMakeFiles/s25Main.dir/build.make:454: libs/s25main/CMakeFiles/s25Main.dir/Loader.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1140: libs/s25main/CMakeFiles/s25Main.dir/all] Error 2
make: *** [Makefile:156: all] Error 2

Additional infos

> uname --all
Linux archlinux 6.3.1-zen1-1-zen #1 ZEN SMP PREEMPT_DYNAMIC Mon, 01 May 2023 17:42:12 +0000 x86_64 GNU/Linux
Flow86 commented 1 year ago

Hi, oh you have localized error messages here, can you please rerun with

LANG=C cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr -D RTTR_BUILD_UPDATER=OFF -D RTTR_USE_SYSTEM_LIBS=ON -D BUILD_TESTING=OFF -D LUA_INCLUDE_DIR=/usr/include/lua5.1/ ..

thank you

Flamefire commented 1 year ago

Actually it is the make showing the error/warning, so best to report bugs created by running LC_ALL=C make instead of only make

In this case the used C++ compiler would be interesting (shown at the start of the first cmake-configure run, possibly also in later runs)

However here it is a false positive on -Werror=dangling-reference, a warning known to produce false positives for non-owning containers such as here.

Opened a PR to fix that.

erenard commented 1 year ago

Wow, you guys are super quick to respond !

I replaced the make output with the LC_ALL=C make in the original post.

Here is the output of the cmake command:

> cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr \
    -D RTTR_BUILD_UPDATER=OFF \
    -D RTTR_USE_SYSTEM_LIBS=ON \
    -D BUILD_TESTING=OFF \
    -D LUA_INCLUDE_DIR=/usr/include/lua5.1/ ..

-- The C compiler identification is GNU 13.1.1
-- The CXX compiler identification is GNU 13.1.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using CMake 3.26.3
-- Configuring for native compiling to Linux-6.3.1-zen1-1-zen on x86_64
-- Performing Test CXX_FLAG__mfpmath_sse_SUPPORTED
-- Performing Test CXX_FLAG__mfpmath_sse_SUPPORTED - Success
-- Performing Test C_FLAG__mfpmath_sse_SUPPORTED
-- Performing Test C_FLAG__mfpmath_sse_SUPPORTED - Success
-- Performing Test CXX_FLAG__msse2_SUPPORTED
-- Performing Test CXX_FLAG__msse2_SUPPORTED - Success
-- Performing Test C_FLAG__msse2_SUPPORTED
-- Performing Test C_FLAG__msse2_SUPPORTED - Success
-- Performing Test FAST_MATH_SUPPORTED
-- Performing Test FAST_MATH_SUPPORTED - Success
CMake Warning at external/libutil/cmake/FindClangFormat.cmake:43 (message):
  /usr/bin/clang-format does not match version 10.x.  Resetting...Reconfigure
  or set manually to use the correct version
Call Stack (most recent call first):
  CMakeLists.txt:131 (find_package)

-- Could NOT find ClangFormat: Found unsuitable version "15.0.7", but required is exact version "10" (found )
-- Performing Test HAVE_STRUCT_TIMESPEC
-- Performing Test HAVE_STRUCT_TIMESPEC - Success
-- Looking for valgrind/memcheck.h
-- Looking for valgrind/memcheck.h - not found
-- Linking against boost dynamic or static libraries
-- Testing ('make test') is disabled. Add -DBUILD_TESTING=ON to enable tests.
-- Found Boost: /usr/lib/cmake/Boost-1.81.0/BoostConfig.cmake (found suitable version "1.81.0", minimum required is "1.69") found components: filesystem iostreams locale program_options
-- Found Boost: /usr/lib/cmake/Boost-1.81.0/BoostConfig.cmake (found version "1.81.0") found components: nowide
-- Linking against boost dynamic or static libraries
-- Found Boost: /usr/lib/cmake/Boost-1.81.0/BoostConfig.cmake (found suitable version "1.81.0", minimum required is "1.64.0")
-- Performing Test C_WARNING__Wunused_command_line_argument_SUPPORTED
-- Performing Test C_WARNING__Wunused_command_line_argument_SUPPORTED - Failed
-- Performing Test CXX_WARNING__Wunused_command_line_argument_SUPPORTED
-- Performing Test CXX_WARNING__Wunused_command_line_argument_SUPPORTED - Failed
-- Performing Test CXX_WARNING__fno_strict_aliasing_SUPPORTED
-- Performing Test CXX_WARNING__fno_strict_aliasing_SUPPORTED - Success
-- Performing Test CXX_WARNING__pedantic_errors_SUPPORTED
-- Performing Test CXX_WARNING__pedantic_errors_SUPPORTED - Success
-- Performing Test CXX_WARNING__Qunused_arguments_SUPPORTED
-- Performing Test CXX_WARNING__Qunused_arguments_SUPPORTED - Failed
-- Performing Test CXX_WARNING__Wcast_qual_SUPPORTED
-- Performing Test CXX_WARNING__Wcast_qual_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wdisabled_optimization_SUPPORTED
-- Performing Test CXX_WARNING__Wdisabled_optimization_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wfloat_conversion_SUPPORTED
-- Performing Test CXX_WARNING__Wfloat_conversion_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wformat_nonliteral_SUPPORTED
-- Performing Test CXX_WARNING__Wformat_nonliteral_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wformat_security_SUPPORTED
-- Performing Test CXX_WARNING__Wformat_security_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wformat_2_SUPPORTED
-- Performing Test CXX_WARNING__Wformat_2_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wimport_SUPPORTED
-- Performing Test CXX_WARNING__Wimport_SUPPORTED - Success
-- Performing Test CXX_WARNING__Winit_self_SUPPORTED
-- Performing Test CXX_WARNING__Winit_self_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wlogical_op_SUPPORTED
-- Performing Test CXX_WARNING__Wlogical_op_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wmissing_declarations_SUPPORTED
-- Performing Test CXX_WARNING__Wmissing_declarations_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wmissing_field_initializers_SUPPORTED
-- Performing Test CXX_WARNING__Wmissing_field_initializers_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wmissing_format_attribute_SUPPORTED
-- Performing Test CXX_WARNING__Wmissing_format_attribute_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wmissing_include_dirs_SUPPORTED
-- Performing Test CXX_WARNING__Wmissing_include_dirs_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wmissing_noreturn_SUPPORTED
-- Performing Test CXX_WARNING__Wmissing_noreturn_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wpacked_SUPPORTED
-- Performing Test CXX_WARNING__Wpacked_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wparentheses_SUPPORTED
-- Performing Test CXX_WARNING__Wparentheses_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wpedantic_SUPPORTED
-- Performing Test CXX_WARNING__Wpedantic_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wpointer_arith_SUPPORTED
-- Performing Test CXX_WARNING__Wpointer_arith_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wstrict_aliasing_2_SUPPORTED
-- Performing Test CXX_WARNING__Wstrict_aliasing_2_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wundef_SUPPORTED
-- Performing Test CXX_WARNING__Wundef_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wunused_SUPPORTED
-- Performing Test CXX_WARNING__Wunused_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wunused_parameter_SUPPORTED
-- Performing Test CXX_WARNING__Wunused_parameter_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wwrite_strings_SUPPORTED
-- Performing Test CXX_WARNING__Wwrite_strings_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wunknown_pragmas_SUPPORTED
-- Performing Test CXX_WARNING__Wunknown_pragmas_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wctor_dtor_privacy_SUPPORTED
-- Performing Test CXX_WARNING__Wctor_dtor_privacy_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wnoexcept_SUPPORTED
-- Performing Test CXX_WARNING__Wnoexcept_SUPPORTED - Success
-- Performing Test CXX_WARNING__Woverloaded_virtual_SUPPORTED
-- Performing Test CXX_WARNING__Woverloaded_virtual_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wstrict_null_sentinel_SUPPORTED
-- Performing Test CXX_WARNING__Wstrict_null_sentinel_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wmaybe_uninitialized_SUPPORTED
-- Performing Test CXX_WARNING__Wmaybe_uninitialized_SUPPORTED - Success
-- Performing Test CXX_WARNING__Winconsistent_missing_override_SUPPORTED
-- Performing Test CXX_WARNING__Winconsistent_missing_override_SUPPORTED - Failed
-- Performing Test CXX_WARNING__Wredundant_decls_SUPPORTED
-- Performing Test CXX_WARNING__Wredundant_decls_SUPPORTED - Success
-- Performing Test CXX_WARNING__Wunreachable_code_SUPPORTED
-- Performing Test CXX_WARNING__Wunreachable_code_SUPPORTED - Success
-- Linking against boost dynamic or static libraries
-- Found Boost: /usr/lib/cmake/Boost-1.81.0/BoostConfig.cmake (found suitable version "1.81.0", minimum required is "1.69") found components: system filesystem iostreams
-- Found Boost: /usr/lib/cmake/Boost-1.81.0/BoostConfig.cmake (found suitable version "1.81.0", minimum required is "1.69") found components: filesystem
-- Found Miniupnpc: /usr/include
-- Found Iconv: /usr/include
-- Found Boost: /usr/lib/cmake/Boost-1.81.0/BoostConfig.cmake (found suitable version "1.81.0", minimum required is "1.55") found components: filesystem
-- Found Boost: /usr/lib/cmake/Boost-1.81.0/BoostConfig.cmake (found suitable version "1.81.0", minimum required is "1.64")
-- Found SDL2: /usr/include/SDL2 (found version "2.26.5")
-- Found Samplerate: /usr/lib/libsamplerate.so (found suitable version "0.2.2", minimum required is "0.1.9")
-- Found Boost: /usr/lib/cmake/Boost-1.81.0/BoostConfig.cmake (found suitable version "1.81.0", minimum required is "1.58")
-- Found Lua: /usr/lib/liblua5.1.so (found suitable version "5.1.5", minimum required is "5.1")
-- Found BZip2: /usr/lib/libbz2.so (found suitable version "1.0.8", minimum required is "1.0.6")
-- Looking for BZ2_bzCompressInit
-- Looking for BZ2_bzCompressInit - found
-- Found SDL2: /usr/include/SDL2 (found suitable version "2.26.5", minimum required is "2")
-- Found SDL_mixer: /usr/lib/libSDL2_mixer.so (found suitable version "2.6.3", minimum required is "2.0.1")
-- Found SDL2: /usr/include/SDL2 (found suitable version "2.26.5", minimum required is "2.0.2")
-- Found Gettext: /usr/bin/msgmerge
-- RTTR Version will be: 20230505-5828498a96227f8520674cb2c89fdd0cc901e30c
-- Configuring done (2.8s)
-- Generating done (0.1s)
-- Build files have been written to: /home/eric/Sources/s25client/build
erenard commented 1 year ago

I had to add -D RTTR_ENABLE_WERROR=OFF to the cmake command line to ignore the compilation warning.