public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/114592] New: Bogus `maybe-uninitialized` on std::variant with std::string with -O3
@ 2024-04-04 19:48 janisozaur+gcc at gmail dot com
0 siblings, 0 replies; only message in thread
From: janisozaur+gcc at gmail dot com @ 2024-04-04 19:48 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114592
Bug ID: 114592
Summary: Bogus `maybe-uninitialized` on std::variant with
std::string with -O3
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: janisozaur+gcc at gmail dot com
Target Milestone: ---
Created attachment 57879
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=57879&action=edit
minimized reproducer
When trying to compile source file which creates a std::variant which holds
std::string and push it to std::vector, I get bogus warning about string's
internals being left uninitialized. This only happens when using -O3, lower
optimisations do not exhibit this issue.
$ g++ --version
g++ (GCC) 14.0.1 20240404 (experimental)
Copyright (C) 2024 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.
$ g++ -Werror=maybe-uninitialized -O3 -std=gnu++20 -c
test-maybe-uninitialized-gcc14.cpp
<...snip...>
/path/gcc-install-master/include/c++/14.0.1/bits/basic_string.h:271:17: error:
‘*(const std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >*)((char*)&<unnamed> + offsetof(std::value_type,
std::variant<short unsigned int, int, long int, const char*,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
>::<unnamed>.std::__detail::__variant::_Variant_base<short unsigned int, int,
long int, const char*, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >
>::<unnamed>.std::__detail::__variant::_Move_assign_base<false, short unsigned
int, int, long int, const char*, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >
>::<unnamed>.std::__detail::__variant::_Copy_assign_base<false, short unsigned
int, int, long int, const char*, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >
>::<unnamed>.std::__detail::__variant::_Move_ctor_base<false, short unsigned
int, int, long int, const char*, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >
>::<unnamed>.std::__detail::__variant::_Copy_ctor_base<false, short unsigned
int, int, long int, const char*, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >
>::<unnamed>.std::__detail::__variant::_Variant_storage<false, short unsigned
int, int, long int, const char*, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >
>::_M_u)).std::__cxx11::basic_string<char>::_M_string_length’ may be used
uninitialized [-Werror=maybe-uninitialized]
271 | if (_M_string_length > _S_local_capacity)
| ^~~~~~~~~~~~~~~~
test-maybe-uninitialized-gcc14.cpp: In function ‘void
BuildAnyArgListFromLegacyArgBuffer(std::vector<std::variant<short unsigned int,
int, long int, const char*, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > > >&, const void*&)’:
test-maybe-uninitialized-gcc14.cpp:20:22: note: ‘<anonymous>’ declared here
20 | anyArgs.push_back(sz);
| ~~~~~~~~~~~~~~~~~^~~~
It seems to be present in GCC 12 already, last working version is GCC 11
Original code:
https://github.com/OpenRCT2/OpenRCT2/blob/318bff1eac9a51b49ce20029d7a552efdd18e1cd/src/openrct2/localisation/Formatting.cpp#L795
godbolt reproducer with minimized test case: https://godbolt.org/z/9GT9PKTxG
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-04-04 19:48 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-04 19:48 [Bug c++/114592] New: Bogus `maybe-uninitialized` on std::variant with std::string with -O3 janisozaur+gcc at gmail dot com
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).