Skip to content

Commit ddc34b2

Browse files
Merge pull request #807 from laurynas-biveinis/llvm-21
Add support for LLVM 21
2 parents a2943f1 + 3289abb commit ddc34b2

13 files changed

Lines changed: 129 additions & 33 deletions

.clang-tidy

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,17 @@
99
# unfixable signatures
1010
# - cppcoreguidelines-avoid-c-arrays: duplicated by modernize-avoid-c-arrays
1111
# - cppcoreguidelines-macro-usage: does not respect __LINE__ in macro definition
12-
# - cppcoreguidelines-pro-bounds-pointer-arithmetic: because leaf nodes are
13-
# std::byte arrays
1412
# - cppcoreguidelines-pro-type-const-cast: because VALGRIND_MALLOCLIKE_BLOCK
1513
# expands a to C-style cast, and we have -Wold-style-cast anyway
1614
# - hicpp-avoid-c-arrays: duplicated by modernize-avoid-c-arrays
1715
# - hicpp-explicit-conversions: duplicated by google-explicit-constructor
1816
# - hicpp-no-assembler: Valgrind client requests
1917
# - modernize-use-equals-default: until foo() noexcept = default is accepted by
2018
# clang
21-
Checks: '*,-altera-id-dependent-backward-branch,-altera-struct-pack-align,-altera-unroll-loops,-boost-use-ranges,-bugprone-easily-swappable-parameters,-bugprone-use-after-move,-clang-diagnostic-error,-clang-analyzer-core.CallAndMessage,-clang-analyzer-core.NonNullParamChecker,-clang-analyzer-cplusplus.Move,-clang-analyzer-unix.Malloc,-cppcoreguidelines-avoid-c-arrays,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-init-variables,-cppcoreguidelines-macro-usage,-cppcoreguidelines-non-private-member-variables-in-classes,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-constant-array-index,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-pro-type-const-cast,-cppcoreguidelines-pro-type-cstyle-cast,-cppcoreguidelines-pro-type-member-init,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-pro-type-static-cast-downcast,-cppcoreguidelines-pro-type-union-access,-fuchsia-default-arguments-calls,-fuchsia-default-arguments-declarations,-fuchsia-overloaded-operator,-google-readability-braces-around-statements,-google-runtime-references,-hicpp-avoid-c-arrays,-hicpp-braces-around-statements,-hicpp-explicit-conversions,-hicpp-invalid-access-moved,-hicpp-member-init,-hicpp-named-parameter,-hicpp-no-array-decay,-hicpp-no-assembler,-hicpp-use-equals-default,-llvm-include-order,-llvmlibc*,-misc-no-recursion,-misc-non-private-member-variables-in-classes,-modernize-use-equals-default,-modernize-use-trailing-return-type,-portability-simd-intrinsics,-readability-braces-around-statements,-readability-function-cognitive-complexity,-readability-identifier-length,-readability-named-parameter,-readability-magic-numbers'
19+
# - modernize-use-scoped-lock: std::lock_guard is perfectly fine for its use
20+
# cases
21+
# - llvm-prefer-static-over-anonymous-namespace: I prefer anonymous namespace
22+
Checks: '*,-altera-id-dependent-backward-branch,-altera-struct-pack-align,-altera-unroll-loops,-boost-use-ranges,-bugprone-easily-swappable-parameters,-bugprone-use-after-move,-clang-diagnostic-error,-clang-analyzer-core.CallAndMessage,-clang-analyzer-core.NonNullParamChecker,-clang-analyzer-cplusplus.Move,-clang-analyzer-unix.Malloc,-cppcoreguidelines-avoid-c-arrays,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-init-variables,-cppcoreguidelines-macro-usage,-cppcoreguidelines-non-private-member-variables-in-classes,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-constant-array-index,-cppcoreguidelines-pro-type-const-cast,-cppcoreguidelines-pro-type-cstyle-cast,-cppcoreguidelines-pro-type-member-init,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-pro-type-static-cast-downcast,-cppcoreguidelines-pro-type-union-access,-fuchsia-default-arguments-calls,-fuchsia-default-arguments-declarations,-fuchsia-overloaded-operator,-google-readability-braces-around-statements,-google-runtime-references,-hicpp-avoid-c-arrays,-hicpp-braces-around-statements,-hicpp-explicit-conversions,-hicpp-invalid-access-moved,-hicpp-member-init,-hicpp-named-parameter,-hicpp-no-array-decay,-hicpp-no-assembler,-hicpp-use-equals-default,-llvm-include-order,-llvmlibc*,-llvm-prefer-static-over-anonymous-namespace,-misc-no-recursion,-misc-non-private-member-variables-in-classes,-modernize-use-equals-default,-modernize-use-scoped-lock,-modernize-use-trailing-return-type,-portability-simd-intrinsics,-readability-braces-around-statements,-readability-function-cognitive-complexity,-readability-identifier-length,-readability-named-parameter,-readability-magic-numbers'
2223
WarningsAsErrors: '*'
2324
CheckOptions:
2425
- key: performance-unnecessary-value-param.AllowedTypes

