Error in `dbl_or_var_part` w/ GCC v11.4.0
Describe the bug
Building on my WSL2 gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0.
This is the error in npctalk.cpp from a CMake preset I am currently working on (edit):
[31/33] Building CXX object src/CMakeFiles/cataclysm-common.dir/Debug/npctalk.cpp.o
FAILED: src/CMakeFiles/cataclysm-common.dir/Debug/npctalk.cpp.o
ccache /usr/bin/c++
-DBACKTRACE -DCMAKE -DDATA_DIR_PREFIX -DGIT_VERSION -DLOCALIZE -DPREFIX=/usr/local -DRELEASE -DUSE_HOME_DIR -DCMAKE_INTDIR=\"Debug\"
-I/z/alef/src -isystem /z/alef/src/third-party
-Werror -Wall -Wextra -Wformat-signedness -Wlogical-op -Wmissing-declarations -Wmissing-noreturn
-Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual -Wpedantic -Wsuggest-override
-Wunused-macros -Wzero-as-null-pointer-constant -Wno-unknown-warning-option -Wno-dangling-reference
-Wno-c++20-compat -Wno-unknown-warning -Wredundant-decls
-fsigned-char -g1 -Og -g2 -pthread -std=c++17
-MD
-MT src/CMakeFiles/cataclysm-common.dir/Debug/npctalk.cpp.o
-MF src/CMakeFiles/cataclysm-common.dir/Debug/npctalk.cpp.o.d
-o src/CMakeFiles/cataclysm-common.dir/Debug/npctalk.cpp.o -c /z/alef/src/npctalk.cpp
In file included from /z/alef/src/mapgen.h:17,
from /z/alef/src/mapgendata.h:11,
from /z/alef/src/build_reqs.h:10,
from /z/alef/src/recipe.h:17,
from /z/alef/src/craft_command.h:11,
from /z/alef/src/basecamp.h:19,
from /z/alef/src/npc.h:24,
from /z/alef/src/dialogue.h:17,
from /z/alef/src/npctalk.cpp:1:
In member function ‘abstract_var_info<std::__cxx11::basic_string<char> >& abstract_var_info<std::__cxx11::basic_string<char> >::operator=(abstract_var_info<std::__cxx11::basic_string<char> >&&)’,
inlined from ‘constexpr void std::_Optional_payload_base<_Tp>::_M_move_assign(std::_Optional_payload_base<_Tp>&&) [with _Tp = abstract_var_info<std::__cxx11::basic_string<char> >]’ at /usr/include/c++/11/optional:185:19,
inlined from ‘constexpr std::_Optional_payload<_Tp, true, false, false>& std::_Optional_payload<_Tp, true, false, false>::operator=(std::_Optional_payload<_Tp, true, false, false>&&) [with _Tp = abstract_var_info<std::__cxx11::basic_string<char> >]’ at /usr/include/c++/11/optional:382:22,
inlined from ‘constexpr std::_Optional_payload<_Tp, false, _Copy, _Move>& std::_Optional_payload<_Tp, false, _Copy, _Move>::operator=(std::_Optional_payload<_Tp, false, _Copy, _Move>&&) [with _Tp = abstract_var_info<std::__cxx11::basic_string<char> >; bool _Copy = false; bool _Move = false]’ at /usr/include/c++/11/optional:398:26,
inlined from ‘constexpr std::_Optional_base<_Tp, <anonymous>, <anonymous> >& std::_Optional_base<_Tp, <anonymous>, <anonymous> >::operator=(std::_Optional_base<_Tp, <anonymous>, <anonymous> >&&) [with _Tp = abstract_var_info<std::__cxx11::basic_string<char> >; bool <anonymous> = false; bool <anonymous> = false]’ at /usr/include/c++/11/optional:512:23,
inlined from ‘constexpr std::optional<abstract_var_info<std::__cxx11::basic_string<char> > >& std::optional<abstract_var_info<std::__cxx11::basic_string<char> > >::operator=(std::optional<abstract_var_info<std::__cxx11::basic_string<char> > >&&)’ at /usr/include/c++/11/optional:662:11,
inlined from ‘constexpr dbl_or_var_part& dbl_or_var_part::operator=(dbl_or_var_part&&)’ at /z/alef/src/dialogue_helpers.h:136:8,
inlined from ‘talk_effect_fun_t::func talk_effect_fun::{anonymous}::f_weighted_list_eocs(const JsonObject&, std::string_view)’ at /z/alef/src/npctalk.cpp:5505:61:
/z/alef/src/dialogue_helpers.h:33:8: error: ‘*(abstract_var_info<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >*)((char*)&<unnamed> + offsetof(dbl_or_var_part, dbl_or_var_part::var_val.std::optional<abstract_var_info<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::<unnamed>.std::_Optional_base<abstract_var_info<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, false, false>::<unnamed>)).abstract_var_info<std::__cxx11::basic_string<char> >::type’ may be used uninitialized [-Werror=maybe-uninitialized]
33 | struct abstract_var_info {
| ^~~~~~~~~~~~~~~~~
/z/alef/src/npctalk.cpp: In function ‘talk_effect_fun_t::func talk_effect_fun::{anonymous}::f_weighted_list_eocs(const JsonObject&, std::string_view)’:
/z/alef/src/npctalk.cpp:5505:61: note: ‘<anonymous>’ declared here
5505 | eoc_weight.min = dbl_or_var_part{ ja.next_int() };
| ^
In file included from /z/alef/src/mapgen.h:17,
from /z/alef/src/mapgendata.h:11,
from /z/alef/src/build_reqs.h:10,
from /z/alef/src/recipe.h:17,
from /z/alef/src/craft_command.h:11,
from /z/alef/src/basecamp.h:19,
from /z/alef/src/npc.h:24,
from /z/alef/src/dialogue.h:17,
from /z/alef/src/npctalk.cpp:1:
In constructor ‘abstract_var_info<std::__cxx11::basic_string<char> >::abstract_var_info(abstract_var_info<std::__cxx11::basic_string<char> >&&)’,
inlined from ‘void std::_Construct(_Tp*, _Args&& ...) [with _Tp = abstract_var_info<std::__cxx11::basic_string<char> >; _Args = {abstract_var_info<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >}]’ at /usr/include/c++/11/bits/stl_construct.h:119:7,
inlined from ‘constexpr void std::_Optional_payload_base<_Tp>::_M_construct(_Args&& ...) [with _Args = {abstract_var_info<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >}; _Tp = abstract_var_info<std::__cxx11::basic_string<char> >]’ at /usr/include/c++/11/optional:251:19,
inlined from ‘constexpr void std::_Optional_payload_base<_Tp>::_M_move_assign(std::_Optional_payload_base<_Tp>&&) [with _Tp = abstract_var_info<std::__cxx11::basic_string<char> >]’ at /usr/include/c++/11/optional:189:26,
inlined from ‘constexpr std::_Optional_payload<_Tp, true, false, false>& std::_Optional_payload<_Tp, true, false, false>::operator=(std::_Optional_payload<_Tp, true, false, false>&&) [with _Tp = abstract_var_info<std::__cxx11::basic_string<char> >]’ at /usr/include/c++/11/optional:382:22,
inlined from ‘constexpr std::_Optional_payload<_Tp, false, _Copy, _Move>& std::_Optional_payload<_Tp, false, _Copy, _Move>::operator=(std::_Optional_payload<_Tp, false, _Copy, _Move>&&) [with _Tp = abstract_var_info<std::__cxx11::basic_string<char> >; bool _Copy = false; bool _Move = false]’ at /usr/include/c++/11/optional:398:26,
inlined from ‘constexpr std::_Optional_base<_Tp, <anonymous>, <anonymous> >& std::_Optional_base<_Tp, <anonymous>, <anonymous> >::operator=(std::_Optional_base<_Tp, <anonymous>, <anonymous> >&&) [with _Tp = abstract_var_info<std::__cxx11::basic_string<char> >; bool <anonymous> = false; bool <anonymous> = false]’ at /usr/include/c++/11/optional:512:23,
inlined from ‘constexpr std::optional<abstract_var_info<std::__cxx11::basic_string<char> > >& std::optional<abstract_var_info<std::__cxx11::basic_string<char> > >::operator=(std::optional<abstract_var_info<std::__cxx11::basic_string<char> > >&&)’ at /usr/include/c++/11/optional:662:11,
inlined from ‘constexpr dbl_or_var_part& dbl_or_var_part::operator=(dbl_or_var_part&&)’ at /z/alef/src/dialogue_helpers.h:136:8,
inlined from ‘talk_effect_fun_t::func talk_effect_fun::{anonymous}::f_weighted_list_eocs(const JsonObject&, std::string_view)’ at /z/alef/src/npctalk.cpp:5505:61:
/z/alef/src/dialogue_helpers.h:33:8: error: ‘*(abstract_var_info<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >*)((char*)&<unnamed> + offsetof(dbl_or_var_part, dbl_or_var_part::var_val.std::optional<abstract_var_info<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::<unnamed>.std::_Optional_base<abstract_var_info<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, false, false>::<unnamed>)).abstract_var_info<std::__cxx11::basic_string<char> >::type’ may be used uninitialized [-Werror=maybe-uninitialized]
33 | struct abstract_var_info {
| ^~~~~~~~~~~~~~~~~
/z/alef/src/npctalk.cpp: In function ‘talk_effect_fun_t::func talk_effect_fun::{anonymous}::f_weighted_list_eocs(const JsonObject&, std::string_view)’:
/z/alef/src/npctalk.cpp:5505:61: note: ‘<anonymous>’ declared here
5505 | eoc_weight.min = dbl_or_var_part{ ja.next_int() };
| ^
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-unknown-warning’ may have been intended to silence earlier diagnostics
cc1plus: note: unrecognized command-line option ‘-Wno-dangling-reference’ may have been intended to silence earlier diagnostics
cc1plus: note: unrecognized command-line option ‘-Wno-unknown-warning-option’ may have been intended to silence earlier diagnostics
cc1plus: all warnings being treated as errors
ninja: build stopped: cannot make progress due to previous errors.
This should mean that dbl_or_var_part::var_val was not initialized by the explicit dbl_or_var_part constructor.
Attach save file
N/A
Steps to reproduce
Cannot reproduce with make -j4 CCACHE=1 RELEASE=1 MSYS=0 DYNAMIC_LINKING=1 SDL=0 TILES=0 SOUND=0 LOCALIZE=0 LINTJSON=0 ASTYLE=0 TESTS=0 --keep-going cataclysm maybe because flags are different (edit):
CCACHE_SLOPPINESS=pch_defines,time_macros,include_file_ctime,include_file_mtime ccache
g++ -Isrc -isystem src/third-party
-DRELEASE -DGIT_VERSION -DBACKTRACE -Os
-Wodr -Werror -Wall -Wextra -Wformat-signedness -Wlogical-op -Wmissing-declarations
-Wmissing-noreturn -Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual
-Wpedantic -Wsuggest-override -Wunused-macros -Wzero-as-null-pointer-constant
-Wno-unknown-warning-option -Wno-dangling-reference -Wno-c++20-compat -Wredundant-decls
-g1 -fsigned-char -std=c++17
-DIMTUI -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600
-MMD -MP -Winvalid-pch -include pch/main-pch.hpp
-c src/npctalk.cpp -o obj/npctalk.o
It compiles fine.
Expected behavior
No.
Screenshots
No response
Versions and configuration
WSL2 Ubuntu 22.04
Additional context
No response
I’m getting the same thing with gcc 11.3.0. It builds without error if I specify RELEASE=1
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. Please do not bump or comment on this issue unless you are actively working on it. Stale issues, and stale issues that are closed are still considered.