mirror of
https://github.com/nlohmann/json.git
synced 2026-10-04 13:40:33 +00:00
clang_flags.cmake blamed the global -Wno-extra-semi-stmt on assert(),
but assert() expands to an expression under glibc and libc++ and does
not trigger this warning. unit-assert_macro.cpp overrides JSON_ASSERT
with "{if (!(x)) ++assert_counter; }", a bare block followed by a
semicolon at every JSON_ASSERT(...) call site in the library; that
was the actual source of 151 of the 208 -Wextra-semi-stmt sites found
in a Clang 22 -Weverything sweep of the test suite with the flag
removed. Switched to the standard do/while(false) macro idiom, which
does not expand to a statement-plus-semicolon, and corrected the
comment to name the remaining source instead: vendored Doctest's
CAPTURE(x) shim, which already ends in a semicolon.
Verified with clang++ -Wextra-semi-stmt (plus the file's other CI
ignores) that unit-assert_macro.cpp now compiles without any
-Wextra-semi-stmt diagnostic.
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
#5725 item 8 (step 1 of 2; step 2 covers the CAPTURE() call sites)
30 lines
1.5 KiB
CMake
30 lines
1.5 KiB
CMake
# Ignored Clang warnings:
|
|
# -Wno-c++98-compat The library targets C++11.
|
|
# -Wno-c++98-compat-pedantic The library targets C++11.
|
|
# -Wno-deprecated-declarations The library contains annotations for deprecated functions.
|
|
# -Wno-extra-semi-stmt Vendored Doctest's CAPTURE() macro expands to a
|
|
# statement followed by a semicolon at every call site.
|
|
# -Wno-padded We do not care about padding warnings.
|
|
# -Wno-covered-switch-default All switches list all cases and a default case.
|
|
# -Wno-c2y-extensions Clang 22.1 diagnoses __COUNTER__ as a C2y extension, also in
|
|
# C++ mode. The library does not use __COUNTER__; the warnings
|
|
# all come from vendored Doctest (SECTION/TEST_CASE macros).
|
|
# -Wno-unsafe-buffer-usage Pervasive: the library's own low-level numeric/buffer code
|
|
# (to_chars, serializer, lexer, binary reader/writer, input
|
|
# adapters, json_pointer) plus vendored Doctest itself (~208
|
|
# distinct sites measured 2026-07-08 on clang trunk) all use
|
|
# raw pointer arithmetic / libc string calls by necessity.
|
|
|
|
set(CLANG_CXXFLAGS
|
|
-Werror
|
|
-Weverything
|
|
-Wno-c++98-compat
|
|
-Wno-c++98-compat-pedantic
|
|
-Wno-deprecated-declarations
|
|
-Wno-extra-semi-stmt
|
|
-Wno-padded
|
|
-Wno-covered-switch-default
|
|
-Wno-c2y-extensions
|
|
-Wno-unsafe-buffer-usage
|
|
)
|