.github/workflows/build.yml

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -99,59 +99,59 @@ jobs:
9999
os: ubuntu-latest
100100
COMPILER: gcc
101101

102-
- name: clang 20 Release (Linux Intel)
102+
- name: clang 21 Release (Linux Intel)
103103
os: ubuntu-latest
104104
BUILD_TYPE: Release
105105
COMPILER: clang
106106

107-
- name: clang 20 Release with ASan (Linux Intel)
107+
- name: clang 21 Release with ASan (Linux Intel)
108108
os: ubuntu-latest
109109
BUILD_TYPE: Release
110110
SANITIZE_ADDRESS: ON
111111
COMPILER: clang
112112

113-
- name: clang 20 Release with TSan (Linux Intel)
113+
- name: clang 21 Release with TSan (Linux Intel)
114114
os: ubuntu-latest
115115
BUILD_TYPE: Release
116116
SANITIZE_THREAD: ON
117117
COMPILER: clang
118118

119-
- name: clang 20 Release with UBSan (Linux Intel)
119+
- name: clang 21 Release with UBSan (Linux Intel)
120120
os: ubuntu-latest
121121
BUILD_TYPE: Release
122122
SANITIZE_UB: ON
123123
COMPILER: clang
124124

125-
- name: clang 20 Debug (Linux Intel)
125+
- name: clang 21 Debug (Linux Intel)
126126
os: ubuntu-latest
127127
BUILD_TYPE: Debug
128128
COMPILER: clang
129129

130-
- name: clang 20 Debug with ASan (Linux Intel)
130+
- name: clang 21 Debug with ASan (Linux Intel)
131131
os: ubuntu-latest
132132
BUILD_TYPE: Debug
133133
SANITIZE_ADDRESS: ON
134134
COMPILER: clang
135135

136-
- name: clang 20 Debug with TSan (Linux Intel)
136+
- name: clang 21 Debug with TSan (Linux Intel)
137137
os: ubuntu-latest
138138
BUILD_TYPE: Debug
139139
SANITIZE_THREAD: ON
140140
COMPILER: clang
141141

142-
- name: clang 20 Debug with UBSan (Linux Intel)
142+
- name: clang 21 Debug with UBSan (Linux Intel)
143143
os: ubuntu-latest
144144
BUILD_TYPE: Debug
145145
SANITIZE_UB: ON
146146
COMPILER: clang
147147

148-
- name: clang 20 Release static analysis (Linux Intel)
148+
- name: clang 21 Release static analysis (Linux Intel)
149149
os: ubuntu-latest
150150
BUILD_TYPE: Release
151151
COMPILER: clang
152152
STATIC_ANALYSIS: ON
153153

154-
- name: clang 20 Debug static analysis (Linux Intel)
154+
- name: clang 21 Debug static analysis (Linux Intel)
155155
os: ubuntu-latest
156156
BUILD_TYPE: Debug
157157
COMPILER: clang
@@ -313,41 +313,41 @@ jobs:
313313
COMPILER: gcc
314314
SANITIZE_UB: ON
315315

