Files
Jakub Jelinek a6687d1233 c++: Suppress -Wreturn-type warnings for functions with failed assertions [PR91388]
This is something Jonathan has asked for recently.  E.g. in the recent
libstdc++ r16-6177 random.tcc changes, there was
          if constexpr (__d <= 32)
            return __generate_canonical_any<_RealT, uint64_t, __d>(__urng);
          else
            {
 #if defined(__SIZEOF_INT128__)
              static_assert(__d <= 64,
                "irregular RNG with float precision >64 is not supported");
              return __generate_canonical_any<
                _RealT, unsigned __int128, __d>(__urng);
 #else
              static_assert(false, "irregular RNG with float precision"
                 " >32 requires __int128 support");
 #endif
            }
and when we hit there the static_assert, we don't get just an error about
that, but also a -Wreturn-type warning in the same function because that
path falls through to the end of function without returning a value.
But a function with a failed static_assert is erroneous and will never
fall through to the end.  We could treat failed static_assert in functions
as __builtin_unreachable (), but I think it doesn't matter where exactly
in a function static_assert(false); appears, so this patch just suppresses
-Wreturn-type warning in that function instead.

2025-12-19  Jakub Jelinek  <jakub@redhat.com>

	PR c++/91388
	* semantics.cc (finish_static_assert): Suppress -Wreturn-type warnings
	in functions with failed assertions.

	* g++.dg/cpp1z/static_assert1.C: New test.
2025-12-19 16:44:16 +01:00
..