| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
:page_facing_up: adjust year (#5044) Signed-off-by: Niels Lohmann <mail@nlohmann.me> | 8 个月前 | |
docs: add IDs to @requirement tags to fix Doxygen autolinking (#5162) Signed-off-by: Swastik Bose <cpswastik31@gmail.com> | 3 个月前 | |
Route hand-rolled diagnostic pragmas through Hedley (#5485) * Route hand-rolled diagnostic pragmas through Hedley Several places in the library hand-roll compiler diagnostic suppression with raw `#pragma`/`#ifdef __GNUC__`/`#ifdef __clang__` guards instead of using the Hedley primitives already bundled and used elsewhere (JSON_HEDLEY_DIAGNOSTIC_PUSH/POP, JSON_HEDLEY_PRAGMA, ...). Converted six of the seven listed push/pop pairs to use those primitives instead of raw `#pragma GCC diagnostic`/`#pragma clang diagnostic` text: - include/nlohmann/json.hpp (~3770, ~3863): -Wfloat-equal - include/nlohmann/detail/conversions/to_chars.hpp (~1078): -Wfloat-equal - include/nlohmann/detail/output/binary_writer.hpp (~1844): -Wfloat-equal - include/nlohmann/detail/iterators/iteration_proxy.hpp (~211): -Wmismatched-tags - include/nlohmann/detail/exceptions.hpp (~36): -Wweak-vtables iteration_proxy.hpp did not previously include macro_scope.hpp itself (it only compiled because some other header included earlier in json.hpp happened to pull macro_scope.hpp in first); it now includes it directly like the other detail headers that use Hedley macros, so it is self-contained. Each push/pop pair now uses JSON_HEDLEY_DIAGNOSTIC_PUSH/POP unconditionally (a no-op on compilers that don't need it) and wraps the actual `#pragma ... diagnostic ignored` text in JSON_HEDLEY_PRAGMA so it goes through Hedley's _Pragma()-based emission instead of a raw #pragma line, while keeping the original `#ifdef __GNUC__` / `#if defined(__clang__)` guard around the ignored-pragma itself. Deviation from the issue's suggested transformation: the issue's example replaces the `#ifdef __GNUC__` guard with `#if JSON_HEDLEY_HAS_WARNING("-Wfloat-equal")`. JSON_HEDLEY_HAS_WARNING is implemented purely via Clang's `__has_warning` builtin and evaluates to 0 on real GCC (`#define JSON_HEDLEY_HAS_WARNING(warning) (0)` when `__has_warning` is not defined), so adopting it verbatim would silently stop suppressing -Wfloat-equal on GCC -- a real regression, not just a style change. The existing `#ifdef __GNUC__` / `#if defined(__clang__)` guards were kept for the ignored-pragma to stay behavior-preserving, and only the push/pop/pragma-emission mechanism was routed through Hedley. Two of the seven locations from the issue (the -Wignored-attributes push at the very top of json.hpp and its matching pop after `#include <nlohmann/detail/macro_unscope.hpp>`) were intentionally left unconverted: - The push, at the very top of json.hpp, runs before `detail/macro_scope.hpp` (and therefore hedley.hpp) has been included anywhere in the translation unit, so JSON_HEDLEY_DIAGNOSTIC_PUSH is not yet defined at that point. - The pop runs after `macro_unscope.hpp`, which -- via hedley_undef.hpp -- has already #undef'd every JSON_HEDLEY_* macro (by design, see #5408) precisely so they don't leak to users, so JSON_HEDLEY_DIAGNOSTIC_POP is no longer defined by the time the pop is reached either. Making this one pair work would require either hoisting the ~2000 line vendored hedley.hpp to the very top of the amalgamated single header (a much bigger structural change to single_include than a pure mechanism swap) or special-casing this one pop ahead of the general macro cleanup. Both are riskier than the mechanical, behavior-preserving change requested, so this pair was left as-is. ## Validation - Compiled include/nlohmann/json.hpp and single_include/nlohmann/json.hpp with `-Wall -Wextra -Wfloat-equal -Wmismatched-tags -Wweak-vtables` (clang, which self-identifies as __GNUC__ too): no warnings, same as before the change. - Compiled and ran tests/src/unit-to_chars.cpp, unit-conversions.cpp, unit-iterators1.cpp, unit-iterators2.cpp, and unit-class_parser.cpp against the fixed include/: all pass. - Compiled unit-msgpack.cpp, unit-bjdata.cpp, and unit-ubjson.cpp (which exercise binary_writer.hpp's write_compact_float extensively): all compile cleanly; the vast majority of assertions pass (the only failures are pre-existing environment issues unrelated to this change -- missing generated test-data files, not code correctness). - Ran `make amalgamate`; the single_include diff is limited to exactly the lines touched in include/, with no unrelated reordering. - No real (non-Apple) GCC was available in this environment to test directly; the `_Pragma("GCC diagnostic ...")` text emitted by JSON_HEDLEY_PRAGMA is byte-identical to the prior `#pragma GCC diagnostic ...` text, and the `#ifdef __GNUC__` guard is unchanged, so GCC's behavior is expected to be identical. CI covers the GCC matrix. This PR is stacked on top of #5475 (issue-5408-hedley-undef-leak) since both touch the same files; only the last commit here is new. Fixes #5409. Signed-off-by: Niels Lohmann <mail@nlohmann.me> * Guard JSON_HEDLEY_DIAGNOSTIC_PUSH/POP with the same compiler check as the pragma they bracket Addresses review feedback from @gregmarr on PR #5485: the push/pop calls were unconditional, so compilers other than the one the ignored-pragma targets (e.g. MSVC, or GCC where the pair only applies under __clang__) now did a needless push/pop with nothing suppressed in between. Move the existing #ifdef __GNUC__ / #if defined(__clang__) guard to also cover the push/pop, restoring the original zero-overhead behavior on other compilers while still emitting the pragma itself through Hedley. Signed-off-by: Niels Lohmann <mail@nlohmann.me> --------- Signed-off-by: Niels Lohmann <mail@nlohmann.me> | 13 小时前 | |
:page_facing_up: adjust year (#5044) Signed-off-by: Niels Lohmann <mail@nlohmann.me> | 8 个月前 | |
docs: add IDs to @requirement tags to fix Doxygen autolinking (#5162) Signed-off-by: Swastik Bose <cpswastik31@gmail.com> | 3 个月前 | |
:page_facing_up: adjust year (#5044) Signed-off-by: Niels Lohmann <mail@nlohmann.me> | 8 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 8 个月前 | ||
| 3 个月前 | ||
| 13 小时前 | ||
| 8 个月前 | ||
| 3 个月前 | ||
| 8 个月前 |