jsoncpp
jsoncpp copied to clipboard
GCC 12.2.0 build warning for uninitialized variable
Describe the bug The GCC 12.2.0 compiler warns that a variable may be uninitialized when building JSONCPP, specifically here (v):
case tokenNull:
{
Value v;
currentValue().swapPayload(v);
currentValue().setOffsetStart(token.start_ - begin_);
currentValue().setOffsetLimit(token.end_ - begin_);
}
break;
in jsoncpp.cpp
To Reproduce Just building jsoncpp.cpp in a project.
Expected behavior No warning.
I even expect that :
Value v();
We resolve the issue.
Desktop (please complete the following information):
- vanilla Arch Linux, GCC 12.2.0
I'm seeing this issue as well on Fedora 36.
[ 29%] Building CXX object via/CMakeFiles/vkvia.dir/__/submodules/jsoncpp/dist/jsoncpp.cpp.o
In file included from /usr/include/c++/12/bits/new_allocator.h:36,
from /usr/include/c++/12/x86_64-redhat-linux/bits/c++allocator.h:33,
from /usr/include/c++/12/bits/allocator.h:46,
from /usr/include/c++/12/string:41,
from /root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/json/json.h:127,
from /root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:76:
In function ‘std::_Require<std::__not_<std::__is_tuple_like<_Tp> >, std::is_move_constructible<_Tp>, std::is_move_assignable<_Tp> > std::swap(_Tp&, _Tp&) [with _Tp = Json::Value::ValueHolder]’,
inlined from ‘void Json::Value::swapPayload(Json::Value&)’ at /root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:2967:12,
inlined from ‘bool Json::Reader::readValue()’ at /root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:433:31:
/usr/include/c++/12/bits/move.h:205:7: error: ‘v.Json::Value::value_’ may be used uninitialized [-Werror=maybe-uninitialized]
205 | __a = _GLIBCXX_MOVE(__b);
| ^~~
/root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp: In member function ‘bool Json::Reader::readValue()’:
/root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:432:11: note: ‘v’ declared here
432 | Value v;
| ^
In function ‘std::_Require<std::__not_<std::__is_tuple_like<_Tp> >, std::is_move_constructible<_Tp>, std::is_move_assignable<_Tp> > std::swap(_Tp&, _Tp&) [with _Tp = Json::Value::ValueHolder]’,
inlined from ‘void Json::Value::swapPayload(Json::Value&)’ at /root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:2967:12,
inlined from ‘bool Json::Reader::readValue()’ at /root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:446:33:
/usr/include/c++/12/bits/move.h:205:7: error: ‘v.Json::Value::value_’ may be used uninitialized [-Werror=maybe-uninitialized]
205 | __a = _GLIBCXX_MOVE(__b);
| ^~~
/root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp: In member function ‘bool Json::Reader::readValue()’:
/root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:445:13: note: ‘v’ declared here
445 | Value v;
| ^
In function ‘std::_Require<std::__not_<std::__is_tuple_like<_Tp> >, std::is_move_constructible<_Tp>, std::is_move_assignable<_Tp> > std::swap(_Tp&, _Tp&) [with _Tp = Json::Value::ValueHolder]’,
inlined from ‘void Json::Value::swapPayload(Json::Value&)’ at /root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:2967:12,
inlined from ‘bool Json::OurReader::readValue()’ at /root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:1355:31:
/usr/include/c++/12/bits/move.h:205:7: error: ‘v.Json::Value::value_’ may be used uninitialized [-Werror=maybe-uninitialized]
205 | __a = _GLIBCXX_MOVE(__b);
| ^~~
/root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp: In member function ‘bool Json::OurReader::readValue()’:
/root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:1354:11: note: ‘v’ declared here
1354 | Value v;
| ^
In function ‘std::_Require<std::__not_<std::__is_tuple_like<_Tp> >, std::is_move_constructible<_Tp>, std::is_move_assignable<_Tp> > std::swap(_Tp&, _Tp&) [with _Tp = Json::Value::ValueHolder]’,
inlined from ‘void Json::Value::swapPayload(Json::Value&)’ at /root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:2967:12,
inlined from ‘bool Json::OurReader::readValue()’ at /root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:1392:33:
/usr/include/c++/12/bits/move.h:205:7: error: ‘v.Json::Value::value_’ may be used uninitialized [-Werror=maybe-uninitialized]
205 | __a = _GLIBCXX_MOVE(__b);
| ^~~
/root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp: In member function ‘bool Json::OurReader::readValue()’:
/root/1.3.224.1/source/VulkanTools/submodules/jsoncpp/dist/jsoncpp.cpp:1391:13: note: ‘v’ declared here
1391 | Value v;
| ^
cc1plus: all warnings being treated as errors
make[2]: *** [via/CMakeFiles/vkvia.dir/build.make:132: via/CMakeFiles/vkvia.dir/__/submodules/jsoncpp/dist/jsoncpp.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:510: via/CMakeFiles/vkvia.dir/all] Error 2
make: *** [Makefile:146: all] Error 2
[root@7308de54a448 build]# gcc --version
gcc (GCC) 12.2.1 20220819 (Red Hat 12.2.1-2)
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.