https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109339
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|tree-optimization |libstdc++
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
The diagnostic is intentional I think. We see
<bb 2> [local count: 1073741824]:
ss ={v} {CLOBBER};
std::stop_token::_Stop_state_ref::_Stop_state_ref (&ss._M_state, &ss);
std::stop_source::~stop_source (&ss);
ss ={v} {CLOBBER(eol)};
return 0;
and the call to _Stop_state_ref passes references to uninitialized 'ss'
(tree-ssa-uninit.cc:maybe_warn_pass_by_reference). The &ss argument
is a const reference and the function does
_Stop_state_ref(const _Stop_state_ref& __other) noexcept
: _M_ptr(__other._M_ptr)
{
if (_M_ptr)
_M_ptr->_M_add_owner();
}
so it inspects __other._M_ptr. It looks like for some reason the NSDMI
init of _M_ptr isn't happening?
The FE emits
;; Function std::stop_source::stop_source() (null)
;; enabled by -tree-original
<<cleanup_point <<< Unknown tree: expr_stmt
*(struct stop_source *) this = {CLOBBER} >>>>>;
{
<<cleanup_point <<< Unknown tree: expr_stmt
std::stop_token::_Stop_state_ref::_Stop_state_ref (&((struct stop_source *)
this)->_M_state, (const struct stop_source &) this) >>>>>;
try
{
}
catch
{
std::stop_token::_Stop_state_ref::~_Stop_state_ref (&((struct stop_source
*) this)->_M_state);
}
}
but it's all a bit convoluted? To me it looks like a library issue. Yes,
with more inlining we optimize everything away.