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

error: array subscript -1 is outside array bounds of ‘const char [30]’ [-Werror=array-bounds] #1564

Closed JensUngerer closed 1 year ago

JensUngerer commented 1 year ago

I've downloaded the latest version and i have just tried to compile it: [ 84%] Building CXX object tests/s25Main/audio/CMakeFiles/Test_sounds.dir/testSoundManager.cpp.o In file included from /home/jens/settlers/settlers25client/external/turtle/include/turtle/mock.hpp:14, from /home/jens/settlers/settlers25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:9, from /home/jens/settlers/settlers25client/tests/s25Main/audio/LoadMockupAudio.h:9, from /home/jens/settlers/settlers25client/tests/s25Main/audio/testSoundManager.cpp:5: /home/jens/settlers/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/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/settlers25client/external/turtle/include/turtle/detail/type_name.hpp:16, from /home/jens/settlers/settlers25client/external/turtle/include/turtle/detail/context.hpp:13, from /home/jens/settlers/settlers25client/external/turtle/include/turtle/detail/function.hpp:15, from /home/jens/settlers/settlers25client/external/turtle/include/turtle/detail/functor.hpp:13, from /home/jens/settlers/settlers25client/external/turtle/include/turtle/reset.hpp:13, from /home/jens/settlers/settlers25client/external/turtle/include/turtle/cleanup.hpp:13, from /home/jens/settlers/settlers25client/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/settlers25client/tests/mockupDrivers/../mockupDrivers/MockupAudioDriver.h:41:5, inlined from ‘void SoundTests::BirdSounds::test_method()’ at /home/jens/settlers/settlers25client/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

JensUngerer commented 1 year ago

workaround: disable warnings

 cmake -DRTTR_ENABLE_WERROR=OFF -DCMAKE_BUILD_TYPE=Release ..
make
Flamefire commented 1 year ago

Hi, the error/warning is an issue in Boost which will be fixed in 1.82 which we can't do anything about. I'm not sure why it shows a warning in Boost installed at /usr/include at all as that should be marked a "system include" and hence not generate warnings at all. Maybe try with another/newer version of CMake and/or compiler.

Anyway -DRTTR_ENABLE_WERROR=OFF is a very valid way to avoid this. Hence closing.

Hope that helps!