From 41c8fcc30c729d442e7fa84a6b7556480523888d Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Thu, 22 May 2025 16:32:45 -0400 Subject: [PATCH] Fix gcc build --- CMakeLists.txt | 19 ++++++++++++++----- src/parser3.h | 6 +++++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fb7e7a4..98d1ece 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,11 +49,20 @@ target_include_directories(mytest PRIVATE include) target_link_libraries(mytest PRIVATE doctest nanobench simdjson) doctest_discover_tests(mytest) -add_executable(fuzz src/fuzz.cpp) -target_include_directories(fuzz PRIVATE include) -target_link_libraries(fuzz PRIVATE simdjson) -target_compile_options(fuzz PRIVATE -fsanitize=fuzzer) -target_link_options(fuzz PRIVATE -fsanitize=fuzzer) +include(CMakePushCheckState) +include(CheckCXXCompilerFlag) +cmake_push_check_state() +set(CMAKE_REQUIRED_LINK_OPTIONS -fsanitize=fuzzer-no-link) +check_cxx_compiler_flag(-fsanitize=fuzzer-no-link HAS_LIB_FUZZER) +cmake_pop_check_state() + +if(HAS_LIB_FUZZER) + add_executable(fuzz src/fuzz.cpp) + target_include_directories(fuzz PRIVATE include) + target_link_libraries(fuzz PRIVATE simdjson) + target_compile_options(fuzz PRIVATE -fsanitize=fuzzer) + target_link_options(fuzz PRIVATE -fsanitize=fuzzer) +endif() add_executable(validate src/validate.cpp) target_include_directories(validate PRIVATE include) diff --git a/src/parser3.h b/src/parser3.h index b27dba3..1cf5a22 100644 --- a/src/parser3.h +++ b/src/parser3.h @@ -414,7 +414,7 @@ inline WeaselJsonStatus n_string2(Parser3 *self) { } break; } - __m128 x; + __m128i x; memcpy(&x, self->buf, 16); const uint32_t dubquote = _mm_movemask_epi8(_mm_cmpeq_epi8(_mm_set1_epi8('"'), x)); @@ -493,6 +493,8 @@ inline WeaselJsonStatus n_string2(Parser3 *self) { case Tables::CONTINUATION_BYTE: case Tables::INVALID: [[unlikely]] return WeaselJson_REJECT; + default: + __builtin_unreachable(); } } @@ -1085,6 +1087,8 @@ inline WeaselJsonStatus Parser3::keepGoing(Parser3 *self) { case T_EOF: case N_SYMBOL_COUNT: break; + default: + __builtin_unreachable(); } return WeaselJson_AGAIN; }