316-
- name: clang 20 Release (Linux ARM64)
316+
- name: clang 21 Release (Linux ARM64)
317317
os: ubuntu-24.04-arm
318318
BUILD_TYPE: Release
319319
COMPILER: clang
320320

321-
- name: clang 20 Release with TSan (Linux ARM64)
321+
- name: clang 21 Release with TSan (Linux ARM64)
322322
os: ubuntu-24.04-arm
323323
BUILD_TYPE: Release
324324
COMPILER: clang
325325
SANITIZE_THREAD: ON
326326

327-
- name: clang 20 Release with UBSan (Linux ARM64)
327+
- name: clang 21 Release with UBSan (Linux ARM64)
328328
os: ubuntu-24.04-arm
329329
BUILD_TYPE: Release
330330
COMPILER: clang
331331
SANITIZE_UB: ON
332332

333-
- name: clang 20 Debug (Linux ARM64)
333+
- name: clang 21 Debug (Linux ARM64)
334334
os: ubuntu-24.04-arm
335335
BUILD_TYPE: Debug
336336
COMPILER: clang
337337

338-
- name: clang 20 Debug with ASan (Linux ARM64)
338+
- name: clang 21 Debug with ASan (Linux ARM64)
339339
os: ubuntu-24.04-arm
340340
BUILD_TYPE: Debug
341341
COMPILER: clang
342342
SANITIZE_ADDRESS: ON
343343

344-
- name: clang 20 Debug with TSan (Linux ARM64)
344+
- name: clang 21 Debug with TSan (Linux ARM64)
345345
os: ubuntu-24.04-arm
346346
BUILD_TYPE: Debug
347347
COMPILER: clang
348348
SANITIZE_THREAD: ON
349349

350-
- name: clang 20 Debug with UBSan (Linux ARM64)
350+
- name: clang 21 Debug with UBSan (Linux ARM64)
351351
os: ubuntu-24.04-arm
352352
BUILD_TYPE: Debug
353353
COMPILER: clang
@@ -389,25 +389,25 @@ jobs:
389389
curl 'https://apt.llvm.org/llvm-snapshot.gpg.key' \
390390
| sudo apt-key add -
391391
sudo add-apt-repository -y \
392-
"deb http://apt.llvm.org/noble/ llvm-toolchain-noble-20 main"
392+
"deb http://apt.llvm.org/noble/ llvm-toolchain-noble-21 main"
393393
sudo apt-get update
394-
sudo apt-get install -y clang-20 iwyu
394+
sudo apt-get install -y clang-21 iwyu
395395
if: runner.os == 'Linux' && env.COMPILER == 'clang'
396396

397397
- name: Setup dependencies for Linux LLVM (Release)
398-
run: sudo apt-get install -y libomp5-20 llvm-20 lld-20
398+
run: sudo apt-get install -y libomp5 llvm-21 lld-21
399399
if: >
400400
runner.os == 'Linux' && env.COMPILER == 'clang'
401401
&& env.BUILD_TYPE == 'Release'
402402
403403
- name: Setup dependencies for Linux LLVM (static analysis)
404-
run: sudo apt-get install -y clang-tools-20
404+
run: sudo apt-get install -y clang-tools-21
405405
if: >
406406
runner.os == 'Linux' && env.COMPILER == 'clang'
407407
&& env.STATIC_ANALYSIS == 'ON'
408408
409409
- name: Setup dependencies for Linux LLVM (not static analysis)
410-
run: sudo apt-get install -y clang-tidy-20
410+
run: sudo apt-get install -y clang-tidy-21
411411
if: >
412412
runner.os == 'Linux' && env.COMPILER == 'clang'
413413
&& env.STATIC_ANALYSIS != 'ON'
@@ -444,7 +444,7 @@ jobs:
444444
export CC=gcc-$V
445445
export CXX=g++-$V
446446
elif [[ $COMPILER == "clang" ]]; then
447-
V=20
447+
V=21
448448
export CC=clang-$V
449449
export CXX=clang++-$V
450450
if [[ $BUILD_TYPE == "Release" ]]; then
@@ -497,7 +497,7 @@ jobs:
497497
- name: clang static analysis
498498
working-directory: ${{github.workspace}}/build
499499
run: |
500-
/usr/bin/scan-build-20 --status-bugs -stats -analyze-headers \
500+
/usr/bin/scan-build-21 --status-bugs -stats -analyze-headers \
501501
--force-analyze-debug-code make -j3 -k;
502502
if: env.STATIC_ANALYSIS == 'ON' && env.COMPILER == 'clang'
503503

