update boost
This commit is contained in:
@@ -501,8 +501,16 @@ namespace boost {
|
||||
|
||||
void clear(function_buffer& functor) const
|
||||
{
|
||||
#if defined(BOOST_GCC) && (__GNUC__ >= 11)
|
||||
# pragma GCC diagnostic push
|
||||
// False positive in GCC 11/12 for empty function objects
|
||||
# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||
#endif
|
||||
if (base.manager)
|
||||
base.manager(functor, functor, destroy_functor_tag);
|
||||
#if defined(BOOST_GCC) && (__GNUC__ >= 11)
|
||||
# pragma GCC diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -898,11 +906,24 @@ namespace boost {
|
||||
{
|
||||
if (!f.empty()) {
|
||||
this->vtable = f.vtable;
|
||||
if (this->has_trivial_copy_and_destroy())
|
||||
if (this->has_trivial_copy_and_destroy()) {
|
||||
// Don't operate on storage directly since union type doesn't relax
|
||||
// strict aliasing rules, despite of having member char type.
|
||||
# if defined(BOOST_GCC) && (BOOST_GCC >= 40700)
|
||||
# pragma GCC diagnostic push
|
||||
// This warning is technically correct, but we don't want to pay the price for initializing
|
||||
// just to silence a warning: https://github.com/boostorg/function/issues/27
|
||||
# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||
# if (BOOST_GCC >= 110000)
|
||||
// GCC 11.3, 12 emit a different warning: https://github.com/boostorg/function/issues/42
|
||||
# pragma GCC diagnostic ignored "-Wuninitialized"
|
||||
# endif
|
||||
# endif
|
||||
std::memcpy(this->functor.data, f.functor.data, sizeof(boost::detail::function::function_buffer));
|
||||
else
|
||||
# if defined(BOOST_GCC) && (BOOST_GCC >= 40700)
|
||||
# pragma GCC diagnostic pop
|
||||
# endif
|
||||
} else
|
||||
get_vtable()->base.manager(f.functor, this->functor,
|
||||
boost::detail::function::clone_functor_tag);
|
||||
}
|
||||
@@ -987,13 +1008,34 @@ namespace boost {
|
||||
BOOST_TRY {
|
||||
if (!f.empty()) {
|
||||
this->vtable = f.vtable;
|
||||
if (this->has_trivial_copy_and_destroy())
|
||||
if (this->has_trivial_copy_and_destroy()) {
|
||||
// Don't operate on storage directly since union type doesn't relax
|
||||
// strict aliasing rules, despite of having member char type.
|
||||
# if defined(BOOST_GCC) && (BOOST_GCC >= 40700)
|
||||
# pragma GCC diagnostic push
|
||||
// This warning is technically correct, but we don't want to pay the price for initializing
|
||||
// just to silence a warning: https://github.com/boostorg/function/issues/27
|
||||
# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||
# if (BOOST_GCC >= 120000)
|
||||
// GCC 12 emits a different warning: https://github.com/boostorg/function/issues/42
|
||||
# pragma GCC diagnostic ignored "-Wuninitialized"
|
||||
# endif
|
||||
# endif
|
||||
std::memcpy(this->functor.data, f.functor.data, sizeof(this->functor.data));
|
||||
else
|
||||
# if defined(BOOST_GCC) && (BOOST_GCC >= 40700)
|
||||
# pragma GCC diagnostic pop
|
||||
# endif
|
||||
} else
|
||||
#if defined(BOOST_GCC) && (__GNUC__ >= 11)
|
||||
# pragma GCC diagnostic push
|
||||
// False positive in GCC 11/12 for empty function objects (function_n_test.cpp:673)
|
||||
# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||
#endif
|
||||
get_vtable()->base.manager(f.functor, this->functor,
|
||||
boost::detail::function::move_functor_tag);
|
||||
#if defined(BOOST_GCC) && (__GNUC__ >= 11)
|
||||
# pragma GCC diagnostic pop
|
||||
#endif
|
||||
f.vtable = 0;
|
||||
} else {
|
||||
clear();
|
||||
|
||||
Reference in New Issue
Block a user