ethereum / solidity

Solidity, the Smart Contract Programming Language
https://soliditylang.org
GNU General Public License v3.0
22.78k stars 5.65k forks source link

error: storing the address of local variable 'remainingRefs' in '_187->_M_parent' [-Werror=dangling-pointer=] #14108

Closed lemenkov closed 1 year ago

lemenkov commented 1 year ago

Description

I've just run into another compilation issue when trying to compile Solidity 0.8.19 with GCC 13.0.1. The issue cannot be reproduced with GCC 12.2.1 and I suppose with the oldest ones.

Environment

Steps to Reproduce

Any attempt to compile Solidity with -Werror flag fails with the following error:

[ 18%] Building CXX object libevmasm/CMakeFiles/evmasm.dir/LinkerObject.cpp.o
cd /builddir/build/BUILD/solidity-0.8.19/redhat-linux-build/libevmasm && /usr/bin/g++ -DBOOST_ATOMIC_DYN_LINK -DBOOST_ATOMIC_NO_LIB -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_FILESYSTEM_NO_LIB -DBOOST_SYSTEM_DYN_LINK -DBOOST_SYSTEM_NO_LIB -DFMT_HEADER_ONLY=1 -DHAVE_CVC4 -DHAVE_Z3 -I/builddir/build/BUILD/solidity-0.8.19/redhat-linux-build/include -I/builddir/build/BUILD/solidity-0.8.19 -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fuse-ld=gold -O3 -DNDEBUG -std=c++17 -fstack-protector-strong -Wimplicit-fallthrough -fmacro-prefix-map=/builddir/build/BUILD/solidity-0.8.19=/solidity -Wpessimizing-move -Wredundant-move -Wall -Wextra -Werror -pedantic -Wmissing-declarations -Wno-unknown-pragmas -Wsign-conversion -Wconversion -Wextra-semi -Wduplicated-cond -Wlogical-op -fdiagnostics-color -MD -MT libevmasm/CMakeFiles/evmasm.dir/LinkerObject.cpp.o -MF CMakeFiles/evmasm.dir/LinkerObject.cpp.o.d -o CMakeFiles/evmasm.dir/LinkerObject.cpp.o -c /builddir/build/BUILD/solidity-0.8.19/libevmasm/LinkerObject.cpp
In file included from /usr/include/c++/13/map:62,
                 from /builddir/build/BUILD/solidity-0.8.19/libsolutil/Common.h:47,
                 from /builddir/build/BUILD/solidity-0.8.19/libevmasm/LinkerObject.h:25,
                 from /builddir/build/BUILD/solidity-0.8.19/libevmasm/LinkerObject.cpp:23:
In member function 'std::_Rb_tree<unsigned long, std::pair<unsigned long const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<unsigned long const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::swap(std::_Rb_tree<unsigned long, std::pair<unsigned long const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<unsigned long const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >&)',
    inlined from 'std::map<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::swap(std::map<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >&)' at /usr/include/c++/13/bits/stl_map.h:1172:18,
    inlined from 'solidity::evmasm::LinkerObject::link(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, solidity::util::FixedHash<20u>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, solidity::util::FixedHash<20u> > > > const&)' at /builddir/build/BUILD/solidity-0.8.19/libevmasm/LinkerObject.cpp:47:21:
/usr/include/c++/13/bits/stl_tree.h:2092:36: error: storing the address of local variable 'remainingRefs' in '_187->_M_parent' [-Werror=dangling-pointer=]
 2092 |           __t._M_root()->_M_parent = __t._M_end();
      |           ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/builddir/build/BUILD/solidity-0.8.19/libevmasm/LinkerObject.cpp: In member function 'solidity::evmasm::LinkerObject::link(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, solidity::util::FixedHash<20u>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, solidity::util::FixedHash<20u> > > > const&)':
/builddir/build/BUILD/solidity-0.8.19/libevmasm/LinkerObject.cpp:41:39: note: 'remainingRefs' declared here
   41 |         std::map<size_t, std::string> remainingRefs;
      |                                       ^~~~~~~~~~~~~
/builddir/build/BUILD/solidity-0.8.19/libevmasm/LinkerObject.cpp:41:39: note: 'MEM[(struct _Rb_tree_node_base * &)&remainingRefs + 16]' declared here
cc1plus: all warnings being treated as errors
gmake[2]: *** [libevmasm/CMakeFiles/evmasm.dir/build.make:261: libevmasm/CMakeFiles/evmasm.dir/LinkerObject.cpp.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
gmake[2]: Leaving directory '/builddir/build/BUILD/solidity-0.8.19/redhat-linux-build'
gmake[1]: *** [CMakeFiles/Makefile2:355: libevmasm/CMakeFiles/evmasm.dir/all] Error 2
gmake[1]: Leaving directory '/builddir/build/BUILD/solidity-0.8.19/redhat-linux-build'
gmake: *** [Makefile:139: all] Error 2
error: Bad exit status from /var/tmp/rpm-tmp.w99A0o (%build)
lemenkov commented 1 year ago

builder-live.log.gz

(Attaching build log mentioned above just in case)

lemenkov commented 1 year ago

I can confirm that Solidity 0.8.20 builds just fine with GCC 13.1.1. I guess this issue can be closed safely.