.github/workflows/old-compilers.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,52 @@ jobs:
469469
COMPILER: clang
470470
VERSION: 19
471471

472+
- name: clang 20 Release
473+
BUILD_TYPE: Release
474+
COMPILER: clang
475+
VERSION: 20
476+
477+
- name: clang 20 Release with ASan
478+
BUILD_TYPE: Release
479+
SANITIZE_ADDRESS: ON
480+
COMPILER: clang
481+
VERSION: 20
482+
483+
- name: clang 20 Release with TSan
484+
BUILD_TYPE: Release
485+
SANITIZE_THREAD: ON
486+
COMPILER: clang
487+
VERSION: 20
488+
489+
- name: clang 20 Release with UBSan
490+
BUILD_TYPE: Release
491+
SANITIZE_UB: ON
492+
COMPILER: clang
493+
VERSION: 20
494+
495+
- name: clang 20 Debug
496+
BUILD_TYPE: Debug
497+
COMPILER: clang
498+
VERSION: 20
499+
500+
- name: clang 20 Debug with ASan
501+
BUILD_TYPE: Debug
502+
SANITIZE_ADDRESS: ON
503+
COMPILER: clang
504+
VERSION: 20
505+
506+
- name: clang 20 Debug with TSan
507+
BUILD_TYPE: Debug
508+
SANITIZE_THREAD: ON
509+
COMPILER: clang
510+
VERSION: 20
511+
512+
- name: clang 20 Debug with UBSan
513+
BUILD_TYPE: Debug
514+
SANITIZE_UB: ON
515+
COMPILER: clang
516+
VERSION: 20
517+
472518
- name: GCC 10 Release
473519
BUILD_TYPE: Release
474520
COMPILER: gcc

CMakeLists.txt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ set(CLANG_LT_13_CXX_WARNING_FLAGS "-Wreserved-id-macro")
8888
set(CLANG_GE_13_CXX_WARNING_FLAGS "-Wreserved-identifier")
8989
# Do not enable clang 16+ -Wunsafe-buffer-usage because it warns on all memcpy
9090
# calls and our pointer- and span-like class implementations.
91+
set(CLANG_GE_21_CXX_WARNING_FLAGS "-Wnrvo" "-Wunique-object-duplication"
92+
"-Wshift-bool" "-Wc99-designator" "-Wms-bitfield-padding")
9193

