diff --git a/src/corelib/kernel/qmath.h b/src/corelib/kernel/qmath.h index 5e8d4fc2767..2171a4ed93e 100644 --- a/src/corelib/kernel/qmath.h +++ b/src/corelib/kernel/qmath.h @@ -371,6 +371,8 @@ constexpr inline quint64 qConstexprNextPowerOfTwo(qint64 v) constexpr inline quint32 qNextPowerOfTwo(quint32 v) { #if defined(__cpp_lib_int_pow2) && __cpp_lib_int_pow2 >= 202002L + if (static_cast(v) < 0) + return 0; // std::bit_ceil() is undefined for values that would overflow, but we document them to be 0 return std::bit_ceil(v + 1); #elif defined(QT_HAS_BUILTIN_CLZ) if (v == 0) @@ -384,6 +386,8 @@ constexpr inline quint32 qNextPowerOfTwo(quint32 v) constexpr inline quint64 qNextPowerOfTwo(quint64 v) { #if defined(__cpp_lib_int_pow2) && __cpp_lib_int_pow2 >= 202002L + if (static_cast(v) < 0) + return 0; // std::bit_ceil() is undefined for values that would overflow, but we document them to be 0 return std::bit_ceil(v + 1); #elif defined(QT_HAS_BUILTIN_CLZLL) if (v == 0)