mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-05 02:33:07 +02:00
fuzz: Accept options in FUZZ_TARGET macro
* This allows to reduce the number of total macros. * Also, adding a new option no longer requires doubling the number of macros in the worst case.
This commit is contained in:
@@ -21,25 +21,28 @@
|
||||
using FuzzBufferType = Span<const uint8_t>;
|
||||
|
||||
using TypeTestOneInput = std::function<void(FuzzBufferType)>;
|
||||
using TypeInitialize = std::function<void()>;
|
||||
using TypeHidden = bool;
|
||||
struct FuzzTargetOptions {
|
||||
std::function<void()> init{[] {}};
|
||||
bool hidden{false};
|
||||
};
|
||||
|
||||
void FuzzFrameworkRegisterTarget(std::string_view name, TypeTestOneInput target, TypeInitialize init, TypeHidden hidden);
|
||||
void FuzzFrameworkRegisterTarget(std::string_view name, TypeTestOneInput target, FuzzTargetOptions opts);
|
||||
|
||||
inline void FuzzFrameworkEmptyInitFun() {}
|
||||
|
||||
#define FUZZ_TARGET(name) \
|
||||
FUZZ_TARGET_INIT(name, FuzzFrameworkEmptyInitFun)
|
||||
#if defined(__clang__)
|
||||
#define FUZZ_TARGET(...) _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"") DETAIL_FUZZ(__VA_ARGS__) _Pragma("clang diagnostic pop")
|
||||
#else
|
||||
#define FUZZ_TARGET(...) DETAIL_FUZZ(__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#define FUZZ_TARGET_INIT(name, init_fun) \
|
||||
FUZZ_TARGET_INIT_HIDDEN(name, init_fun, false)
|
||||
FUZZ_TARGET(name, .init = init_fun)
|
||||
|
||||
#define FUZZ_TARGET_INIT_HIDDEN(name, init_fun, hidden) \
|
||||
#define DETAIL_FUZZ(name, ...) \
|
||||
void name##_fuzz_target(FuzzBufferType); \
|
||||
struct name##_Before_Main { \
|
||||
name##_Before_Main() \
|
||||
{ \
|
||||
FuzzFrameworkRegisterTarget(#name, name##_fuzz_target, init_fun, hidden); \
|
||||
FuzzFrameworkRegisterTarget(#name, name##_fuzz_target, {__VA_ARGS__}); \
|
||||
} \
|
||||
} const static g_##name##_before_main; \
|
||||
void name##_fuzz_target(FuzzBufferType buffer)
|
||||
|
||||
Reference in New Issue
Block a user