https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111944

            Bug ID: 111944
           Summary: Spurious '<anonymous>' is used uninitialized in
                    Boost.Variant2 (-Wuninitialized -Og)
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ed at catmur dot uk
  Target Milestone: ---

Since 12.1, with Boost 1.71 or later,

#include <boost/variant2/variant.hpp>
int main() {
    boost::variant2::variant<boost::variant2::monostate, int> r;
    r.emplace<boost::variant2::monostate>();
}

In member function 'constexpr void
boost::variant2::detail::variant_storage_impl<std::integral_constant<bool,
true>, T1, T ...>::emplace_impl(boost::mp11::mp_true,
boost::mp11::mp_size_t<I>, A&& ...) [with long unsigned int I = 1; A = {}; T1 =
boost::variant2::detail::none; T = {boost::variant2::monostate, int}]',
    inlined from 'constexpr void
boost::variant2::detail::variant_storage_impl<std::integral_constant<bool,
true>, T1, T ...>::emplace(boost::mp11::mp_size_t<I>, A&& ...) [with long
unsigned int I = 1; A = {}; T1 = boost::variant2::detail::none; T =
{boost::variant2::monostate, int}]' at boost/variant2/variant.hpp:705:27,
    inlined from 'constexpr void
boost::variant2::detail::variant_base_impl<true, true, T
...>::emplace_impl(boost::mp11::mp_true, A&& ...) [with long unsigned int J =
1; U = boost::variant2::monostate; A = {}; T = {boost::variant2::monostate,
int}]' at boost/variant2/variant.hpp:902:20,
    inlined from 'constexpr void
boost::variant2::detail::variant_base_impl<true, true, T ...>::emplace(A&& ...)
[with long unsigned int I = 0; A = {}; T = {boost::variant2::monostate, int}]'
at boost/variant2/variant.hpp:921:33,
    inlined from 'constexpr U& boost::variant2::variant<T>::emplace(A&& ...)
[with U = boost::variant2::monostate; A = {}; E = void; T =
{boost::variant2::monostate, int}]' at boost/variant2/variant.hpp:1690:49:
boost/variant2/variant.hpp:696:9: warning: '<anonymous>' is used uninitialized
[-Wuninitialized]
  696 |         *this = variant_storage_impl( mp11::mp_size_t<I>(),
std::forward<A>(a)... );
      |         ^
boost/variant2/variant.hpp: In member function 'constexpr U&
boost::variant2::variant<T>::emplace(A&& ...) [with U =
boost::variant2::monostate; A = {}; E = void; T = {boost::variant2::monostate,
int}]':
boost/variant2/variant.hpp:696:17: note: '<anonymous>' declared here
  696 |         *this = variant_storage_impl( mp11::mp_size_t<I>(),
std::forward<A>(a)... );
      |                
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Boost.Variant2 has a suppression at this line for Wmaybe-uninitialized
referencing asan, (a) this isn't with sanitizer, and (b) it's Wuninitialized.
This only appears to affect -Og, though, so fairly minor.

Reply via email to