Merge pull request #1994 from posidron:windows-coverage-support PiperOrigin-RevId: 885592751
diff --git a/fuzztest/internal/coverage.cc b/fuzztest/internal/coverage.cc index 43c25d7..20deebc 100644 --- a/fuzztest/internal/coverage.cc +++ b/fuzztest/internal/coverage.cc
@@ -23,6 +23,10 @@ #include <memory> #include <type_traits> +#if defined(_WIN32) +#include <malloc.h> // For _aligned_malloc / _aligned_free. +#endif + #include "absl/base/attributes.h" #include "absl/strings/str_format.h" #include "absl/types/span.h" @@ -173,15 +177,15 @@ } } -// Coverage only available in Clang, but only for Linux, macOS, and newer -// versions of Android. Windows might not have what we need. +// Coverage only available in Clang for Linux, macOS, newer versions of +// Android, and Windows (clang-cl). #if /* Supported compilers */ \ defined(__clang__) && \ (/* Supported platforms */ \ (defined(__linux__) && !defined(__ANDROID__)) || \ (defined(__ANDROID_MIN_SDK_VERSION__) && \ __ANDROID_MIN_SDK_VERSION__ >= 28) || \ - defined(__APPLE__)) + defined(__APPLE__) || defined(_WIN32)) #define FUZZTEST_COVERAGE_IS_AVAILABLE #endif @@ -281,11 +285,21 @@ // necessary space. map_size += alignment; corpus_map_size_ = map_size; +#if defined(_WIN32) + corpus_map_ = static_cast<uint8_t*>(_aligned_malloc(map_size, alignment)); +#else corpus_map_ = static_cast<uint8_t*>(std::aligned_alloc(alignment, map_size)); +#endif std::fill(corpus_map_, corpus_map_ + corpus_map_size_, 0); } -CorpusCoverage::~CorpusCoverage() { std::free(corpus_map_); } +CorpusCoverage::~CorpusCoverage() { +#if defined(_WIN32) + _aligned_free(corpus_map_); +#else + std::free(corpus_map_); +#endif +} bool CorpusCoverage::Update(ExecutionCoverage* execution_coverage) { absl::Span<uint8_t> execution_map = execution_coverage->GetCounterMap();