Document the vendored doctest.h patch; fix stale doctest_compatibility.h comments

tests/thirdparty/doctest/doctest.h is doctest 2.4.12, imported in
#4771. Two weeks later, #4801 hand-edited translateActiveException()
to declare "String res;" inside the translator loop instead of before
it, so a translator that does not match does not leave a previous
translator's result in "res" for the next iteration to see. Nothing
recorded this, so re-vendoring doctest.h from upstream would silently
drop the fix. Add a comment at the patched site naming the version,
the PR and the reason, so a future re-vendor knows to re-apply it.

Also fix two stale comments in doctest_compatibility.h:
- The DOCTEST_THREAD_LOCAL comment referenced Xcode 6/7, which is no
  longer supported; reword it to explain why the define must stay
  regardless (it keeps doctest's own thread_local usage out of the way
  of the same Clang/MinGW crash that JSON_NO_THREAD_LOCAL works around
  in the library, see ci_test_no_thread_local).
- The <iosfwd> include's comment justified it with tests that define
  "private" as "public"; no test under tests/src does that any more
  (removed by #2352). Reword the comment instead of dropping the
  include, since confirming it is safe to drop needs the full CI
  matrix including MSVC 2015+.

Verified locally that tests/src/unit-readme.cpp still builds and
passes 17/17 with these headers.

Closes #5714 item 9.

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
Niels Lohmann
2026-09-30 18:19:33 +02:00
parent ffb14ca07d
commit f07a17ce29
2 changed files with 18 additions and 4 deletions
+6
View File
@@ -4498,6 +4498,12 @@ namespace {
String translateActiveException() {
#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
auto& translators = getExceptionTranslators();
// nlohmann/json locally patches upstream doctest 2.4.12 here: "res" was
// declared once before the loop and reused by every iteration; move it
// inside the loop so each translator gets a freshly default-constructed
// "res" instead of one a previous, non-matching translator may have
// written to (see nlohmann/json#4801). Re-apply this hunk when
// re-vendoring doctest.h from upstream.
for(auto& curr : translators) {
String res;
if (curr->translate(res))