Enable asserts in fuzz target
This commit is contained in:
@@ -62,7 +62,9 @@ set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "")
|
|||||||
|
|
||||||
add_subdirectory(third_party)
|
add_subdirectory(third_party)
|
||||||
|
|
||||||
add_executable(versioned_map_main VersionedMap.cpp RootSet.cpp)
|
set(SOURCES VersionedMap.cpp RootSet.cpp)
|
||||||
|
|
||||||
|
add_executable(versioned_map_main ${SOURCES})
|
||||||
target_include_directories(versioned_map_main
|
target_include_directories(versioned_map_main
|
||||||
PRIVATE ${CMAKE_SOURCE_DIR}/include)
|
PRIVATE ${CMAKE_SOURCE_DIR}/include)
|
||||||
target_link_libraries(versioned_map_main PRIVATE nanobench)
|
target_link_libraries(versioned_map_main PRIVATE nanobench)
|
||||||
@@ -73,7 +75,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|||||||
target_link_options(versioned_map_main PRIVATE -fsanitize=address,undefined)
|
target_link_options(versioned_map_main PRIVATE -fsanitize=address,undefined)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}-object OBJECT VersionedMap.cpp RootSet.cpp)
|
add_library(${PROJECT_NAME}-object OBJECT ${SOURCES})
|
||||||
|
|
||||||
target_compile_options(${PROJECT_NAME}-object PRIVATE -fno-exceptions -fno-rtti)
|
target_compile_options(${PROJECT_NAME}-object PRIVATE -fno-exceptions -fno-rtti)
|
||||||
target_include_directories(${PROJECT_NAME}-object
|
target_include_directories(${PROJECT_NAME}-object
|
||||||
@@ -155,11 +157,11 @@ if(BUILD_TESTING)
|
|||||||
cmake_pop_check_state()
|
cmake_pop_check_state()
|
||||||
|
|
||||||
if(HAS_LIB_FUZZER)
|
if(HAS_LIB_FUZZER)
|
||||||
add_executable(facade_fuzz FacadeFuzz.cpp)
|
add_executable(facade_fuzz FacadeFuzz.cpp ${SOURCES})
|
||||||
target_link_libraries(facade_fuzz PRIVATE ${PROJECT_NAME})
|
target_include_directories(facade_fuzz
|
||||||
|
PRIVATE ${CMAKE_SOURCE_DIR}/include)
|
||||||
target_compile_options(facade_fuzz PRIVATE ${FUZZ_FLAGS} ${TEST_FLAGS})
|
target_compile_options(facade_fuzz PRIVATE ${FUZZ_FLAGS} ${TEST_FLAGS})
|
||||||
target_link_options(facade_fuzz PRIVATE ${FUZZ_FLAGS} -fsanitize=fuzzer)
|
target_link_options(facade_fuzz PRIVATE ${FUZZ_FLAGS} -fsanitize=fuzzer)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@@ -392,7 +392,7 @@ inline Random seededRandom() {
|
|||||||
return Random{seed[0], seed[1]};
|
return Random{seed[0], seed[1]};
|
||||||
}
|
}
|
||||||
|
|
||||||
inline thread_local Random gRandom = seededRandom();
|
static thread_local Random gRandom = seededRandom();
|
||||||
|
|
||||||
// ==================== END RANDOM IMPL ====================
|
// ==================== END RANDOM IMPL ====================
|
||||||
|
|
||||||
|
@@ -275,14 +275,14 @@ struct MemManager {
|
|||||||
// in the stack, so we need 2 * kPathLengthUpperBound
|
// in the stack, so we need 2 * kPathLengthUpperBound
|
||||||
uint32_t stack[2 * kPathLengthUpperBound];
|
uint32_t stack[2 * kPathLengthUpperBound];
|
||||||
int stackIndex = 0;
|
int stackIndex = 0;
|
||||||
auto tryPush = [&](uint32_t parent, uint32_t child) {
|
auto tryPush = [&]([[maybe_unused]] uint32_t parent, uint32_t child) {
|
||||||
if (!reachable.set(child)) {
|
if (!reachable.set(child)) {
|
||||||
#if DEBUG_VERBOSE
|
#if DEBUG_VERBOSE
|
||||||
if (debugVerboseEnabled) {
|
if (debugVerboseEnabled) {
|
||||||
printf(" GC: reach: %u (parent %u)\n", child, parent);
|
printf(" GC: reach: %u (parent %u)\n", child, parent);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
assert(stackIndex < sizeof(stack) / sizeof(stack[0]));
|
assert(stackIndex < int(sizeof(stack) / sizeof(stack[0])));
|
||||||
stack[stackIndex++] = child;
|
stack[stackIndex++] = child;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -344,7 +344,7 @@ struct MemManager {
|
|||||||
|
|
||||||
// Entries to the right of max don't need to be in the freelist. They're
|
// Entries to the right of max don't need to be in the freelist. They're
|
||||||
// allocated by pointer bumping.
|
// allocated by pointer bumping.
|
||||||
for (int i = max + 1; i < next; ++i) {
|
for (uint32_t i = max + 1; i < next; ++i) {
|
||||||
if (base[i].entry != nullptr) {
|
if (base[i].entry != nullptr) {
|
||||||
#if DEBUG_VERBOSE
|
#if DEBUG_VERBOSE
|
||||||
if (debugVerboseEnabled) {
|
if (debugVerboseEnabled) {
|
||||||
@@ -779,7 +779,7 @@ struct __attribute__((__visibility__("hidden"))) VersionedMap::Impl {
|
|||||||
const bool direction = finger.backDirection();
|
const bool direction = finger.backDirection();
|
||||||
finger.pop();
|
finger.pop();
|
||||||
auto &parent = finger.backNodeRef();
|
auto &parent = finger.backNodeRef();
|
||||||
auto old = parent;
|
[[maybe_unused]] auto old = parent;
|
||||||
parent = update(parent, direction, node, latestVersion);
|
parent = update(parent, direction, node, latestVersion);
|
||||||
node = parent;
|
node = parent;
|
||||||
}
|
}
|
||||||
@@ -1272,31 +1272,22 @@ void VersionedMap::Impl::firstGeq(const weaselab::VersionedMap::Key *key,
|
|||||||
|
|
||||||
const Entry *prev = nullptr;
|
const Entry *prev = nullptr;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (finger.searchPathSize() > 0) {
|
if (finger.searchPathSize() == 0) {
|
||||||
materializeMutations(iterator[i].impl, prev, nullptr);
|
|
||||||
if (iterator[i].impl->mutationCount > 0) {
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
break;
|
materializeMutations(iterator[i].impl, prev, nullptr);
|
||||||
|
for (int j = 0; j < iterator[i].impl->mutationCount; ++j) {
|
||||||
|
if (geq(iterator[i].impl->mutations[j], key[i])) {
|
||||||
|
iterator[i].impl->mutationIndex = j;
|
||||||
|
goto loopEnd;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
prev = iterator[i].impl->map->mm.base[finger.backNode()].entry;
|
prev = iterator[i].impl->map->mm.base[finger.backNode()].entry;
|
||||||
iterator[i].impl->map->move<std::memory_order_acquire, true>(
|
iterator[i].impl->map->move<std::memory_order_acquire, true>(
|
||||||
finger, iterator[i].impl->version);
|
finger, iterator[i].impl->version);
|
||||||
}
|
}
|
||||||
if (iterator[i].impl->mutationCount == 0) {
|
loopEnd:;
|
||||||
assert(finger.searchPathSize() == 0);
|
|
||||||
} else {
|
|
||||||
[[maybe_unused]] bool match = false;
|
|
||||||
for (int j = 0; j < iterator[i].impl->mutationCount; ++j) {
|
|
||||||
if (geq(iterator[i].impl->mutations[j], key[i])) {
|
|
||||||
iterator[i].impl->mutationIndex = j;
|
|
||||||
match = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assert(match);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user