Cataclysm-DDA icon indicating copy to clipboard operation
Cataclysm-DDA copied to clipboard

Error in `dbl_or_var_part` w/ GCC v11.4.0

Open alef opened this issue 1 year ago • 2 comments

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

alef avatar Apr 21 '24 13:04 alef

I’m getting the same thing with gcc 11.3.0. It builds without error if I specify RELEASE=1

db48x avatar Apr 23 '24 22:04 db48x

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.

github-actions[bot] avatar May 23 '24 22:05 github-actions[bot]