From 96f034b2e3d3f7d1004d5a2d149198e05dd075d3 Mon Sep 17 00:00:00 2001 From: Marcos Bento Date: Tue, 26 Mar 2024 14:48:03 +0000 Subject: [PATCH] Suppress GCC 13 false positive warning on Cereal --- .../cereal/details/polymorphic_impl.hpp | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/3rdparty/cereal/include/cereal/details/polymorphic_impl.hpp b/3rdparty/cereal/include/cereal/details/polymorphic_impl.hpp index bee13ab40..df510ffd6 100644 --- a/3rdparty/cereal/include/cereal/details/polymorphic_impl.hpp +++ b/3rdparty/cereal/include/cereal/details/polymorphic_impl.hpp @@ -186,7 +186,14 @@ namespace cereal template inline static const Derived * downcast( const void * dptr, std::type_info const & baseInfo ) { +#pragma GCC diagnostic push +#if defined(__GNUC__) && (__GNUC__ >= 13) +#pragma GCC diagnostic ignored "-Wdangling-reference" +#endif + // Without the warning suppression, the following source line generates a warning in GNU GCC 13.x + // The warning is a false positive, reported as a GCC compiler regression: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107532 auto const & mapping = lookup( baseInfo, typeid(Derived), [&](){ UNREGISTERED_POLYMORPHIC_CAST_EXCEPTION(save) } ); +#pragma GCC diagnostic pop for( auto const * dmap : mapping ) dptr = dmap->downcast( dptr ); @@ -200,7 +207,15 @@ namespace cereal template inline static void * upcast( Derived * const dptr, std::type_info const & baseInfo ) { +#pragma GCC diagnostic push +#pragma GCC diagnostic push +#if defined(__GNUC__) && (__GNUC__ >= 13) + #pragma GCC diagnostic ignored "-Wdangling-reference" +#endif + // Without the warning suppression, the following source line generates a warning in GNU GCC 13.x + // The warning is a false positive, reported as a GCC compiler regression: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107532 auto const & mapping = lookup( baseInfo, typeid(Derived), [&](){ UNREGISTERED_POLYMORPHIC_CAST_EXCEPTION(load) } ); +#pragma GCC diagnostic pop void * uptr = dptr; for( auto mIter = mapping.rbegin(), mEnd = mapping.rend(); mIter != mEnd; ++mIter ) @@ -213,7 +228,15 @@ namespace cereal template inline static std::shared_ptr upcast( std::shared_ptr const & dptr, std::type_info const & baseInfo ) { +#pragma GCC diagnostic push +#pragma GCC diagnostic push +#if defined(__GNUC__) && (__GNUC__ >= 13) + #pragma GCC diagnostic ignored "-Wdangling-reference" +#endif + // Without the warning suppression, the following source line generates a warning in GNU GCC 13.x + // The warning is a false positive, reported as a GCC compiler regression: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107532 auto const & mapping = lookup( baseInfo, typeid(Derived), [&](){ UNREGISTERED_POLYMORPHIC_CAST_EXCEPTION(load) } ); +#pragma GCC diagnostic pop std::shared_ptr uptr = dptr; for( auto mIter = mapping.rbegin(), mEnd = mapping.rend(); mIter != mEnd; ++mIter )