From b3b621427f0f9eaf2213666dc037b4d293cd25f6 Mon Sep 17 00:00:00 2001 From: Matheus Izvekov Date: Mon, 1 Dec 2025 13:51:22 -0300 Subject: [PATCH 1/2] fix: preserve extraction mode when copying members from derived classes Fixes #1119 --- include/mrdocs/Metadata/Symbol/SymbolBase.hpp | 5 +++++ .../Finalizers/BaseMembersFinalizer.cpp | 1 + .../Finalizers/DocCommentFinalizer.cpp | 7 ++++++- test-files/golden-tests/regression/1119.adoc | 8 ++++++++ test-files/golden-tests/regression/1119.cpp | 13 +++++++++++++ test-files/golden-tests/regression/1119.html | 19 +++++++++++++++++++ test-files/golden-tests/regression/1119.xml | 6 ++++++ test-files/golden-tests/regression/1119.yml | 2 ++ 8 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 test-files/golden-tests/regression/1119.adoc create mode 100644 test-files/golden-tests/regression/1119.cpp create mode 100644 test-files/golden-tests/regression/1119.html create mode 100644 test-files/golden-tests/regression/1119.xml create mode 100644 test-files/golden-tests/regression/1119.yml diff --git a/include/mrdocs/Metadata/Symbol/SymbolBase.hpp b/include/mrdocs/Metadata/Symbol/SymbolBase.hpp index 6ff2116d8b..ae2d13fd34 100644 --- a/include/mrdocs/Metadata/Symbol/SymbolBase.hpp +++ b/include/mrdocs/Metadata/Symbol/SymbolBase.hpp @@ -71,6 +71,11 @@ struct MRDOCS_VISIBLE Symbol { */ ExtractionMode Extraction = ExtractionMode::Dependency; + /** Whether this a copy of an inherited method, as produced when + `inherit-base-members` is not `never`. + */ + bool IsCopyFromInherited = false; + /** The parent symbol, if any. This is the parent namespace or record diff --git a/src/lib/Metadata/Finalizers/BaseMembersFinalizer.cpp b/src/lib/Metadata/Finalizers/BaseMembersFinalizer.cpp index 6054da83e3..7fd45175db 100644 --- a/src/lib/Metadata/Finalizers/BaseMembersFinalizer.cpp +++ b/src/lib/Metadata/Finalizers/BaseMembersFinalizer.cpp @@ -172,6 +172,7 @@ inheritBaseMembers( otherCopy->id = SymbolID::createFromString( std::format("{}-{}", toBase16Str(otherCopy->Parent), toBase16Str(otherInfo.id))); + otherCopy->IsCopyFromInherited = true; derived.push_back(otherCopy->id); // Get the extraction mode from the derived class if (otherCopy->Extraction == ExtractionMode::Dependency || diff --git a/src/lib/Metadata/Finalizers/DocCommentFinalizer.cpp b/src/lib/Metadata/Finalizers/DocCommentFinalizer.cpp index cbeaeed93f..53bd465773 100644 --- a/src/lib/Metadata/Finalizers/DocCommentFinalizer.cpp +++ b/src/lib/Metadata/Finalizers/DocCommentFinalizer.cpp @@ -1731,7 +1731,8 @@ DocCommentFinalizer::warnUndocumented() if (Symbol const* I = corpus_.find(undocI.id)) { MRDOCS_CHECK_OR( - !I->doc || I->Extraction == ExtractionMode::Regular); + !I->doc || I->Extraction == ExtractionMode::Regular + || I->IsCopyFromInherited == false); } bool const prefer_definition = is_one_of( undocI.kind, {SymbolKind::Record, SymbolKind::Enum}); @@ -1752,6 +1753,7 @@ warnDocErrors() for (auto const& I : corpus_.info_) { MRDOCS_CHECK_OR_CONTINUE(I->Extraction == ExtractionMode::Regular); + MRDOCS_CHECK_OR_CONTINUE(I->IsCopyFromInherited == false); MRDOCS_CHECK_OR_CONTINUE(I->isFunction()); warnParamErrors(dynamic_cast(*I)); } @@ -1807,6 +1809,7 @@ warnNoParamDocs() for (auto const& I : corpus_.info_) { MRDOCS_CHECK_OR_CONTINUE(I->Extraction == ExtractionMode::Regular); + MRDOCS_CHECK_OR_CONTINUE(I->IsCopyFromInherited == false); MRDOCS_CHECK_OR_CONTINUE(I->isFunction()); MRDOCS_CHECK_OR_CONTINUE(I->doc); warnNoParamDocs(dynamic_cast(*I)); @@ -1869,6 +1872,7 @@ warnUndocEnumValues() { MRDOCS_CHECK_OR_CONTINUE(I->isEnumConstant()); MRDOCS_CHECK_OR_CONTINUE(I->Extraction == ExtractionMode::Regular); + MRDOCS_CHECK_OR_CONTINUE(I->IsCopyFromInherited == false); MRDOCS_CHECK_OR_CONTINUE(!I->doc); this->warn( *getPrimaryLocation(*I), @@ -1886,6 +1890,7 @@ warnUnnamedParams() { MRDOCS_CHECK_OR_CONTINUE(I->isFunction()); MRDOCS_CHECK_OR_CONTINUE(I->Extraction == ExtractionMode::Regular); + MRDOCS_CHECK_OR_CONTINUE(I->IsCopyFromInherited == false); MRDOCS_CHECK_OR_CONTINUE(I->doc); warnUnnamedParams(dynamic_cast(*I)); } diff --git a/test-files/golden-tests/regression/1119.adoc b/test-files/golden-tests/regression/1119.adoc new file mode 100644 index 0000000000..fff40cfa14 --- /dev/null +++ b/test-files/golden-tests/regression/1119.adoc @@ -0,0 +1,8 @@ += Reference +:mrdocs: + +[#index] +== Global namespace + + +[.small]#Created with https://www.mrdocs.com[MrDocs]# diff --git a/test-files/golden-tests/regression/1119.cpp b/test-files/golden-tests/regression/1119.cpp new file mode 100644 index 0000000000..e195b8fb7f --- /dev/null +++ b/test-files/golden-tests/regression/1119.cpp @@ -0,0 +1,13 @@ +namespace ns { +struct Foo { + /// bar + int + bar(); +}; +} // namespace ns + +/// project namespace +namespace mrdocs { +/// Baz +struct Baz : ns::Foo {}; +} // namespace mrdocs diff --git a/test-files/golden-tests/regression/1119.html b/test-files/golden-tests/regression/1119.html new file mode 100644 index 0000000000..135e79d40d --- /dev/null +++ b/test-files/golden-tests/regression/1119.html @@ -0,0 +1,19 @@ + + +Reference + + +
+

