fuzz: Assume presence of __builtin_*_overflow, without checks

pull/29208/head
MarcoFalke 10 months ago
parent fa223ba5eb
commit aaaace2fd1
No known key found for this signature in database

@ -11,14 +11,6 @@
#include <string> #include <string>
#include <vector> #include <vector>
#if defined(__has_builtin)
#if __has_builtin(__builtin_add_overflow)
#define HAVE_BUILTIN_ADD_OVERFLOW
#endif
#elif defined(__GNUC__)
#define HAVE_BUILTIN_ADD_OVERFLOW
#endif
namespace { namespace {
template <typename T> template <typename T>
void TestAdditionOverflow(FuzzedDataProvider& fuzzed_data_provider) void TestAdditionOverflow(FuzzedDataProvider& fuzzed_data_provider)
@ -32,14 +24,12 @@ void TestAdditionOverflow(FuzzedDataProvider& fuzzed_data_provider)
assert(is_addition_overflow_custom == AdditionOverflow(j, i)); assert(is_addition_overflow_custom == AdditionOverflow(j, i));
assert(maybe_add == CheckedAdd(j, i)); assert(maybe_add == CheckedAdd(j, i));
assert(sat_add == SaturatingAdd(j, i)); assert(sat_add == SaturatingAdd(j, i));
#if defined(HAVE_BUILTIN_ADD_OVERFLOW)
T result_builtin; T result_builtin;
const bool is_addition_overflow_builtin = __builtin_add_overflow(i, j, &result_builtin); const bool is_addition_overflow_builtin = __builtin_add_overflow(i, j, &result_builtin);
assert(is_addition_overflow_custom == is_addition_overflow_builtin); assert(is_addition_overflow_custom == is_addition_overflow_builtin);
if (!is_addition_overflow_custom) { if (!is_addition_overflow_custom) {
assert(i + j == result_builtin); assert(i + j == result_builtin);
} }
#endif
if (is_addition_overflow_custom) { if (is_addition_overflow_custom) {
assert(sat_add == std::numeric_limits<T>::min() || sat_add == std::numeric_limits<T>::max()); assert(sat_add == std::numeric_limits<T>::min() || sat_add == std::numeric_limits<T>::max());
} else { } else {

@ -10,14 +10,6 @@
#include <string> #include <string>
#include <vector> #include <vector>
#if defined(__has_builtin)
#if __has_builtin(__builtin_mul_overflow)
#define HAVE_BUILTIN_MUL_OVERFLOW
#endif
#elif defined(__GNUC__)
#define HAVE_BUILTIN_MUL_OVERFLOW
#endif
namespace { namespace {
template <typename T> template <typename T>
void TestMultiplicationOverflow(FuzzedDataProvider& fuzzed_data_provider) void TestMultiplicationOverflow(FuzzedDataProvider& fuzzed_data_provider)
@ -25,18 +17,12 @@ void TestMultiplicationOverflow(FuzzedDataProvider& fuzzed_data_provider)
const T i = fuzzed_data_provider.ConsumeIntegral<T>(); const T i = fuzzed_data_provider.ConsumeIntegral<T>();
const T j = fuzzed_data_provider.ConsumeIntegral<T>(); const T j = fuzzed_data_provider.ConsumeIntegral<T>();
const bool is_multiplication_overflow_custom = MultiplicationOverflow(i, j); const bool is_multiplication_overflow_custom = MultiplicationOverflow(i, j);
#if defined(HAVE_BUILTIN_MUL_OVERFLOW)
T result_builtin; T result_builtin;
const bool is_multiplication_overflow_builtin = __builtin_mul_overflow(i, j, &result_builtin); const bool is_multiplication_overflow_builtin = __builtin_mul_overflow(i, j, &result_builtin);
assert(is_multiplication_overflow_custom == is_multiplication_overflow_builtin); assert(is_multiplication_overflow_custom == is_multiplication_overflow_builtin);
if (!is_multiplication_overflow_custom) { if (!is_multiplication_overflow_custom) {
assert(i * j == result_builtin); assert(i * j == result_builtin);
} }
#else
if (!is_multiplication_overflow_custom) {
(void)(i * j);
}
#endif
} }
} // namespace } // namespace

Loading…
Cancel
Save