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).