diff --git a/src/core/overflowsafe_type.hpp b/src/core/overflowsafe_type.hpp index 45b8f48899..25fa715572 100644 --- a/src/core/overflowsafe_type.hpp +++ b/src/core/overflowsafe_type.hpp @@ -95,7 +95,10 @@ public: inline OverflowSafeInt& operator *= (const int factor) { #ifdef WITH_OVERFLOW_BUILTINS - if (unlikely(__builtin_mul_overflow(this->m_value, factor, &this->m_value))) { + T out; + if (likely(!__builtin_mul_overflow(this->m_value, factor, &out))) { + this->m_value = out; + } else { this->m_value = ((this->m_value < 0) == (factor < 0)) ? T_MAX : T_MIN; } #else