mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-07-12 19:32:35 +02:00
Merge bitcoin/bitcoin#29208: build: Bump clang minimum supported version to 14
aaaace2fd1
fuzz: Assume presence of __builtin_*_overflow, without checks (MarcoFalke)fa223ba5eb
Revert "build: Fix undefined reference to __mulodi4" (MarcoFalke)fa7c751bd9
build: Bump clang minimum supported version to 14 (MarcoFalke) Pull request description: Most supported operating systems ship with clang-14 (or later), so bump the minimum to that and allow new code to drop workarounds for previous clang bugs. For reference: * https://packages.debian.org/bookworm/clang (`clang-14`) * https://packages.ubuntu.com/jammy/clang (`clang-14`) * CentOS-like 8/9 Stream: All Clang versions from 15 to 17 * FreeBSD 12/13: All Clang versions from 15 to 16 * OpenSuse Tumbleweed ships with https://software.opensuse.org/package/clang (`clang17`); No idea about OpenSuse Leap On operating systems where the clang version is not shipped by default, the user would have to use GCC, or install clang in a different way. For example: * https://packages.debian.org/bullseye/g++ (g++-10) * https://packages.ubuntu.com/focal/g++-10 * https://apt.llvm.org/, or nix, or guix, or compile clang from source, ... ACKs for top commit: fanquake: ACKaaaace2fd1
Tree-SHA512: 81d066b14cc568d27312f1cc814b09540b038a10a0a8e9d71fc9745b024fb6c32a959af673e6819b817ea7cef98da4abfa63dff16cffb7821b40083016b0291f
This commit is contained in:
@ -11,14 +11,6 @@
|
||||
#include <string>
|
||||
#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 {
|
||||
template <typename T>
|
||||
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(maybe_add == CheckedAdd(j, i));
|
||||
assert(sat_add == SaturatingAdd(j, i));
|
||||
#if defined(HAVE_BUILTIN_ADD_OVERFLOW)
|
||||
T result_builtin;
|
||||
const bool is_addition_overflow_builtin = __builtin_add_overflow(i, j, &result_builtin);
|
||||
assert(is_addition_overflow_custom == is_addition_overflow_builtin);
|
||||
if (!is_addition_overflow_custom) {
|
||||
assert(i + j == result_builtin);
|
||||
}
|
||||
#endif
|
||||
if (is_addition_overflow_custom) {
|
||||
assert(sat_add == std::numeric_limits<T>::min() || sat_add == std::numeric_limits<T>::max());
|
||||
} else {
|
||||
|
@ -2,10 +2,6 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include <config/bitcoin-config.h>
|
||||
#endif
|
||||
|
||||
#include <test/fuzz/FuzzedDataProvider.h>
|
||||
#include <test/fuzz/fuzz.h>
|
||||
#include <test/fuzz/util.h>
|
||||
@ -21,18 +17,12 @@ void TestMultiplicationOverflow(FuzzedDataProvider& fuzzed_data_provider)
|
||||
const T i = fuzzed_data_provider.ConsumeIntegral<T>();
|
||||
const T j = fuzzed_data_provider.ConsumeIntegral<T>();
|
||||
const bool is_multiplication_overflow_custom = MultiplicationOverflow(i, j);
|
||||
#if defined(HAVE_BUILTIN_MUL_OVERFLOW)
|
||||
T result_builtin;
|
||||
const bool is_multiplication_overflow_builtin = __builtin_mul_overflow(i, j, &result_builtin);
|
||||
assert(is_multiplication_overflow_custom == is_multiplication_overflow_builtin);
|
||||
if (!is_multiplication_overflow_custom) {
|
||||
assert(i * j == result_builtin);
|
||||
}
|
||||
#else
|
||||
if (!is_multiplication_overflow_custom) {
|
||||
(void)(i * j);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} // namespace
|
||||
|
||||
|
Reference in New Issue
Block a user