9294
set(GCC_CXX_WARNING_FLAGS
9395
# Warning groups
@@ -296,10 +298,17 @@ if(SANITIZE_UB)
296298
if(is_clang AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0)
297299
list(APPEND SANITIZER_CXX_FLAGS "-fsanitize=implicit-bitfield-conversion")
298300
endif()
301+
if(is_clang AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 21.0)
302+
list(APPEND SANITIZER_CXX_FLAGS "-fsanitize=vptr")
303+
endif()
299304
endif()
300305

301306
set(SANITIZER_LD_FLAGS "-fsanitize=undefined")
302307

308+
if(is_clang AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 21.0)
309+
list(APPEND SANITIZER_LD_FLAGS "-fsanitize=vptr")
310+
endif()
311+
303312
string(CONCAT UBSAN_ENV "UBSAN_OPTIONS="
304313
"print_stacktrace=1:halt_on_error=1:abort_on_error=1")
305314

@@ -402,9 +411,13 @@ set(cxx_ge_12 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,12.0>")
402411
set(cxx_lt_13 "$<VERSION_LESS:$<CXX_COMPILER_VERSION>,13.0>")
403412
set(cxx_ge_13 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,13.0>")
404413
set(cxx_ge_14 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,14.0>")
414+
set(cxx_ge_21 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,21.0>")
405415
set(is_clang_lt_13_not_windows "$<AND:${is_clang_not_windows},${cxx_lt_13}>")
406416
set(is_clang_ge_13_not_windows "$<AND:${is_clang_not_windows},${cxx_ge_13}>")
407417
set(is_clang_ge_14_not_windows "$<AND:${is_clang_not_windows},${cxx_ge_14}>")
418+
set(is_clang_ge_21_not_windows "$<AND:${is_clang_not_windows},${cxx_ge_21}>")
419+
set(is_darwin_clang_ge_21_x86_64 "$<AND:$<PLATFORM_ID:Darwin>,${is_clang_ge_21_not_windows},${is_not_windows_x86_64}>")
420+
set(is_darwin_clang_ge_21_arm64 "$<AND:$<PLATFORM_ID:Darwin>,${is_clang_ge_21_not_windows},$<NOT:${is_not_windows_x86_64}>>")
408421
set(is_gxx_ge_11 "$<AND:${is_gxx_genex},${cxx_ge_11}>")
409422
set(is_gxx_ge_12 "$<AND:${is_gxx_genex},${cxx_ge_12}>")
410423
set(is_gxx_ge_14 "$<AND:${is_gxx_genex},${cxx_ge_14}>")
@@ -616,6 +629,10 @@ else()
616629
else()
617630
message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}")
618631
set(DO_CLANG_TIDY "${CLANG_TIDY_EXE}" "-p=${CMAKE_BINARY_DIR}")
632+
# Add suppression for unknown warning options when clang-tidy might not
633+
# recognize all compiler warning flags (e.g., when scan-build from LLVM 21
634+
# wraps the build)
635+
list(APPEND DO_CLANG_TIDY "--extra-arg=-Wno-unknown-warning-option")
619636
endif()
620637
endif()
621638

@@ -674,7 +691,9 @@ if(IWYU)
674691
IWYU_VERSION_OUTPUT)
675692
message(STATUS
676693
"include-what-you-use found: ${IWYU_EXE}, --version: ${IWYU_VERSION_OUTPUT}")
677-
set(DO_IWYU "${IWYU_EXE}")
694+
# IWYU is not necessarily based on the same version clang is and might not
695+
# understand newer options
696+
set(DO_IWYU "${IWYU_EXE};-Wno-unknown-warning-option")
678697
endif()
679698
endif()
680699
endif()
@@ -709,6 +728,7 @@ function(COMMON_TARGET_PROPERTIES TARGET)
709728
"$<$<AND:${is_standalone},${is_any_clang_genex},${is_not_windows}>:${CLANG_CXX_WARNING_FLAGS}>"
710729
"$<$<AND:${is_standalone},${is_clang_lt_13_not_windows}>:${CLANG_LT_13_CXX_WARNING_FLAGS}>"
711730
"$<$<AND:${is_standalone},${is_clang_ge_13_not_windows}>:${CLANG_GE_13_CXX_WARNING_FLAGS}>"
731+
"$<$<AND:${is_standalone},${is_clang_ge_21_not_windows}>:${CLANG_GE_21_CXX_WARNING_FLAGS}>"
712732
"$<$<AND:${is_standalone},${is_gxx_genex}>:${GCC_CXX_WARNING_FLAGS}>"
713733
"$<$<AND:${is_standalone},${is_gxx_ge_11}>:${GCC_GE_11_CXX_WARNING_FLAGS}>"
714734
"$<$<AND:${is_standalone},${is_gxx_ge_12}>:${GCC_GE_12_CXX_WARNING_FLAGS}>"
@@ -721,6 +741,10 @@ function(COMMON_TARGET_PROPERTIES TARGET)
721741
target_link_options(${TARGET} INTERFACE "$<${coverage_on}:--coverage>")
722742
target_link_options(${TARGET} PRIVATE
723743
"$<${is_apple_clang_genex}:-Wl,-no_warn_duplicate_libraries>"
744+
"$<${is_darwin_clang_ge_21_x86_64}:-L/usr/local/opt/llvm/lib/c++>"
745+
"$<${is_darwin_clang_ge_21_x86_64}:-Wl,-rpath,/usr/local/opt/llvm/lib/c++>"
746+
"$<${is_darwin_clang_ge_21_arm64}:-L/opt/homebrew/opt/llvm/lib/c++>"
747+
"$<${is_darwin_clang_ge_21_arm64}:-Wl,-rpath,/opt/homebrew/opt/llvm/lib/c++>"
724748
"${SANITIZER_LD_FLAGS}"
725749
)
726750
target_link_libraries(${TARGET} PRIVATE

art_internal_impl.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,6 +1444,7 @@ class basic_inode_4 : public basic_inode_4_parent<ArtPolicy> {
14441444
keys.byte_array.cbegin(), keys.byte_array.cbegin() + children_count_));
14451445
}
14461446

1447+
UNODB_DETAIL_DISABLE_CLANG_21_WARNING("-Wnrvo")
14471448
[[nodiscard]] constexpr auto leave_last_child(std::uint8_t child_to_delete,
14481449
db_type &db_instance) noexcept {
14491450
UNODB_DETAIL_ASSERT(this->is_min_size());
@@ -1465,6 +1466,7 @@ class basic_inode_4 : public basic_inode_4_parent<ArtPolicy> {
14651466
}
14661467
return child_to_leave_ptr;
14671468
}
1469+
UNODB_DETAIL_RESTORE_CLANG_21_WARNINGS()
14681470

14691471
[[nodiscard, gnu::pure]] find_result find_child(std::byte key_byte) noexcept {
14701472
#ifdef UNODB_DETAIL_X86_64

benchmark/micro_benchmark_node_utils.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,8 @@ number_to_full_node_tree_with_gaps_key(std::uint64_t i) noexcept {
229229
// Key vectors
230230

231231
template <typename NumberToKeyFn>
232-
[[nodiscard]] auto generate_keys_to_limit(std::uint64_t key_limit,
233-
NumberToKeyFn number_to_key_fn) {
232+
[[nodiscard]] std::vector<std::uint64_t> generate_keys_to_limit(
233+
std::uint64_t key_limit, NumberToKeyFn number_to_key_fn) {
234234
std::vector<std::uint64_t> result;
235235
std::uint64_t i = 0;
236236
while (true) {

fuzz_deepstate/test_art_fuzz_deepstate.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ void op_with_oom_test(oracle_type &oracle, std::vector<std::uint64_t> &keys,
201201

202202
UNODB_START_DEEPSTATE_TESTS()
203203

204+
// NOLINTBEGIN(clang-analyzer-security.ArrayBound)
204205
TEST(ART, DeepStateFuzz) {
205206
const auto limit_max_key = DeepState_Bool();
206207
const auto max_key_value =
@@ -308,3 +309,4 @@ TEST(ART, DeepStateFuzz) {
308309
#endif // UNODB_DETAIL_WITH_STATS
309310
ASSERT(test_db.empty());
310311
}
312+
// NOLINTEND(clang-analyzer-security.ArrayBound)

fuzz_deepstate/test_qsbr_fuzz_deepstate.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,7 @@ void do_or_dispatch_op(std::size_t thread_i, thread_operation op) {
611611

612612
UNODB_START_DEEPSTATE_TESTS()
613613

614+
// NOLINTBEGIN(clang-analyzer-security.ArrayBound)
614615
TEST(QSBR, DeepStateFuzz) {
615616
const auto test_length = DeepState_ShortInRange(0, 2000);
616617
LOG(TRACE) << "Test length " << test_length;
@@ -758,5 +759,6 @@ TEST(QSBR, DeepStateFuzz) {
758759
ASSERT(unodb::this_thread().previous_interval_requests_empty());
759760
ASSERT(unodb::this_thread().current_interval_requests_empty());
760761
}
762+
// NOLINTEND(clang-analyzer-security.ArrayBound)
761763

762764
} // namespace

0 commit comments

Comments
 (0)