Return-To-The-Roots / s25client

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

make failes on current HEAD version -Werror=array-bounds s25client/external/turtle/include/turtle/mock.hpp:12: #1538

Closed Fisk-Germany closed 1 year ago

Fisk-Germany commented 1 year ago

When trying to compile via make - compile process fails:

[ 84%] Building CXX object tests/s25Main/audio/CMakeFiles/Test_sounds.dir/testSoundManager.cpp.o
In file included from /home/jens/settlers/s25client/external/turtle/include/turtle/mock.hpp:14,
                 from /home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:9,
                 from /home/jens/settlers/s25client/tests/s25Main/audio/LoadMockupAudio.h:9,
                 from /home/jens/settlers/s25client/tests/s25Main/audio/testSoundManager.cpp:5:
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:21:27: warning: ‘virtual mock::detail::result_type_t<void()> MockAudioDriverCallback::Msg_MusicFinished()’ can be marked override [-Wsuggest-override]
   21 |     MOCK_NON_CONST_METHOD(Msg_MusicFinished, 0);
      |                           ^~~~~~~~~~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:35:27: warning: ‘virtual mock::detail::result_type_t<driver::RawSoundHandle(const std::__cxx11::basic_string<char>&)> MockupAudioDriver::LoadEffect(mock::detail::parameter_t<driver::RawSoundHandle(const std::__cxx11::basic_string<char>&), 0>)’ can be marked override [-Wsuggest-override]
   35 |     MOCK_NON_CONST_METHOD(LoadEffect, 1, driver::RawSoundHandle(const std::string&));
      |                           ^~~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:36:27: warning: ‘virtual mock::detail::result_type_t<driver::RawSoundHandle(const std::vector<char>&, const std::__cxx11::basic_string<char>&)> MockupAudioDriver::LoadEffect(mock::detail::parameter_t<driver::RawSoundHandle(const std::vector<char>&, const std::__cxx11::basic_string<char>&), 0>, mock::detail::parameter_t<driver::RawSoundHandle(const std::vector<char>&, const std::__cxx11::basic_string<char>&), 1>)’ can be marked override [-Wsuggest-override]
   36 |     MOCK_NON_CONST_METHOD(LoadEffect, 2, driver::RawSoundHandle(const std::vector<char>&, const std::string&),
      |                           ^~~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:38:27: warning: ‘virtual mock::detail::result_type_t<driver::RawSoundHandle(const std::__cxx11::basic_string<char>&)> MockupAudioDriver::LoadMusic(mock::detail::parameter_t<driver::RawSoundHandle(const std::__cxx11::basic_string<char>&), 0>)’ can be marked override [-Wsuggest-override]
   38 |     MOCK_NON_CONST_METHOD(LoadMusic, 1, driver::RawSoundHandle(const std::string&));
      |                           ^~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:39:27: warning: ‘virtual mock::detail::result_type_t<driver::RawSoundHandle(const std::vector<char>&, const std::__cxx11::basic_string<char>&)> MockupAudioDriver::LoadMusic(mock::detail::parameter_t<driver::RawSoundHandle(const std::vector<char>&, const std::__cxx11::basic_string<char>&), 0>, mock::detail::parameter_t<driver::RawSoundHandle(const std::vector<char>&, const std::__cxx11::basic_string<char>&), 1>)’ can be marked override [-Wsuggest-override]
   39 |     MOCK_NON_CONST_METHOD(LoadMusic, 2, driver::RawSoundHandle(const std::vector<char>&, const std::string&),
      |                           ^~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:41:27: warning: ‘virtual mock::detail::result_type_t<int(void*, unsigned char, bool)> MockupAudioDriver::doPlayEffect(mock::detail::parameter_t<int(void*, unsigned char, bool), 0>, mock::detail::parameter_t<int(void*, unsigned char, bool), 1>, mock::detail::parameter_t<int(void*, unsigned char, bool), 2>)’ can be marked override [-Wsuggest-override]
   41 |     MOCK_NON_CONST_METHOD(doPlayEffect, 3, int(driver::RawSoundHandle::DriverData, uint8_t, bool));
      |                           ^~~~~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:42:27: warning: ‘virtual mock::detail::result_type_t<void(const driver::RawSoundHandle&, int)> MockupAudioDriver::PlayMusic(mock::detail::parameter_t<void(const driver::RawSoundHandle&, int), 0>, mock::detail::parameter_t<void(const driver::RawSoundHandle&, int), 1>)’ can be marked override [-Wsuggest-override]
   42 |     MOCK_NON_CONST_METHOD(PlayMusic, 2);
      |                           ^~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:43:27: warning: ‘virtual mock::detail::result_type_t<void()> MockupAudioDriver::StopMusic()’ can be marked override [-Wsuggest-override]
   43 |     MOCK_NON_CONST_METHOD(StopMusic, 0);
      |                           ^~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:44:27: warning: ‘virtual mock::detail::result_type_t<void(int)> MockupAudioDriver::doStopEffect(mock::detail::parameter_t<void(int), 0>)’ can be marked override [-Wsuggest-override]
   44 |     MOCK_NON_CONST_METHOD(doStopEffect, 1, void(int));
      |                           ^~~~~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:45:27: warning: ‘virtual mock::detail::result_type_t<bool(EffectPlayId)> MockupAudioDriver::IsEffectPlaying(mock::detail::parameter_t<bool(EffectPlayId), 0>)’ can be marked override [-Wsuggest-override]
   45 |     MOCK_NON_CONST_METHOD(IsEffectPlaying, 1);
      |                           ^~~~~~~~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:46:27: warning: ‘virtual mock::detail::result_type_t<void(EffectPlayId, unsigned char)> MockupAudioDriver::ChangeVolume(mock::detail::parameter_t<void(EffectPlayId, unsigned char), 0>, mock::detail::parameter_t<void(EffectPlayId, unsigned char), 1>)’ can be marked override [-Wsuggest-override]
   46 |     MOCK_NON_CONST_METHOD(ChangeVolume, 2);
      |                           ^~~~~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:47:27: warning: ‘virtual mock::detail::result_type_t<void(unsigned char)> MockupAudioDriver::SetMasterEffectVolume(mock::detail::parameter_t<void(unsigned char), 0>)’ can be marked override [-Wsuggest-override]
   47 |     MOCK_NON_CONST_METHOD(SetMasterEffectVolume, 1);
      |                           ^~~~~~~~~~~~~~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:48:27: warning: ‘virtual mock::detail::result_type_t<void(unsigned char)> MockupAudioDriver::SetMusicVolume(mock::detail::parameter_t<void(unsigned char), 0>)’ can be marked override [-Wsuggest-override]
   48 |     MOCK_NON_CONST_METHOD(SetMusicVolume, 1);
      |                           ^~~~~~~~~~~~~~
/home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:49:27: warning: ‘virtual mock::detail::result_type_t<void(driver::RawSoundHandle)> MockupAudioDriver::doUnloadSound(mock::detail::parameter_t<void(driver::RawSoundHandle), 0>)’ can be marked override [-Wsuggest-override]
   49 |     MOCK_NON_CONST_METHOD(doUnloadSound, 1, void(driver::RawSoundHandle sound));
      |                           ^~~~~~~~~~~~~
In file included from /usr/include/boost/test/utils/basic_cstring/io.hpp:19,
                 from /home/jens/settlers/s25client/external/turtle/include/turtle/detail/type_name.hpp:16,
                 from /home/jens/settlers/s25client/external/turtle/include/turtle/detail/context.hpp:13,
                 from /home/jens/settlers/s25client/external/turtle/include/turtle/detail/function.hpp:15,
                 from /home/jens/settlers/s25client/external/turtle/include/turtle/detail/functor.hpp:13,
                 from /home/jens/settlers/s25client/external/turtle/include/turtle/reset.hpp:13,
                 from /home/jens/settlers/s25client/external/turtle/include/turtle/cleanup.hpp:13,
                 from /home/jens/settlers/s25client/external/turtle/include/turtle/mock.hpp:12:
In member function ‘boost::unit_test::basic_cstring<CharT>::size_type boost::unit_test::basic_cstring<CharT>::rfind(boost::unit_test::basic_cstring<CharT>) const [with CharT = const char]’,
    inlined from ‘mock::detail::function<int(void*, unsigned char, bool)>& MockupAudioDriver::doPlayEffect_mock(const mock::detail::context&, const boost::unit_test::const_string&) const’ at /home/jens/settlers/s25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:41:5,
    inlined from ‘void SoundTests::BirdSounds::test_method()’ at /home/jens/settlers/s25client/tests/s25Main/audio/testSoundManager.cpp:204:13:
/usr/include/boost/test/utils/basic_cstring/basic_cstring.hpp:571:20: error: array subscript -1 is outside array bounds of ‘const char [30]’ [-Werror=array-bounds]
  571 |     const_iterator last = begin()-1;
      |                    ^~~~
/usr/include/boost/test/utils/basic_cstring/basic_cstring.hpp:571:20: error: array subscript -1 is outside array bounds of ‘const char [30]’ [-Werror=array-bounds]
cc1plus: all warnings being treated as errors
make[2]: *** [tests/s25Main/audio/CMakeFiles/Test_sounds.dir/build.make:104: tests/s25Main/audio/CMakeFiles/Test_sounds.dir/testSoundManager.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:2122: tests/s25Main/audio/CMakeFiles/Test_sounds.dir/all] Error 2
make: *** [Makefile:166: all] Error 2
Flamefire commented 1 year ago

That's a warning only, however a valid one pointing to UB in Boost.Test. Which compiler (+version) are you using?

You can ignore warnings by configuring (CMake) with -DRTTR_ENABLE_WERROR=OFF

Fisk-Germany commented 1 year ago
git log -n 1
commit 0537322eb59cd418697ceeb35f21564150f0bdf4 (HEAD -> master, origin/master, origin/HEAD)
Author: KaiN <kain@piwnica.ws>
Date:   Tue Sep 20 18:38:11 2022 +0200

    Add lua function GetStatisticsValue()
Fisk-Germany commented 1 year ago
g++ --version
g++ (Debian 12.2.0-3) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Fisk-Germany commented 1 year ago
Return To The Roots v20221008-0537322eb59cd418697ceeb35f21564150f0bdf4
Compiled with GNU C++ version 12.2.0 for linux 64 Bit

Starting in "/home/jens/settlers/s25client/build"
Directory for user data (config etc.): "/home/jens/.s25rttr"
Searching for drivers in "/home/jens/settlers/s25client/build/lib/s25rttr/driver/video"
1 video drivers found!
Loaded video driver "(SDL2) OpenGL via SDL2-Library"
OpenGL 4.5 supported
Searching for drivers in "/home/jens/settlers/s25client/build/lib/s25rttr/driver/audio"
1 audio drivers found!
Loaded audio driver "(SDL2) Audio via SDL2_mixer-Library"

Starting the game
Loading "/home/jens/settlers/s25client/build/share/s25rttr/RTTR/assets/base/splash.bmp": done in 1ms
X Error of failed request:  GLXBadContextTag
  Major opcode of failed request:  148 (GLX)
  Minor opcode of failed request:  16 (X_GLXVendorPrivate)
  Serial number of failed request:  200
  Current serial number in output stream:  201
Fisk-Germany commented 1 year ago

with the described flag, it was possible to compile -> now it is running :-) thanks for your help