Reference

+
+
+

+
+
+ +
+
+

Created with MrDocs

+
+ + \ No newline at end of file diff --git a/test-files/golden-tests/regression/1119.xml b/test-files/golden-tests/regression/1119.xml new file mode 100644 index 0000000000..fd4dc6e6d5 --- /dev/null +++ b/test-files/golden-tests/regression/1119.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/test-files/golden-tests/regression/1119.yml b/test-files/golden-tests/regression/1119.yml new file mode 100644 index 0000000000..d640148ac0 --- /dev/null +++ b/test-files/golden-tests/regression/1119.yml @@ -0,0 +1,2 @@ +include-symbols: + - 'foobar::**' From 8852efd701ea2fc80b5a4f3b82423961c85bc000 Mon Sep 17 00:00:00 2001 From: Agustin Berge Date: Tue, 30 Sep 2025 11:35:51 +0200 Subject: [PATCH 2/2] use system libs by default --- .clang-format | 4 +++ .github/workflows/ci.yml | 3 +- CMakeLists.txt | 22 +++++------- docs/modules/ROOT/pages/usage.adoc | 2 +- docs/mrdocs.schema.json | 7 ++-- docs/website/snippets/sqrt.cpp | 1 - include/mrdocs/Support/Concepts.hpp | 4 +++ src/lib/AST/ASTVisitor.cpp | 3 +- src/lib/ConfigOptions.json | 9 +++-- src/lib/MrDocsCompilationDatabase.cpp | 9 +++-- src/lib/MrDocsSettingsDB.cpp | 8 +++-- src/test/TestRunner.cpp | 5 ++- .../golden-tests/config/sfinae/redeclare.cpp | 3 +- .../golden-tests/config/sfinae/redeclare.yml | 2 ++ .../config/sfinae/return-based.yml | 2 ++ test-files/golden-tests/core/libcxx.yml | 2 ++ test-files/golden-tests/snippets/sqrt.cpp | 1 - test-files/golden-tests/snippets/sqrt.xml | 2 +- test-files/golden-tests/snippets/sqrt.yml | 2 ++ .../golden-tests/symbols/function/sfinae.cpp | 1 - .../golden-tests/symbols/function/sfinae.xml | 34 +++++++++---------- test-files/include/type_traits | 32 +++++++++++++++++ util/generate-config-info.py | 2 +- 23 files changed, 102 insertions(+), 58 deletions(-) create mode 100644 test-files/golden-tests/config/sfinae/redeclare.yml create mode 100644 test-files/golden-tests/config/sfinae/return-based.yml create mode 100644 test-files/golden-tests/core/libcxx.yml create mode 100644 test-files/golden-tests/snippets/sqrt.yml create mode 100644 test-files/include/type_traits diff --git a/.clang-format b/.clang-format index 1033103e53..f31bb5f342 100644 --- a/.clang-format +++ b/.clang-format @@ -227,3 +227,7 @@ IncludeCategories: # Comments FixNamespaceComments: true CommentPragmas: '^ clang-format' + +--- +Language: Json +BasedOnStyle: llvm diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f7c7c4432..3810ffd62f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -549,8 +549,7 @@ jobs: - name: CMake Workflow uses: alandefreitas/cpp-actions/cmake-workflow@v1.8.12 env: - # Bump per-test timeout on Windows to avoid CTest default (1500s) killing slow golden suites. - CTEST_TEST_TIMEOUT: ${{ runner.os == 'Windows' && '3600' || '' }} + CTEST_TEST_TIMEOUT: 3600 with: cmake-version: '>=3.26' cxxstd: ${{ matrix.cxxstd }} diff --git a/CMakeLists.txt b/CMakeLists.txt index cd2db0f870..f57defab07 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -261,15 +261,6 @@ if (NOT EXISTS "${LIBCXX_DIR}") "Please provide a LLVM with libc++ enabled\n") endif() -set(STDLIB_INCLUDE_DIR "${LLVM_BINARY_DIR}/lib/clang/${Clang_VERSION_MAJOR}/include" - CACHE PATH "Path to the clang headers include directory") -message(STATUS "STDLIB_INCLUDE_DIR: ${STDLIB_INCLUDE_DIR}") -if (NOT EXISTS "${STDLIB_INCLUDE_DIR}") - message(FATAL_ERROR - "STDLIB_INCLUDE_DIR (${STDLIB_INCLUDE_DIR}) does not exist.\n" - "Missing clang headers\n") -endif() - list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") include(HandleLLVMOptions) add_definitions(${LLVM_DEFINITIONS}) @@ -388,6 +379,7 @@ if (WIN32) mrdocs-core PUBLIC /permissive- # strict C++ + /Zc:__cplusplus # report C++ standard support /W4 # enable all warnings /MP # multi-processor compilation /EHs # C++ Exception handling @@ -411,6 +403,13 @@ if (MRDOCS_DOCUMENTATION_BUILD) return() endif() +# Replicate the clang resource directory structure within our own build, +# so that libclang will find it when executing directly from the build directory. +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib/clang") +set(RESOURCE_DIR "lib/clang/${Clang_VERSION_MAJOR}") +file(CREATE_LINK "${LLVM_BINARY_DIR}/${RESOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_DIR}" SYMBOLIC) + #------------------------------------------------- # # Tool @@ -490,7 +489,6 @@ if (MRDOCS_BUILD_TESTS) "--addons=${CMAKE_SOURCE_DIR}/share/mrdocs/addons" --generator=${testgenerator} "--stdlib-includes=${LIBCXX_DIR}" - "--stdlib-includes=${STDLIB_INCLUDE_DIR}" "--libc-includes=${CMAKE_SOURCE_DIR}/share/mrdocs/headers/libc-stubs" --log-level=warn ) @@ -505,7 +503,6 @@ if (MRDOCS_BUILD_TESTS) "--addons=${CMAKE_SOURCE_DIR}/share/mrdocs/addons" --generator=${testgenerator} "--stdlib-includes=${LIBCXX_DIR}" - "--stdlib-includes=${STDLIB_INCLUDE_DIR}" "--libc-includes=${CMAKE_SOURCE_DIR}/share/mrdocs/headers/libc-stubs" --log-level=warn DEPENDS mrdocs-test @@ -703,9 +700,6 @@ if (MRDOCS_INSTALL) install(DIRECTORY ${LIBCXX_DIR}/ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mrdocs/headers/libcxx FILES_MATCHING PATTERN "*") - install(DIRECTORY ${STDLIB_INCLUDE_DIR}/ - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mrdocs/headers/clang - FILES_MATCHING PATTERN "*") install(DIRECTORY ${CMAKE_SOURCE_DIR}/share/mrdocs/headers/libc-stubs/ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mrdocs/headers/libc-stubs FILES_MATCHING PATTERN "*") diff --git a/docs/modules/ROOT/pages/usage.adoc b/docs/modules/ROOT/pages/usage.adoc index 473aa42977..12eed36239 100644 --- a/docs/modules/ROOT/pages/usage.adoc +++ b/docs/modules/ROOT/pages/usage.adoc @@ -278,7 +278,7 @@ It's also common for libraries to depend on the C++ standard library, the C stan That means unless `-nostdinc` is defined, all systems include paths are included. This is what allows the user to also use headers like `` or `` without explicitly including anything else, even though they are not part of the C standard library. This is often seen as a convenience but can lead to portability issues. -In this context, MrDocs provides the `use-system-stdlib` and `use-system-libc` options. Both are set as `false` by default, meaning MrDocs will compile the code as if the `-nostdinc++ -nostdlib++` and `-nostdinc` flags were passed to Clang. Additionally: +In this context, MrDocs provides the `use-system-stdlib` and `use-system-libc` options. Both are set as `true` by default; setting both to `false` results in MrDocs compiling the code as if the `-nostdinc++ -nostdlib++` and `-nostdinc` flags were passed to Clang. Additionally: - When `use-system-stdlib` is `false`, MrDocs will use the bundled libc++ headers available in `/share/mrdocs/headers/libcxx` and `/share/mrdocs/headers/clang`. These paths can be adjusted with the `stdlib-includes` option. - When `use-system-libc` is `false`, MrDocs will use the bundled libc stubs available in `/share/mrdocs/headers/libc-stubs`. This path can be adjusted with the `libc-includes` option. diff --git a/docs/mrdocs.schema.json b/docs/mrdocs.schema.json index f904ece171..2adcadf892 100644 --- a/docs/mrdocs.schema.json +++ b/docs/mrdocs.schema.json @@ -531,8 +531,7 @@ }, "stdlib-includes": { "default": [ - "/share/mrdocs/headers/libcxx", - "/share/mrdocs/headers/clang" + "/share/mrdocs/headers/libcxx" ], "description": "When `use-system-stdlib` is disabled, the C++ standard library headers are available in these paths.", "items": { @@ -557,7 +556,7 @@ "type": "string" }, "use-system-libc": { - "default": false, + "default": true, "description": "To achieve reproducible results, MrDocs bundles the LibC headers with its definitions. To use the C standard library available in the system instead, set this option to true.", "enum": [ true, @@ -567,7 +566,7 @@ "type": "boolean" }, "use-system-stdlib": { - "default": false, + "default": true, "description": "To achieve reproducible results, MrDocs bundles the LibC++ headers. To use the C++ standard library available in the system instead, set this option to true.", "enum": [ true, diff --git a/docs/website/snippets/sqrt.cpp b/docs/website/snippets/sqrt.cpp index 24d30487a4..dde92f52c9 100644 --- a/docs/website/snippets/sqrt.cpp +++ b/docs/website/snippets/sqrt.cpp @@ -1,5 +1,4 @@ #include -#include /** Computes the square root of an integral value. diff --git a/include/mrdocs/Support/Concepts.hpp b/include/mrdocs/Support/Concepts.hpp index 054547e807..02edaacc31 100644 --- a/include/mrdocs/Support/Concepts.hpp +++ b/include/mrdocs/Support/Concepts.hpp @@ -137,7 +137,11 @@ concept range_of_tuple_like = std::ranges::range && tuple_like>; #ifdef __cpp_lib_reference_from_temporary + /** True when binding `To` from `From` would require a temporary conversion. + */ using std::reference_constructs_from_temporary_v; + /** Like `reference_converts_from_temporary_v`, but for construction. + */ using std::reference_converts_from_temporary_v; #else /** True when binding `To` from `From` would require a temporary conversion. diff --git a/src/lib/AST/ASTVisitor.cpp b/src/lib/AST/ASTVisitor.cpp index 5df1fa2e2a..1dce2310f1 100644 --- a/src/lib/AST/ASTVisitor.cpp +++ b/src/lib/AST/ASTVisitor.cpp @@ -2378,7 +2378,8 @@ extractSFINAEInfo(clang::QualType const T) Result.Type = resultType->getAsType(); for (std::size_t I = 0; I < Args.size(); ++I) { - if (SFINAEControl->ControllingParams[I]) + if (I < SFINAEControl->ControllingParams.size() + && SFINAEControl->ControllingParams[I]) { MRDOCS_SYMBOL_TRACE(Args[I], context_); clang::TemplateArgument ArgsI = Args[I]; diff --git a/src/lib/ConfigOptions.json b/src/lib/ConfigOptions.json index dc8212890b..d5ff306920 100644 --- a/src/lib/ConfigOptions.json +++ b/src/lib/ConfigOptions.json @@ -493,7 +493,7 @@ "brief": "Use the system C++ standard library", "details": "To achieve reproducible results, MrDocs bundles the LibC++ headers. To use the C++ standard library available in the system instead, set this option to true.", "type": "bool", - "default": false + "default": true }, { "name": "stdlib-includes", @@ -501,8 +501,7 @@ "details": "When `use-system-stdlib` is disabled, the C++ standard library headers are available in these paths.", "type": "list", "default": [ - "/share/mrdocs/headers/libcxx", - "/share/mrdocs/headers/clang" + "/share/mrdocs/headers/libcxx" ], "relative-to": "", "must-exist": false, @@ -513,7 +512,7 @@ "brief": "Use the system C standard library", "details": "To achieve reproducible results, MrDocs bundles the LibC headers with its definitions. To use the C standard library available in the system instead, set this option to true.", "type": "bool", - "default": false + "default": true }, { "name": "libc-includes", @@ -672,4 +671,4 @@ } ] } -] \ No newline at end of file +] diff --git a/src/lib/MrDocsCompilationDatabase.cpp b/src/lib/MrDocsCompilationDatabase.cpp index 61cd76aea2..188ca52afa 100644 --- a/src/lib/MrDocsCompilationDatabase.cpp +++ b/src/lib/MrDocsCompilationDatabase.cpp @@ -302,7 +302,10 @@ adjustCommandLine( cmdLineCStrs.data(), cmdLineCStrs.data() + cmdLineCStrs.size()); - auto const systemIncludeFlag = is_clang_cl ? "-external:I" : "-isystem"; + char const* systemIncludeFlag = is_clang_cl ? "-external:I" : "-isystem"; + // FIXME: No CL equivalent, but not really needed there? + char const* afterIncludeFlag = is_clang_cl ? "-external:I" : "-idirafter"; + // ------------------------------------------------------ // Supress all warnings @@ -406,10 +409,10 @@ adjustCommandLine( if (!(*config)->useSystemLibc) { - new_cmdline.emplace_back("-nostdinc"); + new_cmdline.emplace_back(is_clang_cl ? "-X" : "-nostdlibinc"); for (auto const& inc : (*config)->libcIncludes) { - new_cmdline.emplace_back(systemIncludeFlag); + new_cmdline.emplace_back(afterIncludeFlag); new_cmdline.emplace_back(inc); } } diff --git a/src/lib/MrDocsSettingsDB.cpp b/src/lib/MrDocsSettingsDB.cpp index d32b0cc6b9..edbc9e0cec 100644 --- a/src/lib/MrDocsSettingsDB.cpp +++ b/src/lib/MrDocsSettingsDB.cpp @@ -11,6 +11,7 @@ #include "MrDocsSettingsDB.hpp" #include +#include namespace mrdocs { @@ -60,17 +61,18 @@ MrDocsSettingsDB::MrDocsSettingsDB(ConfigImpl const& config) }); } + llvm::ErrorOr clangPath = llvm::sys::findProgramByName( + "clang"); + for (auto const& pathName: sourceFiles) { // auto fileName = files::getFileName(pathName); auto parentDir = files::getParentDir(pathName); std::vector cmds; - cmds.emplace_back("clang"); + cmds.emplace_back(clangPath ? *clangPath : "clang"); cmds.emplace_back("-fsyntax-only"); cmds.emplace_back("-std=c++23"); - cmds.emplace_back("-pedantic-errors"); - cmds.emplace_back("-Werror"); cmds.emplace_back("-x"); cmds.emplace_back("c++"); cmds.emplace_back(pathName); diff --git a/src/test/TestRunner.cpp b/src/test/TestRunner.cpp index 847e5825d6..07b0e4c947 100644 --- a/src/test/TestRunner.cpp +++ b/src/test/TestRunner.cpp @@ -125,7 +125,10 @@ handleFile( auto parentDir = files::getParentDir(filePath); std::unordered_map> - defaultIncludePaths; + defaultIncludePaths = { + { "clang", { MRDOCS_TEST_FILES_DIR "/include" } }, + { "clang-cl", { MRDOCS_TEST_FILES_DIR "/include" } }, + }; // Test normally { diff --git a/test-files/golden-tests/config/sfinae/redeclare.cpp b/test-files/golden-tests/config/sfinae/redeclare.cpp index 7eb75ff959..7b122fa88f 100644 --- a/test-files/golden-tests/config/sfinae/redeclare.cpp +++ b/test-files/golden-tests/config/sfinae/redeclare.cpp @@ -10,5 +10,4 @@ void f(std::enable_if_t>); template void f(std::enable_if_t>) -{ -} \ No newline at end of file +{} diff --git a/test-files/golden-tests/config/sfinae/redeclare.yml b/test-files/golden-tests/config/sfinae/redeclare.yml new file mode 100644 index 0000000000..8061ae78c2 --- /dev/null +++ b/test-files/golden-tests/config/sfinae/redeclare.yml @@ -0,0 +1,2 @@ +warn-if-doc-error: false +warn-no-paramdoc: false diff --git a/test-files/golden-tests/config/sfinae/return-based.yml b/test-files/golden-tests/config/sfinae/return-based.yml new file mode 100644 index 0000000000..8061ae78c2 --- /dev/null +++ b/test-files/golden-tests/config/sfinae/return-based.yml @@ -0,0 +1,2 @@ +warn-if-doc-error: false +warn-no-paramdoc: false diff --git a/test-files/golden-tests/core/libcxx.yml b/test-files/golden-tests/core/libcxx.yml new file mode 100644 index 0000000000..b3b0f2a2da --- /dev/null +++ b/test-files/golden-tests/core/libcxx.yml @@ -0,0 +1,2 @@ +use-system-stdlib: false +use-system-libc: false diff --git a/test-files/golden-tests/snippets/sqrt.cpp b/test-files/golden-tests/snippets/sqrt.cpp index 24d30487a4..dde92f52c9 100644 --- a/test-files/golden-tests/snippets/sqrt.cpp +++ b/test-files/golden-tests/snippets/sqrt.cpp @@ -1,5 +1,4 @@ #include -#include /** Computes the square root of an integral value. diff --git a/test-files/golden-tests/snippets/sqrt.xml b/test-files/golden-tests/snippets/sqrt.xml index ef5b19c514..3840317a1d 100644 --- a/test-files/golden-tests/snippets/sqrt.xml +++ b/test-files/golden-tests/snippets/sqrt.xml @@ -5,7 +5,7 @@