Merge topic 'SKIP_LINTING-FileSet-property'

f18ba89862 FILE_SET: add SKIP_LINTING property support

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !12004
diff --git a/.clang-tidy b/.clang-tidy
index ccd74be..ae0dc23 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -3,8 +3,10 @@
 bugprone-*,\
 -bugprone-assignment-in-if-condition,\
 -bugprone-crtp-constructor-accessibility,\
+-bugprone-derived-method-shadowing-base-method,\
 -bugprone-easily-swappable-parameters,\
 -bugprone-empty-catch,\
+-bugprone-exception-escape,\
 -bugprone-implicit-widening-of-multiplication-result,\
 -bugprone-inc-dec-in-conditions,\
 -bugprone-macro-parentheses,\
@@ -13,8 +15,10 @@
 -bugprone-return-const-ref-from-parameter,\
 -bugprone-suspicious-stringview-data-usage,\
 -bugprone-switch-missing-default-case,\
+-bugprone-throwing-static-initialization,\
 -bugprone-too-small-loop-variable,\
 -bugprone-unchecked-optional-access,\
+-bugprone-unchecked-string-to-number-conversion,\
 -bugprone-unused-local-non-trivial-variable,\
 -bugprone-unused-return-value,\
 -bugprone-use-after-move,\
@@ -22,13 +26,17 @@
 -misc-confusable-identifiers,\
 -misc-const-correctness,\
 -misc-include-cleaner,\
+-misc-multiple-inheritance,\
 -misc-non-private-member-variables-in-classes,\
 -misc-no-recursion,\
+-misc-override-with-different-visibility,\
+-misc-predictable-rand,\
 -misc-static-assert,\
 -misc-use-anonymous-namespace,\
 -misc-use-internal-linkage,\
 modernize-*,\
 -modernize-avoid-c-arrays,\
+-modernize-avoid-c-style-cast,\
 -modernize-concat-nested-namespaces,\
 -modernize-macro-to-enum,\
 -modernize-return-braced-init-list,\
@@ -60,6 +68,9 @@
 -readability-make-member-function-const,\
 -readability-math-missing-parentheses,\
 -readability-named-parameter,\
+-readability-redundant-casting,\
+-readability-redundant-parentheses,\
+-readability-redundant-typename,\
 -readability-simplify-boolean-expr,\
 -readability-static-accessed-through-instance,\
 -readability-suspicious-call-argument,\
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7345496..8c78b99 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -65,7 +65,7 @@
 
 p:doc-package:
     extends:
-        - .fedora43_sphinx_package
+        - .fedora44_sphinx_package
         - .cmake_prep_doc_linux
         - .linux_x86_64_tags
         - .cmake_doc_artifacts
@@ -129,18 +129,18 @@
         - .cmake_cdash_artifacts
         - .rules
 
-l:tidy-fedora43:
+l:tidy-fedora44:
     extends:
-        - .fedora43_tidy
+        - .fedora44_tidy
         - .cmake_build_linux
         - .cmake_tidy_artifacts
         - .linux_x86_64_tags
         - .cmake_cdash_artifacts
         - .rules
 
-l:pvs-studio-fedora43:
+l:pvs-studio-fedora44:
     extends:
-        - .fedora43_pvs_studio
+        - .fedora44_pvs_studio
         - .cmake_build_linux
         - .linux_x86_64_tags
         - .cmake_cdash_artifacts
@@ -150,9 +150,9 @@
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_NO_MR: "true"
 
-l:sphinx-fedora43:
+l:sphinx-fedora44:
     extends:
-        - .fedora43_sphinx
+        - .fedora44_sphinx
         - .cmake_build_linux
         - .cmake_sphinx_artifacts
         - .linux_x86_64_tags
@@ -161,34 +161,34 @@
         CMAKE_CI_JOB_CONTINUOUS: "true"
         CMAKE_CI_JOB_HELP: "true"
 
-l:clang-analyzer-fedora43:
+l:clang-analyzer-fedora44:
     extends:
-        - .fedora43_clang_analyzer
+        - .fedora44_clang_analyzer
         - .cmake_build_linux
         - .linux_x86_64_tags
         - .rules
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-l:clang-fuzzing-fedora43:
+l:clang-fuzzing-fedora44:
     extends:
-        - .fedora43_clang_fuzzing
+        - .fedora44_clang_fuzzing
         - .cmake_build_linux
         - .linux_x86_64_tags
         - .rules
 
-l:clazy-fedora43:
+l:clazy-fedora44:
     extends:
-        - .fedora43_clazy
+        - .fedora44_clazy
         - .cmake_build_linux
         - .linux_x86_64_tags
         - .rules
 
 # Coverage builds
 
-b:fedora43-gcc-gcov:
+b:fedora44-gcc-gcov:
     extends:
-        - .fedora43_gcc_gcov
+        - .fedora44_gcc_gcov
         - .cmake_build_linux
         - .cmake_build_artifacts
         - .linux_x86_64_tags
@@ -197,9 +197,9 @@
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-t:fedora43-gcc-gcov:
+t:fedora44-gcc-gcov:
     extends:
-        - .fedora43_gcc_gcov
+        - .fedora44_gcc_gcov
         - .cmake_test_linux
         - .cmake_coverage_artifacts
         - .linux_x86_64_tags_x11
@@ -207,25 +207,25 @@
     # Run coverage analysis even if the tests fail.
     allow_failure: true
     needs:
-        - b:fedora43-gcc-gcov
+        - b:fedora44-gcc-gcov
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-a:fedora43-gcc-gcov:
+a:fedora44-gcc-gcov:
     extends:
-        - .fedora43_gcc_gcov
+        - .fedora44_gcc_gcov
         - .cmake_coverage_linux
         - .cmake_cdash_artifacts
         - .linux_x86_64_tags
         - .rules
     needs:
-        - t:fedora43-gcc-gcov
+        - t:fedora44-gcc-gcov
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-b:fedora43-bullseye-coverage:
+b:fedora44-bullseye-coverage:
     extends:
-        - .fedora43_bullseye_coverage
+        - .fedora44_bullseye_coverage
         - .cmake_build_linux
         - .cmake_build_artifacts
         - .linux_x86_64_tags
@@ -235,9 +235,9 @@
         CMAKE_CI_JOB_NO_MR: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-t:fedora43-bullseye-coverage:
+t:fedora44-bullseye-coverage:
     extends:
-        - .fedora43_bullseye_coverage
+        - .fedora44_bullseye_coverage
         - .cmake_test_linux
         - .cmake_coverage_artifacts
         - .linux_x86_64_tags_x11
@@ -245,20 +245,20 @@
     # Run coverage analysis even if the tests fail.
     allow_failure: true
     needs:
-        - b:fedora43-bullseye-coverage
+        - b:fedora44-bullseye-coverage
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_NO_MR: "true"
 
-a:fedora43-bullseye-coverage:
+a:fedora44-bullseye-coverage:
     extends:
-        - .fedora43_bullseye_coverage
+        - .fedora44_bullseye_coverage
         - .cmake_coverage_linux
         - .cmake_cdash_artifacts
         - .linux_x86_64_tags
         - .rules
     needs:
-        - t:fedora43-bullseye-coverage
+        - t:fedora44-bullseye-coverage
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_NO_MR: "true"
@@ -352,9 +352,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-hip-radeon:
+t:fedora44-hip-radeon:
     extends:
-        - .fedora43_hip_radeon
+        - .fedora44_hip_radeon
         - .cmake_test_linux_release
         - .linux_x86_64_tags_rocm6.2
         - .rules
@@ -362,9 +362,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-makefiles-lfortran:
+t:fedora44-makefiles-lfortran:
     extends:
-        - .fedora43_makefiles_lfortran
+        - .fedora44_makefiles_lfortran
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -372,9 +372,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-ninja-lfortran:
+t:fedora44-ninja-lfortran:
     extends:
-        - .fedora43_ninja_lfortran
+        - .fedora44_ninja_lfortran
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -382,17 +382,17 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-ninja-multi:
+t:fedora44-ninja-multi:
     extends:
-        - .fedora43_ninja_multi
+        - .fedora44_ninja_multi
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
         - .needs_centos7_x86_64
 
-t:fedora43-ninja-clang:
+t:fedora44-ninja-clang:
     extends:
-        - .fedora43_ninja_clang
+        - .fedora44_ninja_clang
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -400,9 +400,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-ninja-gcc-std-reloc:
+t:fedora44-ninja-gcc-std-reloc:
     extends:
-        - .fedora43_ninja_gcc_std_reloc
+        - .fedora44_ninja_gcc_std_reloc
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -410,9 +410,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-ninja-multi-clang:
+t:fedora44-ninja-multi-clang:
     extends:
-        - .fedora43_ninja_multi_clang
+        - .fedora44_ninja_multi_clang
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -420,9 +420,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-makefiles-clang:
+t:fedora44-makefiles-clang:
     extends:
-        - .fedora43_makefiles_clang
+        - .fedora44_makefiles_clang
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -430,17 +430,17 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-makefiles:
+t:fedora44-makefiles:
     extends:
-        - .fedora43_makefiles
+        - .fedora44_makefiles
         - .cmake_test_linux_release
         - .linux_x86_64_v3_tags
         - .rules
         - .needs_centos7_x86_64
 
-t:fedora43-makefiles-nospace:
+t:fedora44-makefiles-nospace:
     extends:
-        - .fedora43_makefiles
+        - .fedora44_makefiles
         - .cmake_test_linux_release
         - .linux_x86_64_v3_tags
         - .cmake_junit_artifacts
@@ -448,12 +448,12 @@
         - .needs_centos7_x86_64
     variables:
         GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci"
-        CMAKE_CI_BUILD_NAME: fedora43_makefiles_nospace
+        CMAKE_CI_BUILD_NAME: fedora44_makefiles_nospace
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-fastbuild:
+t:fedora44-fastbuild:
     extends:
-        - .fedora43_fastbuild
+        - .fedora44_fastbuild
         - .cmake_test_linux_release
         - .linux_x86_64_v3_tags
         - .rules
@@ -461,9 +461,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-instrumentation:
+t:fedora44-instrumentation:
     extends:
-        - .fedora43_ninja_instrumentation
+        - .fedora44_ninja_instrumentation
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -670,9 +670,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-b:fedora43-ninja:
+b:fedora44-ninja:
     extends:
-        - .fedora43_ninja
+        - .fedora44_ninja
         - .cmake_build_linux
         - .cmake_build_artifacts
         - .linux_x86_64_tags
@@ -681,9 +681,9 @@
         CMAKE_CI_JOB_CONTINUOUS: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-b:fedora43-makefiles-symlinked:
+b:fedora44-makefiles-symlinked:
     extends:
-        - .fedora43_makefiles_symlinked
+        - .fedora44_makefiles_symlinked
         - .cmake_build_linux
         - .cmake_build_artifacts
         - .linux_x86_64_tags
@@ -722,9 +722,9 @@
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-b:fedora43-extdeps:
+b:fedora44-extdeps:
     extends:
-        - .fedora43_extdeps
+        - .fedora44_extdeps
         - .cmake_build_linux_standalone
         - .linux_x86_64_tags
         - .rules
@@ -732,27 +732,27 @@
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-t:fedora43-ninja:
+t:fedora44-ninja:
     extends:
-        - .fedora43_ninja
+        - .fedora44_ninja
         - .cmake_test_linux
         - .linux_x86_64_tags_x11
         - .cmake_test_artifacts
         - .rules
     needs:
-        - b:fedora43-ninja
+        - b:fedora44-ninja
     variables:
         CMAKE_CI_JOB_CONTINUOUS: "true"
 
-t:fedora43-makefiles-symlinked:
+t:fedora44-makefiles-symlinked:
     extends:
-        - .fedora43_makefiles_symlinked
+        - .fedora44_makefiles_symlinked
         - .cmake_test_linux
         - .linux_x86_64_tags_x11
         - .cmake_test_artifacts
         - .rules
     needs:
-        - b:fedora43-makefiles-symlinked
+        - b:fedora44-makefiles-symlinked
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
@@ -945,9 +945,9 @@
 
 ## Sanitizer builds
 
-b:fedora43-asan:
+b:fedora44-asan:
     extends:
-        - .fedora43_asan
+        - .fedora44_asan
         - .cmake_build_linux
         - .cmake_build_artifacts
         - .linux_x86_64_tags
@@ -956,21 +956,21 @@
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-t:fedora43-asan:
+t:fedora44-asan:
     extends:
-        - .fedora43_asan
+        - .fedora44_asan
         - .cmake_memcheck_linux
         - .linux_x86_64_tags
         - .cmake_junit_artifacts
         - .rules
     needs:
-        - b:fedora43-asan
+        - b:fedora44-asan
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-ninja-valgrind:
+t:fedora44-ninja-valgrind:
     extends:
-        - .fedora43_ninja_valgrind
+        - .fedora44_ninja_valgrind
         - .cmake_test_linux_release
         # Use a fast CPU so that timeouts are less of a concern.
         - .linux_x86_64_tags_fast_x11
diff --git a/.gitlab/ci/bullseye.sh b/.gitlab/ci/bullseye.sh
index 8c4cd2b..132588c 100755
--- a/.gitlab/ci/bullseye.sh
+++ b/.gitlab/ci/bullseye.sh
@@ -7,12 +7,12 @@
     exit 1
 fi
 
-readonly version="9.22.3"
+readonly version="9.25.1"
 
 case "$(uname -s)-$(uname -m)" in
     Linux-x86_64)
         tarball="BullseyeCoverage-$version-Linux-x64.tar.xz"
-        sha256sum="d5be7e65d9363161b67fa77a30407c7c200d995af79a422c4e2e278802ba0776"
+        sha256sum="cc77ef1ffd846e9911a5a22c41a8e24c5e1f1c4c59c0c688b6756fcb14fa4af5"
         shatool="sha256sum"
         ;;
     *)
diff --git a/.gitlab/ci/configure_fedora43_clang_analyzer.cmake b/.gitlab/ci/configure_fedora43_clang_analyzer.cmake
deleted file mode 100644
index c18dfe6..0000000
--- a/.gitlab/ci/configure_fedora43_clang_analyzer.cmake
+++ /dev/null
@@ -1,4 +0,0 @@
-set(configure_no_sccache 1)
-set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
-
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_makefiles_lfortran.cmake b/.gitlab/ci/configure_fedora43_makefiles_lfortran.cmake
deleted file mode 100644
index 918c2c3..0000000
--- a/.gitlab/ci/configure_fedora43_makefiles_lfortran.cmake
+++ /dev/null
@@ -1 +0,0 @@
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common_lfortran.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja_lfortran.cmake b/.gitlab/ci/configure_fedora43_ninja_lfortran.cmake
deleted file mode 100644
index 918c2c3..0000000
--- a/.gitlab/ci/configure_fedora43_ninja_lfortran.cmake
+++ /dev/null
@@ -1 +0,0 @@
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common_lfortran.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja_valgrind.cmake b/.gitlab/ci/configure_fedora43_ninja_valgrind.cmake
deleted file mode 100644
index d156e20..0000000
--- a/.gitlab/ci/configure_fedora43_ninja_valgrind.cmake
+++ /dev/null
@@ -1,6 +0,0 @@
-set(CMake_TEST_Qt5 ON CACHE BOOL "")
-set(CMake_TEST_Qt6 ON CACHE BOOL "")
-
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_valgrind.cmake")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_ninja.cmake")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_fedora43_pvs_studio.cmake b/.gitlab/ci/configure_fedora43_pvs_studio.cmake
deleted file mode 100644
index ff6e7f0..0000000
--- a/.gitlab/ci/configure_fedora43_pvs_studio.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-set(configure_no_sccache 1)
-set(CMake_RUN_PVS_STUDIO ON CACHE BOOL "")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_asan.cmake b/.gitlab/ci/configure_fedora44_asan.cmake
similarity index 72%
rename from .gitlab/ci/configure_fedora43_asan.cmake
rename to .gitlab/ci/configure_fedora44_asan.cmake
index 9913430..88f40c3 100644
--- a/.gitlab/ci/configure_fedora43_asan.cmake
+++ b/.gitlab/ci/configure_fedora44_asan.cmake
@@ -2,4 +2,4 @@
 set(CMAKE_CXX_FLAGS "-fsanitize=address" CACHE STRING "")
 set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_bullseye_coverage.cmake b/.gitlab/ci/configure_fedora44_bullseye_coverage.cmake
similarity index 94%
rename from .gitlab/ci/configure_fedora43_bullseye_coverage.cmake
rename to .gitlab/ci/configure_fedora44_bullseye_coverage.cmake
index e9cf156..d2e44a9 100644
--- a/.gitlab/ci/configure_fedora43_bullseye_coverage.cmake
+++ b/.gitlab/ci/configure_fedora44_bullseye_coverage.cmake
@@ -19,4 +19,4 @@
 set(CMake_TEST_TLS_VERSION "1.3" CACHE STRING "")
 set(CMake_TEST_TLS_VERSION_URL_BAD "https://badtls-v1-1.kitware.com:8011" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora44_clang_analyzer.cmake b/.gitlab/ci/configure_fedora44_clang_analyzer.cmake
new file mode 100644
index 0000000..58046b9
--- /dev/null
+++ b/.gitlab/ci/configure_fedora44_clang_analyzer.cmake
@@ -0,0 +1,4 @@
+set(configure_no_sccache 1)
+set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
+
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_clang_fuzzing.cmake b/.gitlab/ci/configure_fedora44_clang_fuzzing.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_clang_fuzzing.cmake
rename to .gitlab/ci/configure_fedora44_clang_fuzzing.cmake
diff --git a/.gitlab/ci/configure_fedora43_clazy.cmake b/.gitlab/ci/configure_fedora44_clazy.cmake
similarity index 66%
rename from .gitlab/ci/configure_fedora43_clazy.cmake
rename to .gitlab/ci/configure_fedora44_clazy.cmake
index 1943447..7f2ec78 100644
--- a/.gitlab/ci/configure_fedora43_clazy.cmake
+++ b/.gitlab/ci/configure_fedora44_clazy.cmake
@@ -2,4 +2,4 @@
 set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
 set(CMAKE_USE_SYSTEM_JSONCPP ON CACHE BOOL "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_common.cmake b/.gitlab/ci/configure_fedora44_common.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_common.cmake
rename to .gitlab/ci/configure_fedora44_common.cmake
diff --git a/.gitlab/ci/configure_fedora43_common_clang.cmake b/.gitlab/ci/configure_fedora44_common_clang.cmake
similarity index 91%
rename from .gitlab/ci/configure_fedora43_common_clang.cmake
rename to .gitlab/ci/configure_fedora44_common_clang.cmake
index 941a040..c7b38b6 100644
--- a/.gitlab/ci/configure_fedora43_common_clang.cmake
+++ b/.gitlab/ci/configure_fedora44_common_clang.cmake
@@ -1,4 +1,4 @@
-set(CMAKE_Fortran_COMPILER "/usr/bin/flang-21" CACHE FILEPATH "")
+set(CMAKE_Fortran_COMPILER "/usr/bin/flang" CACHE FILEPATH "")
 set(CMAKE_Fortran_COMPILER_ID "LLVMFlang" CACHE STRING "")
 set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 "1" CACHE BOOL "")
 
diff --git a/.gitlab/ci/configure_fedora43_common_lfortran.cmake b/.gitlab/ci/configure_fedora44_common_lfortran.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_common_lfortran.cmake
rename to .gitlab/ci/configure_fedora44_common_lfortran.cmake
diff --git a/.gitlab/ci/configure_fedora43_extdeps.cmake b/.gitlab/ci/configure_fedora44_extdeps.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_extdeps.cmake
rename to .gitlab/ci/configure_fedora44_extdeps.cmake
diff --git a/.gitlab/ci/configure_fedora43_fastbuild.cmake b/.gitlab/ci/configure_fedora44_fastbuild.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_fastbuild.cmake
rename to .gitlab/ci/configure_fedora44_fastbuild.cmake
diff --git a/.gitlab/ci/configure_fedora43_gcc_gcov.cmake b/.gitlab/ci/configure_fedora44_gcc_gcov.cmake
similarity index 95%
rename from .gitlab/ci/configure_fedora43_gcc_gcov.cmake
rename to .gitlab/ci/configure_fedora44_gcc_gcov.cmake
index a40e0cc..e54437e 100644
--- a/.gitlab/ci/configure_fedora43_gcc_gcov.cmake
+++ b/.gitlab/ci/configure_fedora44_gcc_gcov.cmake
@@ -28,4 +28,4 @@
 # Do not bootstrap for the coverage test suite.
 set(CMAKE_SKIP_BOOTSTRAP_TEST TRUE CACHE BOOL "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_hip_radeon.cmake b/.gitlab/ci/configure_fedora44_hip_radeon.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_hip_radeon.cmake
rename to .gitlab/ci/configure_fedora44_hip_radeon.cmake
diff --git a/.gitlab/ci/configure_fedora43_makefiles.cmake b/.gitlab/ci/configure_fedora44_makefiles.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_makefiles.cmake
rename to .gitlab/ci/configure_fedora44_makefiles.cmake
diff --git a/.gitlab/ci/configure_fedora43_makefiles_clang.cmake b/.gitlab/ci/configure_fedora44_makefiles_clang.cmake
similarity index 68%
rename from .gitlab/ci/configure_fedora43_makefiles_clang.cmake
rename to .gitlab/ci/configure_fedora44_makefiles_clang.cmake
index e3f1ef9..02bf288 100644
--- a/.gitlab/ci/configure_fedora43_makefiles_clang.cmake
+++ b/.gitlab/ci/configure_fedora44_makefiles_clang.cmake
@@ -2,4 +2,4 @@
   set(CMAKE_TESTS_CDASH_SERVER "https://open.cdash.org" CACHE STRING "")
 endif()
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common_clang.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common_clang.cmake")
diff --git a/.gitlab/ci/configure_fedora44_makefiles_lfortran.cmake b/.gitlab/ci/configure_fedora44_makefiles_lfortran.cmake
new file mode 100644
index 0000000..2289116
--- /dev/null
+++ b/.gitlab/ci/configure_fedora44_makefiles_lfortran.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common_lfortran.cmake")
diff --git a/.gitlab/ci/configure_fedora43_makefiles_symlinked.cmake b/.gitlab/ci/configure_fedora44_makefiles_symlinked.cmake
similarity index 71%
rename from .gitlab/ci/configure_fedora43_makefiles_symlinked.cmake
rename to .gitlab/ci/configure_fedora44_makefiles_symlinked.cmake
index c5ef84c..e14b28f 100644
--- a/.gitlab/ci/configure_fedora43_makefiles_symlinked.cmake
+++ b/.gitlab/ci/configure_fedora44_makefiles_symlinked.cmake
@@ -2,4 +2,4 @@
 set(CMake_TEST_GUI "ON" CACHE BOOL "")
 
 include("${CMAKE_CURRENT_LIST_DIR}/configure_symlinked_common.cmake")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja.cmake b/.gitlab/ci/configure_fedora44_ninja.cmake
similarity index 96%
rename from .gitlab/ci/configure_fedora43_ninja.cmake
rename to .gitlab/ci/configure_fedora44_ninja.cmake
index 94e6e81..d536871 100644
--- a/.gitlab/ci/configure_fedora43_ninja.cmake
+++ b/.gitlab/ci/configure_fedora44_ninja.cmake
@@ -42,4 +42,4 @@
 # Qt 6 requires C++17, so use Qt 5.
 set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja_clang.cmake b/.gitlab/ci/configure_fedora44_ninja_clang.cmake
similarity index 75%
rename from .gitlab/ci/configure_fedora43_ninja_clang.cmake
rename to .gitlab/ci/configure_fedora44_ninja_clang.cmake
index 6cf0f85..5e007f4 100644
--- a/.gitlab/ci/configure_fedora43_ninja_clang.cmake
+++ b/.gitlab/ci/configure_fedora44_ninja_clang.cmake
@@ -1,3 +1,3 @@
 set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly,build_database,import_std23" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common_clang.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common_clang.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja_gcc_std_reloc.cmake b/.gitlab/ci/configure_fedora44_ninja_gcc_std_reloc.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_ninja_gcc_std_reloc.cmake
rename to .gitlab/ci/configure_fedora44_ninja_gcc_std_reloc.cmake
diff --git a/.gitlab/ci/configure_fedora43_ninja_instrumentation.cmake b/.gitlab/ci/configure_fedora44_ninja_instrumentation.cmake
similarity index 60%
rename from .gitlab/ci/configure_fedora43_ninja_instrumentation.cmake
rename to .gitlab/ci/configure_fedora44_ninja_instrumentation.cmake
index daf845f..1033477 100644
--- a/.gitlab/ci/configure_fedora43_ninja_instrumentation.cmake
+++ b/.gitlab/ci/configure_fedora44_ninja_instrumentation.cmake
@@ -1,3 +1,3 @@
 set(CMake_ENABLE_INSTRUMENTATION "ON" CACHE BOOL "")
 set(CMake_TEST_GUI "OFF" CACHE BOOL "")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_ninja.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_ninja.cmake")
diff --git a/.gitlab/ci/configure_fedora44_ninja_lfortran.cmake b/.gitlab/ci/configure_fedora44_ninja_lfortran.cmake
new file mode 100644
index 0000000..2289116
--- /dev/null
+++ b/.gitlab/ci/configure_fedora44_ninja_lfortran.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common_lfortran.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja_multi.cmake b/.gitlab/ci/configure_fedora44_ninja_multi.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_ninja_multi.cmake
rename to .gitlab/ci/configure_fedora44_ninja_multi.cmake
diff --git a/.gitlab/ci/configure_fedora43_ninja_multi_clang.cmake b/.gitlab/ci/configure_fedora44_ninja_multi_clang.cmake
similarity index 74%
rename from .gitlab/ci/configure_fedora43_ninja_multi_clang.cmake
rename to .gitlab/ci/configure_fedora44_ninja_multi_clang.cmake
index 522d012..3a54edf 100644
--- a/.gitlab/ci/configure_fedora43_ninja_multi_clang.cmake
+++ b/.gitlab/ci/configure_fedora44_ninja_multi_clang.cmake
@@ -1,3 +1,3 @@
 set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly,build_database" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common_clang.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common_clang.cmake")
diff --git a/.gitlab/ci/configure_fedora44_ninja_valgrind.cmake b/.gitlab/ci/configure_fedora44_ninja_valgrind.cmake
new file mode 100644
index 0000000..53f1b83
--- /dev/null
+++ b/.gitlab/ci/configure_fedora44_ninja_valgrind.cmake
@@ -0,0 +1,6 @@
+set(CMake_TEST_Qt5 ON CACHE BOOL "")
+set(CMake_TEST_Qt6 ON CACHE BOOL "")
+
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_valgrind.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_ninja.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_fedora44_pvs_studio.cmake b/.gitlab/ci/configure_fedora44_pvs_studio.cmake
new file mode 100644
index 0000000..b15137e
--- /dev/null
+++ b/.gitlab/ci/configure_fedora44_pvs_studio.cmake
@@ -0,0 +1,3 @@
+set(configure_no_sccache 1)
+set(CMake_RUN_PVS_STUDIO ON CACHE BOOL "")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_sphinx.cmake b/.gitlab/ci/configure_fedora44_sphinx.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_sphinx.cmake
rename to .gitlab/ci/configure_fedora44_sphinx.cmake
diff --git a/.gitlab/ci/configure_fedora43_sphinx_package.cmake b/.gitlab/ci/configure_fedora44_sphinx_package.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_sphinx_package.cmake
rename to .gitlab/ci/configure_fedora44_sphinx_package.cmake
diff --git a/.gitlab/ci/configure_fedora43_tidy.cmake b/.gitlab/ci/configure_fedora44_tidy.cmake
similarity index 85%
rename from .gitlab/ci/configure_fedora43_tidy.cmake
rename to .gitlab/ci/configure_fedora44_tidy.cmake
index 5b0bd62..18e7743 100644
--- a/.gitlab/ci/configure_fedora43_tidy.cmake
+++ b/.gitlab/ci/configure_fedora44_tidy.cmake
@@ -4,4 +4,4 @@
 set(CMake_CLANG_TIDY_EXPORT_FIXES_DIR "$ENV{CI_PROJECT_DIR}/.gitlab/clang-tidy-fixes" CACHE PATH "")
 set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_valgrind.cmake b/.gitlab/ci/configure_fedora44_valgrind.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_valgrind.cmake
rename to .gitlab/ci/configure_fedora44_valgrind.cmake
diff --git a/.gitlab/ci/ctest_memcheck_fedora43.valgrind.supp b/.gitlab/ci/ctest_memcheck_fedora44.valgrind.supp
similarity index 100%
rename from .gitlab/ci/ctest_memcheck_fedora43.valgrind.supp
rename to .gitlab/ci/ctest_memcheck_fedora44.valgrind.supp
diff --git a/.gitlab/ci/ctest_memcheck_fedora43_asan.lsan.supp b/.gitlab/ci/ctest_memcheck_fedora44_asan.lsan.supp
similarity index 100%
rename from .gitlab/ci/ctest_memcheck_fedora43_asan.lsan.supp
rename to .gitlab/ci/ctest_memcheck_fedora44_asan.lsan.supp
diff --git a/.gitlab/ci/docker/fedora43-hip/Dockerfile b/.gitlab/ci/docker/fedora44-hip/Dockerfile
similarity index 94%
rename from .gitlab/ci/docker/fedora43-hip/Dockerfile
rename to .gitlab/ci/docker/fedora44-hip/Dockerfile
index 0f0cbed..463d19f 100644
--- a/.gitlab/ci/docker/fedora43-hip/Dockerfile
+++ b/.gitlab/ci/docker/fedora44-hip/Dockerfile
@@ -1,6 +1,6 @@
 # syntax=docker/dockerfile:1
 
-ARG BASE_IMAGE=fedora:43
+ARG BASE_IMAGE=fedora:44
 
 FROM ${BASE_IMAGE} AS dnf-cache
 LABEL maintainer="Brad King <brad.king@kitware.com>"
diff --git a/.gitlab/ci/docker/fedora43-hip/deps_packages.lst b/.gitlab/ci/docker/fedora44-hip/deps_packages.lst
similarity index 93%
rename from .gitlab/ci/docker/fedora43-hip/deps_packages.lst
rename to .gitlab/ci/docker/fedora44-hip/deps_packages.lst
index abae13a..bac9e53 100644
--- a/.gitlab/ci/docker/fedora43-hip/deps_packages.lst
+++ b/.gitlab/ci/docker/fedora44-hip/deps_packages.lst
@@ -7,7 +7,6 @@
 make
 
 # Install HIP language toolchain.
-hsakmt-devel
 lld
 llvm
 rocm-comgr-devel
diff --git a/.gitlab/ci/docker/fedora43-hip/dnf.conf b/.gitlab/ci/docker/fedora44-hip/dnf.conf
similarity index 100%
rename from .gitlab/ci/docker/fedora43-hip/dnf.conf
rename to .gitlab/ci/docker/fedora44-hip/dnf.conf
diff --git a/.gitlab/ci/docker/fedora43/Dockerfile b/.gitlab/ci/docker/fedora44/Dockerfile
similarity index 98%
rename from .gitlab/ci/docker/fedora43/Dockerfile
rename to .gitlab/ci/docker/fedora44/Dockerfile
index 86ee3b8..d36ccc9 100644
--- a/.gitlab/ci/docker/fedora43/Dockerfile
+++ b/.gitlab/ci/docker/fedora44/Dockerfile
@@ -1,6 +1,6 @@
 # syntax=docker/dockerfile:1
 
-ARG BASE_IMAGE=fedora:43
+ARG BASE_IMAGE=fedora:44
 
 FROM ${BASE_IMAGE} AS dnf-cache
 # Populate DNF cache w/ the fresh metadata and prefetch packages.
@@ -132,4 +132,4 @@
     tar -C /usr/local -xf /root/rvm.tar
 
 RUN --mount=type=bind,from=rbenv-build,source=/root,target=/root \
-    tar -C / -xf /root/rbenv.tar && rbenv global 3.4.3
+    tar -C / -xf /root/rbenv.tar && rbenv global 3.4.9
diff --git a/.gitlab/ci/docker/fedora43/build_iwyu.sh b/.gitlab/ci/docker/fedora44/build_iwyu.sh
similarity index 100%
rename from .gitlab/ci/docker/fedora43/build_iwyu.sh
rename to .gitlab/ci/docker/fedora44/build_iwyu.sh
diff --git a/.gitlab/ci/docker/fedora43/build_rbenv.sh b/.gitlab/ci/docker/fedora44/build_rbenv.sh
similarity index 92%
rename from .gitlab/ci/docker/fedora43/build_rbenv.sh
rename to .gitlab/ci/docker/fedora44/build_rbenv.sh
index feb574f..f5ddd06 100755
--- a/.gitlab/ci/docker/fedora43/build_rbenv.sh
+++ b/.gitlab/ci/docker/fedora44/build_rbenv.sh
@@ -7,7 +7,7 @@
 # Ruby rbenv
 export RUBY_CONFIGURE_OPTS=--disable-install-doc
 export RUBY_BUILD_CURL_OPTS=-C-
-rbenv install 3.4.3 -k -s -v
+rbenv install 3.4.9 -k -s -v
 
 cat <<EOF >/tmp/exclude.lst
 *LICENSE*
diff --git a/.gitlab/ci/docker/fedora43/build_rust.sh b/.gitlab/ci/docker/fedora44/build_rust.sh
similarity index 88%
rename from .gitlab/ci/docker/fedora43/build_rust.sh
rename to .gitlab/ci/docker/fedora44/build_rust.sh
index 5ab91f7..1ee87eb 100755
--- a/.gitlab/ci/docker/fedora43/build_rust.sh
+++ b/.gitlab/ci/docker/fedora44/build_rust.sh
@@ -2,7 +2,7 @@
 
 set -e
 
-typos_version=1.44.0
+typos_version=1.45.2
 cargo install --root /usr/local --version "$typos_version" typos-cli
 
 strip /usr/local/bin/typos
diff --git a/.gitlab/ci/docker/fedora43/build_rvm.sh b/.gitlab/ci/docker/fedora44/build_rvm.sh
similarity index 100%
rename from .gitlab/ci/docker/fedora43/build_rvm.sh
rename to .gitlab/ci/docker/fedora44/build_rvm.sh
diff --git a/.gitlab/ci/docker/fedora43/deps_packages.lst b/.gitlab/ci/docker/fedora44/deps_packages.lst
similarity index 98%
rename from .gitlab/ci/docker/fedora43/deps_packages.lst
rename to .gitlab/ci/docker/fedora44/deps_packages.lst
index 143c296..b763bb7 100644
--- a/.gitlab/ci/docker/fedora43/deps_packages.lst
+++ b/.gitlab/ci/docker/fedora44/deps_packages.lst
@@ -96,7 +96,7 @@
 hdf5-openmpi-devel
 ImageMagick-c++-devel
 jasper-devel
-java-21-openjdk-devel
+java-25-openjdk-devel
 jsoncpp-devel
 lapack-devel
 libarchive-devel
diff --git a/.gitlab/ci/docker/fedora43/dnf.conf b/.gitlab/ci/docker/fedora44/dnf.conf
similarity index 100%
rename from .gitlab/ci/docker/fedora43/dnf.conf
rename to .gitlab/ci/docker/fedora44/dnf.conf
diff --git a/.gitlab/ci/docker/fedora43/install_deps.sh b/.gitlab/ci/docker/fedora44/install_deps.sh
similarity index 100%
rename from .gitlab/ci/docker/fedora43/install_deps.sh
rename to .gitlab/ci/docker/fedora44/install_deps.sh
diff --git a/.gitlab/ci/docker/fedora43/iwyu_packages.lst b/.gitlab/ci/docker/fedora44/iwyu_packages.lst
similarity index 100%
rename from .gitlab/ci/docker/fedora43/iwyu_packages.lst
rename to .gitlab/ci/docker/fedora44/iwyu_packages.lst
diff --git a/.gitlab/ci/docker/fedora43/rbenv_packages.lst b/.gitlab/ci/docker/fedora44/rbenv_packages.lst
similarity index 93%
rename from .gitlab/ci/docker/fedora43/rbenv_packages.lst
rename to .gitlab/ci/docker/fedora44/rbenv_packages.lst
index d16afff..7cba990 100644
--- a/.gitlab/ci/docker/fedora43/rbenv_packages.lst
+++ b/.gitlab/ci/docker/fedora44/rbenv_packages.lst
@@ -1,5 +1,6 @@
 rbenv
 ruby-build-rbenv
+ruby-build-ruby
 
 # Packages needed for `rbenv`
 # https://github.com/rbenv/ruby-build/wiki#fedora
diff --git a/.gitlab/ci/docker/fedora43/rust_packages.lst b/.gitlab/ci/docker/fedora44/rust_packages.lst
similarity index 100%
rename from .gitlab/ci/docker/fedora43/rust_packages.lst
rename to .gitlab/ci/docker/fedora44/rust_packages.lst
diff --git a/.gitlab/ci/docker/fedora43/rvm_packages.lst b/.gitlab/ci/docker/fedora44/rvm_packages.lst
similarity index 100%
rename from .gitlab/ci/docker/fedora43/rvm_packages.lst
rename to .gitlab/ci/docker/fedora44/rvm_packages.lst
diff --git a/.gitlab/ci/env_fedora43_common_clang.sh b/.gitlab/ci/env_fedora43_common_clang.sh
deleted file mode 100644
index 55533e7..0000000
--- a/.gitlab/ci/env_fedora43_common_clang.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-export CC=/usr/bin/clang-21
-export CXX=/usr/bin/clang++-21
-export FC=/usr/bin/flang-21
diff --git a/.gitlab/ci/env_fedora43_hip_radeon.sh b/.gitlab/ci/env_fedora43_hip_radeon.sh
deleted file mode 100644
index 2c942a8..0000000
--- a/.gitlab/ci/env_fedora43_hip_radeon.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-export HIPCXX=/usr/bin/clang++-21
-export HIPFLAGS='--rocm-path=/usr --rocm-device-lib-path=/usr/lib64/rocm/llvm/lib/clang/19/amdgcn/bitcode'
diff --git a/.gitlab/ci/env_fedora43_makefiles_clang.sh b/.gitlab/ci/env_fedora43_makefiles_clang.sh
deleted file mode 100644
index 3953f88..0000000
--- a/.gitlab/ci/env_fedora43_makefiles_clang.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_common_clang.sh
diff --git a/.gitlab/ci/env_fedora43_makefiles_lfortran.sh b/.gitlab/ci/env_fedora43_makefiles_lfortran.sh
deleted file mode 100644
index 6b02339..0000000
--- a/.gitlab/ci/env_fedora43_makefiles_lfortran.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_common_lfortran.sh
diff --git a/.gitlab/ci/env_fedora43_makefiles_symlinked.cmake b/.gitlab/ci/env_fedora43_makefiles_symlinked.cmake
deleted file mode 100644
index fb004e8..0000000
--- a/.gitlab/ci/env_fedora43_makefiles_symlinked.cmake
+++ /dev/null
@@ -1 +0,0 @@
-include("${CMAKE_CURRENT_LIST_DIR}/env_fedora43_makefiles.cmake")
diff --git a/.gitlab/ci/env_fedora43_makefiles_symlinked.sh b/.gitlab/ci/env_fedora43_makefiles_symlinked.sh
deleted file mode 100644
index 448b592..0000000
--- a/.gitlab/ci/env_fedora43_makefiles_symlinked.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_makefiles.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_clang.sh b/.gitlab/ci/env_fedora43_ninja_clang.sh
deleted file mode 100644
index 3953f88..0000000
--- a/.gitlab/ci/env_fedora43_ninja_clang.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_common_clang.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_instrumentation.sh b/.gitlab/ci/env_fedora43_ninja_instrumentation.sh
deleted file mode 100644
index cc89d0b..0000000
--- a/.gitlab/ci/env_fedora43_ninja_instrumentation.sh
+++ /dev/null
@@ -1 +0,0 @@
-source .gitlab/ci/env_fedora43_ninja.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_lfortran.sh b/.gitlab/ci/env_fedora43_ninja_lfortran.sh
deleted file mode 100644
index 6b02339..0000000
--- a/.gitlab/ci/env_fedora43_ninja_lfortran.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_common_lfortran.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_multi_clang.sh b/.gitlab/ci/env_fedora43_ninja_multi_clang.sh
deleted file mode 100644
index 3953f88..0000000
--- a/.gitlab/ci/env_fedora43_ninja_multi_clang.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_common_clang.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_valgrind.sh b/.gitlab/ci/env_fedora43_ninja_valgrind.sh
deleted file mode 100644
index cc89d0b..0000000
--- a/.gitlab/ci/env_fedora43_ninja_valgrind.sh
+++ /dev/null
@@ -1 +0,0 @@
-source .gitlab/ci/env_fedora43_ninja.sh
diff --git a/.gitlab/ci/env_fedora43_asan.sh b/.gitlab/ci/env_fedora44_asan.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_asan.sh
rename to .gitlab/ci/env_fedora44_asan.sh
diff --git a/.gitlab/ci/env_fedora43_bullseye_coverage.sh b/.gitlab/ci/env_fedora44_bullseye_coverage.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_bullseye_coverage.sh
rename to .gitlab/ci/env_fedora44_bullseye_coverage.sh
diff --git a/.gitlab/ci/env_fedora43_clang_analyzer.sh b/.gitlab/ci/env_fedora44_clang_analyzer.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_clang_analyzer.sh
rename to .gitlab/ci/env_fedora44_clang_analyzer.sh
diff --git a/.gitlab/ci/env_fedora43_clang_fuzzing.sh b/.gitlab/ci/env_fedora44_clang_fuzzing.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_clang_fuzzing.sh
rename to .gitlab/ci/env_fedora44_clang_fuzzing.sh
diff --git a/.gitlab/ci/env_fedora43_clazy.sh b/.gitlab/ci/env_fedora44_clazy.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_clazy.sh
rename to .gitlab/ci/env_fedora44_clazy.sh
diff --git a/.gitlab/ci/env_fedora44_common_clang.sh b/.gitlab/ci/env_fedora44_common_clang.sh
new file mode 100644
index 0000000..2200841
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_common_clang.sh
@@ -0,0 +1,3 @@
+export CC=/usr/bin/clang
+export CXX=/usr/bin/clang++
+export FC=/usr/bin/flang
diff --git a/.gitlab/ci/env_fedora43_common_lfortran.sh b/.gitlab/ci/env_fedora44_common_lfortran.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_common_lfortran.sh
rename to .gitlab/ci/env_fedora44_common_lfortran.sh
diff --git a/.gitlab/ci/env_fedora43_extdeps.sh b/.gitlab/ci/env_fedora44_extdeps.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_extdeps.sh
rename to .gitlab/ci/env_fedora44_extdeps.sh
diff --git a/.gitlab/ci/env_fedora43_fastbuild.sh b/.gitlab/ci/env_fedora44_fastbuild.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_fastbuild.sh
rename to .gitlab/ci/env_fedora44_fastbuild.sh
diff --git a/.gitlab/ci/env_fedora44_hip_radeon.patch b/.gitlab/ci/env_fedora44_hip_radeon.patch
new file mode 100644
index 0000000..a6411ed
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_hip_radeon.patch
@@ -0,0 +1,14 @@
+--- a/usr/lib/clang/22/include/cuda_wrappers/new
++++ b/usr/lib/clang/22/include/cuda_wrappers/new
+@@ -98,9 +98,9 @@
+ __device__ inline void *operator new[](__SIZE_TYPE__, void *__ptr) CUDA_NOEXCEPT {
+   return __ptr;
+ }
+-#endif
+ __device__ inline void operator delete(void *, void *) CUDA_NOEXCEPT {}
+ __device__ inline void operator delete[](void *, void *) CUDA_NOEXCEPT {}
++#endif
+
+ #pragma pop_macro("CUDA_NOEXCEPT")
+
+---
diff --git a/.gitlab/ci/env_fedora44_hip_radeon.sh b/.gitlab/ci/env_fedora44_hip_radeon.sh
new file mode 100644
index 0000000..dfa0121
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_hip_radeon.sh
@@ -0,0 +1,4 @@
+export HIPCXX=/usr/bin/clang++
+export HIPFLAGS='--rocm-path=/usr --rocm-device-lib-path=/usr/lib64/rocm/llvm/lib/clang/20/lib/amdgcn/bitcode'
+
+git apply --unsafe-paths --directory=/ .gitlab/ci/env_fedora44_hip_radeon.patch
diff --git a/.gitlab/ci/env_fedora43_makefiles.cmake b/.gitlab/ci/env_fedora44_makefiles.cmake
similarity index 100%
rename from .gitlab/ci/env_fedora43_makefiles.cmake
rename to .gitlab/ci/env_fedora44_makefiles.cmake
diff --git a/.gitlab/ci/env_fedora43_makefiles.sh b/.gitlab/ci/env_fedora44_makefiles.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_makefiles.sh
rename to .gitlab/ci/env_fedora44_makefiles.sh
diff --git a/.gitlab/ci/env_fedora44_makefiles_clang.sh b/.gitlab/ci/env_fedora44_makefiles_clang.sh
new file mode 100644
index 0000000..4d2ba81
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_makefiles_clang.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_common_clang.sh
diff --git a/.gitlab/ci/env_fedora44_makefiles_lfortran.sh b/.gitlab/ci/env_fedora44_makefiles_lfortran.sh
new file mode 100644
index 0000000..409404e
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_makefiles_lfortran.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_common_lfortran.sh
diff --git a/.gitlab/ci/env_fedora44_makefiles_symlinked.cmake b/.gitlab/ci/env_fedora44_makefiles_symlinked.cmake
new file mode 100644
index 0000000..8c39210
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_makefiles_symlinked.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/env_fedora44_makefiles.cmake")
diff --git a/.gitlab/ci/env_fedora44_makefiles_symlinked.sh b/.gitlab/ci/env_fedora44_makefiles_symlinked.sh
new file mode 100644
index 0000000..84a747c
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_makefiles_symlinked.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_makefiles.sh
diff --git a/.gitlab/ci/env_fedora43_ninja.sh b/.gitlab/ci/env_fedora44_ninja.sh
similarity index 83%
rename from .gitlab/ci/env_fedora43_ninja.sh
rename to .gitlab/ci/env_fedora44_ninja.sh
index 18c2158..3607fb1 100644
--- a/.gitlab/ci/env_fedora43_ninja.sh
+++ b/.gitlab/ci/env_fedora44_ninja.sh
@@ -4,9 +4,9 @@
 fi
 
 # This job builds CMake as C++11.  Prevent C++17 headers from being used.
-if test "$CMAKE_CONFIGURATION" = "fedora43_ninja" -a "$CI_JOB_STAGE" = "build"; then
+if test "$CMAKE_CONFIGURATION" = "fedora44_ninja" -a "$CI_JOB_STAGE" = "build"; then
   for i in filesystem optional string_view; do
-    sed -i -e '$a#error "Use <cm/'"$i"'> instead"' "/usr/include/c++/15/$i"
+    sed -i -e '$a#error "Use <cm/'"$i"'> instead"' "/usr/include/c++/16/$i"
   done
 fi
 
diff --git a/.gitlab/ci/env_fedora44_ninja_clang.sh b/.gitlab/ci/env_fedora44_ninja_clang.sh
new file mode 100644
index 0000000..4d2ba81
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_ninja_clang.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_common_clang.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_gcc_std_reloc.sh b/.gitlab/ci/env_fedora44_ninja_gcc_std_reloc.sh
similarity index 85%
rename from .gitlab/ci/env_fedora43_ninja_gcc_std_reloc.sh
rename to .gitlab/ci/env_fedora44_ninja_gcc_std_reloc.sh
index 91b824d..ae640b7 100644
--- a/.gitlab/ci/env_fedora43_ninja_gcc_std_reloc.sh
+++ b/.gitlab/ci/env_fedora44_ninja_gcc_std_reloc.sh
@@ -1,6 +1,6 @@
 # "Misplace" the `libstdc++.modules.json` file so that
 # `CMAKE_CXX_STDLIB_MODULES_JSON` is needed to use `import std`.
-stdlib_modules_dir="/usr/lib/gcc/x86_64-redhat-linux/15"
+stdlib_modules_dir="/usr/lib/gcc/x86_64-redhat-linux/16"
 mkdir "$stdlib_modules_dir.reloc"
 mv "$stdlib_modules_dir/libstdc++.modules.json" "$stdlib_modules_dir.reloc"
 export CMAKE_CI_CXX_STDLIB_MODULES_JSON="$stdlib_modules_dir.reloc/libstdc++.modules.json"
diff --git a/.gitlab/ci/env_fedora44_ninja_instrumentation.sh b/.gitlab/ci/env_fedora44_ninja_instrumentation.sh
new file mode 100644
index 0000000..99f7538
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_ninja_instrumentation.sh
@@ -0,0 +1 @@
+source .gitlab/ci/env_fedora44_ninja.sh
diff --git a/.gitlab/ci/env_fedora44_ninja_lfortran.sh b/.gitlab/ci/env_fedora44_ninja_lfortran.sh
new file mode 100644
index 0000000..409404e
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_ninja_lfortran.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_common_lfortran.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_multi.sh b/.gitlab/ci/env_fedora44_ninja_multi.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_ninja_multi.sh
rename to .gitlab/ci/env_fedora44_ninja_multi.sh
diff --git a/.gitlab/ci/env_fedora44_ninja_multi_clang.sh b/.gitlab/ci/env_fedora44_ninja_multi_clang.sh
new file mode 100644
index 0000000..4d2ba81
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_ninja_multi_clang.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_common_clang.sh
diff --git a/.gitlab/ci/env_fedora44_ninja_valgrind.sh b/.gitlab/ci/env_fedora44_ninja_valgrind.sh
new file mode 100644
index 0000000..99f7538
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_ninja_valgrind.sh
@@ -0,0 +1 @@
+source .gitlab/ci/env_fedora44_ninja.sh
diff --git a/.gitlab/ci/env_fedora43_pvs_studio.sh b/.gitlab/ci/env_fedora44_pvs_studio.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_pvs_studio.sh
rename to .gitlab/ci/env_fedora44_pvs_studio.sh
diff --git a/.gitlab/ci/env_windows_pellesc13.01.ps1 b/.gitlab/ci/env_windows_pellesc13.01.ps1
index 4a8b1ca..84a38ac 100644
--- a/.gitlab/ci/env_windows_pellesc13.01.ps1
+++ b/.gitlab/ci/env_windows_pellesc13.01.ps1
@@ -1,6 +1,2 @@
 . .gitlab/ci/ninja-env.ps1
 . .gitlab/ci/pellesc-env.ps1
-
-# FIXME(#21536): Avoid requiring the end user to enable
-# Pelles C's Microsoft extensions to use Windows APIs.
-$env:CFLAGS = "-Ze"
diff --git a/.gitlab/ci/post_build_fedora43_tidy.sh b/.gitlab/ci/post_build_fedora44_tidy.sh
similarity index 100%
rename from .gitlab/ci/post_build_fedora43_tidy.sh
rename to .gitlab/ci/post_build_fedora44_tidy.sh
diff --git a/.gitlab/ci/pre_build_fedora43_bullseye_coverage.sh b/.gitlab/ci/pre_build_fedora44_bullseye_coverage.sh
similarity index 100%
rename from .gitlab/ci/pre_build_fedora43_bullseye_coverage.sh
rename to .gitlab/ci/pre_build_fedora44_bullseye_coverage.sh
diff --git a/.gitlab/ci/pre_configure_fedora43_bullseye_coverage.sh b/.gitlab/ci/pre_configure_fedora44_bullseye_coverage.sh
similarity index 100%
rename from .gitlab/ci/pre_configure_fedora43_bullseye_coverage.sh
rename to .gitlab/ci/pre_configure_fedora44_bullseye_coverage.sh
diff --git a/.gitlab/ci/pre_configure_fedora43_tidy.sh b/.gitlab/ci/pre_configure_fedora44_tidy.sh
similarity index 100%
rename from .gitlab/ci/pre_configure_fedora43_tidy.sh
rename to .gitlab/ci/pre_configure_fedora44_tidy.sh
diff --git a/.gitlab/ci/pre_test_fedora43_bullseye_coverage.sh b/.gitlab/ci/pre_test_fedora44_bullseye_coverage.sh
similarity index 100%
rename from .gitlab/ci/pre_test_fedora43_bullseye_coverage.sh
rename to .gitlab/ci/pre_test_fedora44_bullseye_coverage.sh
diff --git a/.gitlab/os-linux.yml b/.gitlab/os-linux.yml
index 4d9aff3..96fed40 100644
--- a/.gitlab/os-linux.yml
+++ b/.gitlab/os-linux.yml
@@ -5,7 +5,7 @@
 ### Release
 
 .linux_prep_source:
-    image: "fedora:43"
+    image: "fedora:44"
 
     variables:
         GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
@@ -81,15 +81,15 @@
 
 ### Fedora
 
-.fedora43:
-    image: "kitware/cmake:ci-fedora43-x86_64-2026-04-28"
+.fedora44:
+    image: "kitware/cmake:ci-fedora44-x86_64-2026-04-30"
 
     variables:
         GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci/long file name for testing purposes"
         CMAKE_ARCH: x86_64
 
-.fedora43_hip:
-    image: "kitware/cmake:ci-fedora43-hip-x86_64-2025-10-29"
+.fedora44_hip:
+    image: "kitware/cmake:ci-fedora44-hip-x86_64-2026-04-30"
 
     variables:
         # FIXME(rocclr): device modules fail loading from binaries in paths with spaces
@@ -98,26 +98,26 @@
 
 #### Coverage builds
 
-.fedora43_gcc_gcov:
-    extends: .fedora43
+.fedora44_gcc_gcov:
+    extends: .fedora44
 
     variables:
         # See issue #20001
         CMAKE_GENERATOR: "Unix Makefiles"
-        CMAKE_CONFIGURATION: fedora43_gcc_gcov
+        CMAKE_CONFIGURATION: fedora44_gcc_gcov
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_CI_BUILD_TYPE: Debug
         CMAKE_CI_TEST_TIMEOUT: "1500"
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_bullseye_coverage:
-    extends: .fedora43
+.fedora44_bullseye_coverage:
+    extends: .fedora44
     environment:
         name: bullseye-coverage
     variables:
         # See issue #20001
         CMAKE_GENERATOR: "Unix Makefiles"
-        CMAKE_CONFIGURATION: fedora43_bullseye_coverage
+        CMAKE_CONFIGURATION: fedora44_bullseye_coverage
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_CI_BUILD_TYPE: Debug
         CMAKE_CI_TEST_TIMEOUT: "1500"
@@ -125,61 +125,61 @@
 
 #### Lint builds
 
-.fedora43_tidy:
-    extends: .fedora43
+.fedora44_tidy:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_tidy
+        CMAKE_CONFIGURATION: fedora44_tidy
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_pvs_studio:
-    extends: .fedora43
+.fedora44_pvs_studio:
+    extends: .fedora44
     environment:
         name: pvs-studio
     variables:
-        CMAKE_CONFIGURATION: fedora43_pvs_studio
+        CMAKE_CONFIGURATION: fedora44_pvs_studio
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_clang_analyzer:
-    extends: .fedora43
+.fedora44_clang_analyzer:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_clang_analyzer
+        CMAKE_CONFIGURATION: fedora44_clang_analyzer
         CMAKE_CI_BUILD_TYPE: Debug
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_clang_fuzzing:
-    extends: .fedora43
+.fedora44_clang_fuzzing:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_clang_fuzzing
+        CMAKE_CONFIGURATION: fedora44_clang_fuzzing
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_clazy:
-    extends: .fedora43
+.fedora44_clazy:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_clazy
+        CMAKE_CONFIGURATION: fedora44_clazy
         CMAKE_CI_BUILD_TYPE: Debug
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_sphinx:
-    extends: .fedora43
+.fedora44_sphinx:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_sphinx
+        CMAKE_CONFIGURATION: fedora44_sphinx
         CTEST_NO_WARNINGS_ALLOWED: 1
         CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx"
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_sphinx_package:
-    extends: .fedora43
+.fedora44_sphinx_package:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_sphinx_package
+        CMAKE_CONFIGURATION: fedora44_sphinx_package
         CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx"
 
 #### Build and test
@@ -235,53 +235,53 @@
         CMAKE_CI_BUILD_TYPE: Release
         CTEST_NO_WARNINGS_ALLOWED: 1
 
-.fedora43_extdeps:
-    extends: .fedora43
+.fedora44_extdeps:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_extdeps
+        CMAKE_CONFIGURATION: fedora44_extdeps
         CMAKE_CI_BUILD_TYPE: Release
         CTEST_NO_WARNINGS_ALLOWED: 1
 
-.fedora43_ninja:
-    extends: .fedora43
+.fedora44_ninja:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja
+        CMAKE_CONFIGURATION: fedora44_ninja
         CMAKE_CI_BUILD_TYPE: Release
         CTEST_NO_WARNINGS_ALLOWED: 1
 
-.fedora43_makefiles:
-    extends: .fedora43
+.fedora44_makefiles:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_makefiles
+        CMAKE_CONFIGURATION: fedora44_makefiles
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_GENERATOR: "Unix Makefiles"
 
-.fedora43_makefiles_symlinked:
-    extends: .fedora43
+.fedora44_makefiles_symlinked:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_makefiles_symlinked
+        CMAKE_CONFIGURATION: fedora44_makefiles_symlinked
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_GENERATOR: "Unix Makefiles"
         CMAKE_CI_IN_SYMLINK_TREE: 1
         CMAKE_CI_BUILD_DIR: "real_work/work/build"
 
-.fedora43_fastbuild:
-    extends: .fedora43
+.fedora44_fastbuild:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_fastbuild
+        CMAKE_CONFIGURATION: fedora44_fastbuild
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_GENERATOR: "FASTBuild"
 
-.fedora43_ninja_instrumentation:
-    extends: .fedora43
+.fedora44_ninja_instrumentation:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_instrumentation
+        CMAKE_CONFIGURATION: fedora44_ninja_instrumentation
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_GENERATOR: "Ninja"
 
@@ -300,57 +300,57 @@
     variables:
         CMAKE_CONFIGURATION: debian13_ninja_clang
 
-.fedora43_makefiles_clang:
-    extends: .fedora43
+.fedora44_makefiles_clang:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_makefiles_clang
+        CMAKE_CONFIGURATION: fedora44_makefiles_clang
         CMAKE_GENERATOR: "Unix Makefiles"
 
-.fedora43_makefiles_lfortran:
-    extends: .fedora43
+.fedora44_makefiles_lfortran:
+    extends: .fedora44
 
     variables:
         # FIXME(lfortran): -rpath flags with spaces not forwarded
         GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci"
-        CMAKE_CONFIGURATION: fedora43_makefiles_lfortran
+        CMAKE_CONFIGURATION: fedora44_makefiles_lfortran
         CMAKE_GENERATOR: "Unix Makefiles"
         CTEST_LABELS: "Fortran"
 
-.fedora43_ninja_lfortran:
-    extends: .fedora43
+.fedora44_ninja_lfortran:
+    extends: .fedora44
 
     variables:
         # FIXME(lfortran): -rpath flags with spaces not forwarded
         GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci"
-        CMAKE_CONFIGURATION: fedora43_ninja_lfortran
+        CMAKE_CONFIGURATION: fedora44_ninja_lfortran
         CTEST_LABELS: "Fortran"
 
-.fedora43_ninja_multi:
-    extends: .fedora43
+.fedora44_ninja_multi:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_multi
+        CMAKE_CONFIGURATION: fedora44_ninja_multi
         CMAKE_GENERATOR: "Ninja Multi-Config"
 
-.fedora43_ninja_clang:
-    extends: .fedora43
+.fedora44_ninja_clang:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_clang
+        CMAKE_CONFIGURATION: fedora44_ninja_clang
 
-.fedora43_ninja_gcc_std_reloc:
-    extends: .fedora43
+.fedora44_ninja_gcc_std_reloc:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_gcc_std_reloc
+        CMAKE_CONFIGURATION: fedora44_ninja_gcc_std_reloc
         CTEST_LABELS: "CXXModules"
 
-.fedora43_ninja_multi_clang:
-    extends: .fedora43
+.fedora44_ninja_multi_clang:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_multi_clang
+        CMAKE_CONFIGURATION: fedora44_ninja_multi_clang
         CMAKE_GENERATOR: "Ninja Multi-Config"
 
 ### Sanitizers
@@ -373,23 +373,23 @@
         CTEST_MEMORYCHECK_TYPE: Valgrind
         CMAKE_CI_RUN_MEMCHECK: "true"
         CMAKE_CI_TEST_TIMEOUT: "1500"
-        CMAKE_VALGRIND_CONFIGURATION: fedora43
+        CMAKE_VALGRIND_CONFIGURATION: fedora44
 
-.fedora43_asan:
+.fedora44_asan:
     extends:
-        - .fedora43
+        - .fedora44
         - .fedora_asan_addon
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_asan
+        CMAKE_CONFIGURATION: fedora44_asan
 
-.fedora43_ninja_valgrind:
+.fedora44_ninja_valgrind:
     extends:
-        - .fedora43
+        - .fedora44
         - .fedora_valgrind_addon
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_valgrind
+        CMAKE_CONFIGURATION: fedora44_ninja_valgrind
 
 ### Intel Compiler
 
@@ -599,11 +599,11 @@
         CMAKE_CONFIGURATION: debian13_hip_radeon
         CTEST_LABELS: "HIP"
 
-.fedora43_hip_radeon:
-    extends: .fedora43_hip
+.fedora44_hip_radeon:
+    extends: .fedora44_hip
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_hip_radeon
+        CMAKE_CONFIGURATION: fedora44_hip_radeon
         CTEST_LABELS: "HIP"
 
 .hip6.3_nvidia:
@@ -758,14 +758,14 @@
 
 .cmake_version_update_linux:
     stage: build
-    extends: .fedora43
+    extends: .fedora44
     script:
         - .gitlab/ci/cmake_version_update.sh
     interruptible: false # The job internally fetches and retries.
 
 .cmake_spellcheck_linux:
     stage: build
-    extends: .fedora43
+    extends: .fedora44
     script:
         - .gitlab/ci/codespell.bash
         - .gitlab/ci/typos.bash
@@ -936,7 +936,7 @@
 .cmake_org_help:
     stage: build
     extends:
-        - .fedora43
+        - .fedora44
         - .linux_x86_64_tags
         - .cmake_org_help_artifacts
     script:
diff --git a/.gitlab/upload.yml b/.gitlab/upload.yml
index 47316d1..7e7516b 100644
--- a/.gitlab/upload.yml
+++ b/.gitlab/upload.yml
@@ -1,7 +1,7 @@
 # Steps for uploading artifacts
 
 .rsync_upload_package:
-    image: "fedora:43"
+    image: "fedora:44"
     stage: upload
     tags:
         - cmake
@@ -21,7 +21,7 @@
 
 .rsync_upload_help:
     stage: upload
-    image: "fedora:43"
+    image: "fedora:44"
     tags:
         - cmake
         - docker
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 64acb89..b986c76 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -113,7 +113,7 @@
 
     # NOTE See BUG https://github.com/crate-ci/typos/issues/390
   - repo: https://github.com/adhtruong/mirrors-typos
-    rev: v1.44.0
+    rev: v1.45.2
     hooks:
       - id: typos
         # NOTE Override hook's default args to prevent automatic
diff --git a/CTestCustom.cmake.in b/CTestCustom.cmake.in
index 75642c9..591da55 100644
--- a/CTestCustom.cmake.in
+++ b/CTestCustom.cmake.in
@@ -51,6 +51,7 @@
   "Warning: Function .* can throw only the exceptions thrown by the function .* it overrides\\."
   "WarningMessagesDialog\\.cxx"
   "warning.*directory name.*CMake-Xcode.*/bin/.*does not exist.*"
+  "stl_algo(base)?\\.h:[0-9:]* warning: loop not unrolled"
   "stl_deque.h:1051"
   "Tests/CMakeLib/testCTestResourceSpec.cxx:.*warning: missing initializer for member.*cmCTestResourceSpec::.*" # GCC 4.8 disagrees with later compilers on C++11 initializer list conversion
   "(Lexer|Parser).*warning.*conversion.*may (alter its value|change the sign)"
diff --git a/Help/command/ctest_test.rst b/Help/command/ctest_test.rst
index ad43cd2..47dfe23 100644
--- a/Help/command/ctest_test.rst
+++ b/Help/command/ctest_test.rst
@@ -183,6 +183,13 @@
   file is **not** uploaded to CDash because it would be redundant with
   CTest's ``Test.xml`` file.
 
+``COVERAGE_TOOL <tool>``
+  .. versionadded:: 4.4
+
+  Specify the ``<tool>`` used for collecting coverage during the running
+  of the tests.  See the CTest :ref:`CoverageTool <ctest-CoverageTool>`
+  setting for details.
+
 ``QUIET``
   .. versionadded:: 3.3
 
diff --git a/Help/command/install.rst b/Help/command/install.rst
index 0d6ccb6..e69d266 100644
--- a/Help/command/install.rst
+++ b/Help/command/install.rst
@@ -61,9 +61,8 @@
   but not recommended.
 
   .. versionadded:: 4.4
-    The :ref:`CMD_INSTALL_ABSOLUTE_DESTINATION <CMD_INSTALL_ABSOLUTE_DESTINATION>`
-    diagnostic can be enabled to warn or error out when an absolute destination
-    is provided.
+    The :diagnostic:`CMD_INSTALL_ABSOLUTE_DESTINATION` diagnostic can be
+    enabled to warn or error out when an absolute destination is provided.
 
   When a relative path is given, it is interpreted relative to the value
   of the :variable:`CMAKE_INSTALL_PREFIX` variable.
diff --git a/Help/dev/README.rst b/Help/dev/README.rst
index 84766a6..050ec07 100644
--- a/Help/dev/README.rst
+++ b/Help/dev/README.rst
@@ -41,12 +41,14 @@
 * The `CMake Testing Guide`_.
 * The `CMake Experimental Features Guide`_.
 * The `CMake Debugging Guide`_.
+* The `CMake Diagnostics Guide`_.
 
 .. _`CMake Source Code Guide`: source.rst
 .. _`CMake Documentation Guide`: documentation.rst
 .. _`CMake Testing Guide`: testing.rst
 .. _`CMake Experimental Features Guide`: experimental.rst
 .. _`CMake Debugging Guide`: debug.rst
+.. _`CMake Diagnostics Guide`: diagnostics.rst
 
 Maintainer Documentation
 ========================
diff --git a/Help/dev/diagnostics.rst b/Help/dev/diagnostics.rst
new file mode 100644
index 0000000..394f4d6
--- /dev/null
+++ b/Help/dev/diagnostics.rst
@@ -0,0 +1,157 @@
+CMake Diagnostics Guide
+***********************
+
+The following is a guide on how CMake should issue diagnostics.
+See documentation on `CMake Development`_ for more information.
+
+.. _`CMake Development`: README.rst
+
+TL;DR Porting Guide (from CMake < 4.4)
+======================================
+
+I want to write ``IssueMessage(MessageType::AUTHOR_WARNING, ...``:
+  Write ``IssueDiagnostic(cmDiagnostics::CMD_AUTHOR, ...`` instead.
+
+I want to write ``IssueMessage(MessageType::DEPRECATION_WARNING, ...``:
+  Write ``IssueDiagnostic(cmDiagnostics::CMD_DEPRECATED, ...`` instead.
+
+I want to write ``IssueMessage(MessageType::AUTHOR_ERROR, ...``:
+  No, you don't.  Under the old system, there isn't a meaningful difference
+  between ``AUTHOR_WARNING`` and ``AUTHOR_ERROR``; at least, not as arguments
+  to ``IssueMessage``.
+
+I want to write ``IssueMessage(MessageType::DEPRECATION_ERROR, ...``:
+  See ``AUTHOR_ERROR``.
+
+History
+=======
+
+Prior to CMake 4.4, CMake did not have a formal system for issuing diagnostics.
+The messaging system had message types for author diagnostics and deprecation
+diagnostics which conflated category and severity.  Worse, although these types
+*purported* to allow the caller to specify severity, this information is not
+actually honored.  Other diagnostics existed which did not use these types.
+
+More importantly, the mechanisms for managing severity differed depending on
+the diagnostic.  Variables to control a diagnostic might be documented,
+undocumented, or non-existent.  Spelling of command-line options to control
+diagnostics was inconsistent, as was the ability to make diagnostics fatal.
+Adding new categories required significant effort, as the logic to handle a
+diagnostic was bespoke at every layer.
+
+CMake Diagnostic Framework
+==========================
+
+CMake 4.4 introduced a structured framework for issuing and managing
+diagnostics.  The ``cmDiagnostics.h`` header enumerates all available
+diagnostic categories.  All code to manage diagnostics leverages either this
+table or helper code generated from the same, such that it is the *only*
+non-documentation location that needs to be updated to add a new diagnostic
+category.  The framework is also responsible for determining the severity of a
+diagnostic, based on the combination of category defaults and user preferences,
+and for presenting the user with a consistent set of control mechanisms.
+
+Numeric identifiers associated with diagnostic categories are only used
+internally and are never persisted. This means that numbers can be reassigned
+at any time. This also permits ensuring that numbers are consecutive, which
+allows iterating over all categories using a simple ``for`` loop.  (Note that
+such loops will typically start from ``1``, not ``0``, as ``0`` is reserved
+for the 'NONE' category which is used primarily as a virtual parent.)  Where
+necessary, macros provided by ``cmDiagnostics.h`` can generate code for each
+diagnostic category.
+
+Refer to ``Help/manual/cmake-diagnostics.7.rst`` for user-facing documentation.
+
+Issuing Diagnostics
+===================
+
+Diagnostics are the CMake equivalent of compiler warnings, with categorization
+providing both additional information and additional response control to users.
+
+Diagnostics are issued via the ``IssueDiagnostic`` method.  This method is
+provided on various objects, with ``cmMakefile`` being the most prominent, and
+typically exists alongside an ``IssueMessage`` method.  The latter is not
+deprecated, and should still be used to issue messages outside of the
+diagnostic categories, such as hard errors or informational messages.
+
+The historic ``{AUTHOR,DEPRECATION}_{WARNING,ERROR}`` message types, however,
+have been removed.  These are replaced by ``IssueDiagnostic`` and the
+``CMD_{AUTHOR,DEPRECATED}`` diagnostic categories.  Because the methods have
+similar signatures, porting in many cases can be accomplished by replacing the
+method name and first argument (the former message type, newly the diagnostic
+category).  For example, where prior versions of CMake wrote:
+
+.. code:: c++
+
+  mf->IssueMessage(MessageType::AUTHOR_WARNING, ...);
+
+CMake 4.4 and later should write:
+
+.. code:: c++
+
+  mf->IssueDiagnostic(cmDiagnostics::CMD_AUTHOR, ...);
+
+(Note that the ``"cmDiagnostics.h"`` header may need to be newly included.)
+
+As previously mentioned, the purported severity was ignored by ``cmMessenger``,
+which instead used its own internal state to decide whether a message should
+be a warning or an error.  This logic overrode the severity component of the
+message type as passed into the method.  As a result, although the new method
+does not accept a severity, this is actually consistent with the historic
+behavior and does not represent any loss of functionality.
+
+.. note::
+
+  When issuing diagnostics targeted at build-system authors, please consult the
+  complete list of available diagnostics, as a more specific category may be
+  available.  In some cases, it may even make sense to add a new category.
+
+Adding Diagnostic Categories
+============================
+
+Adding new diagnostic categories involves four steps.
+
+1.  The new category must be added to ``cmDiagnostics.h``.  The diagnostics
+    table looks like this:
+
+    .. code:: c++
+
+      #define CM_FOR_EACH_DIAGNOSTIC_TABLE(ACTION, SELECT)      \
+        SELECT(ACTION, Warn, CMD_NONE, CMD_AUTHOR, 12)          \
+        SELECT(ACTION, Warn, CMD_AUTHOR, CMD_DEPRECATED, 1)     \
+        ...
+
+    Add a new entry.  All entries must begin with ``SELECT(ACTION,``.  The
+    second argument is the *default* state of the diagnostic and should
+    typically be ``Warn``, but may be ``Ignore`` if the diagnostic should be
+    opt-in.  Defaulting to ``SendError`` would be exceptional, and defaulting
+    to ``FatalError`` is not recommended under any circumstances.  The third
+    argument is the *parent* of the diagnostic (see below).  The fourth is the
+    actual name of the diagnostic.  The fifth and final argument is the CMake
+    preset version corresponding to the introduction of the argument, which
+    should be the latest preset version as used by the version of CMake under
+    development.
+
+    .. note::
+
+      In the event that the development version has not already introduced a
+      new preset version, adding a new diagnostic will additionally require
+      introducing a new preset version.
+
+    Diagnostics are hierarchical and **must** be listed in order of a
+    depth-first search.  (If you imagine the order of items in a typical tree
+    view which has been fully expanded, that is depth-first order.)  Each
+    diagnostic has a direct parent.  Recursive alterations to a diagnostic will
+    also affect all descendant diagnostics.
+
+2.  A documentation page for the new diagnostic must be created under
+    ``Help/diagnostic``, and a link to the same added to the Diagnostics
+    manual, ``Help/manual/cmake-diagnostics.7.rst``.
+
+3.  The new presets fields must be mentioned in the CMake presets version
+    history, found at the bottom of ``Help/manual/cmake-presets.7.rst``.  Note
+    that the documentation of the fields themselves is generated.
+
+4.  The ``Utilities/Scripts/regenerate-presets.py`` script must be run to
+    generate the updated presets schema and documentation.  Don't forget to
+    review and commit the changes made by this script.
diff --git a/Help/dev/experimental.rst b/Help/dev/experimental.rst
index 30d53ff..61b77c0 100644
--- a/Help/dev/experimental.rst
+++ b/Help/dev/experimental.rst
@@ -37,7 +37,7 @@
 
 * The package name associated with specific targets may be specified
   using the ``CMAKE_EXPORT_FIND_PACKAGE_NAME`` variable and/or
-``EXPORT_FIND_PACKAGE_NAME`` target property.
+  ``EXPORT_FIND_PACKAGE_NAME`` target property.
 
 Export |CPS| Package Information for ``install(EXPORT)``
 ========================================================
@@ -102,7 +102,7 @@
 * Targets with the property set to a true value will have their C++ build
   information exported to the build database.
 
-Software Bill Of Materials |SBOM|
+Software Bill Of Materials (SBOM)
 =================================
 
 In order to activate support for the :command:`install(SBOM)` command,
diff --git a/Help/dev/source.rst b/Help/dev/source.rst
index ec4e12c..046be1e 100644
--- a/Help/dev/source.rst
+++ b/Help/dev/source.rst
@@ -287,10 +287,10 @@
 * ``<cmext/type_traits>``:
 
   * ``cm::is_pair``:
-   Checks if a type is a std::pair<> type.
+    Checks if a type is a std::pair<> type.
 
   * ``cm::is_tuple``:
-   Checks if a type is a std::tuple<> type.
+    Checks if a type is a std::tuple<> type.
 
   * ``cm::is_container``:
     Checks if a type is a container type.
diff --git a/Help/diagnostic/CMD_AUTHOR.rst b/Help/diagnostic/CMD_AUTHOR.rst
new file mode 100644
index 0000000..c309f31
--- /dev/null
+++ b/Help/diagnostic/CMD_AUTHOR.rst
@@ -0,0 +1,16 @@
+CMD_AUTHOR
+----------
+
+.. diagnostic::
+  :default: warn
+
+  Warn about a build system's incorrect use of CMake, or of a CMake interface
+  provided by a dependency.  This is the category triggered by
+  :command:`message(AUTHOR_WARNING)`.  It is also the ancestor of many other
+  diagnostic categories.
+
+  The most important aspect of this category is that it represents issues with
+  a project's build system which typically require alteration to the same.
+  This is to say that users simply trying to build a project obtained elsewhere
+  will typically not be interested in these warnings, except to perhaps report
+  them to the project's developer(s).
diff --git a/Help/diagnostic/CMD_DEPRECATED.rst b/Help/diagnostic/CMD_DEPRECATED.rst
new file mode 100644
index 0000000..dfb23d5
--- /dev/null
+++ b/Help/diagnostic/CMD_DEPRECATED.rst
@@ -0,0 +1,9 @@
+CMD_DEPRECATED
+--------------
+
+.. diagnostic::
+  :default: warn
+  :parent: CMD_AUTHOR
+
+  Warn about use of a deprecated function or package.  This is the category
+  triggered by :command:`message(DEPRECATION)`.
diff --git a/Help/diagnostic/CMD_INSTALL_ABSOLUTE_DESTINATION.rst b/Help/diagnostic/CMD_INSTALL_ABSOLUTE_DESTINATION.rst
new file mode 100644
index 0000000..b7c6e08
--- /dev/null
+++ b/Help/diagnostic/CMD_INSTALL_ABSOLUTE_DESTINATION.rst
@@ -0,0 +1,10 @@
+CMD_INSTALL_ABSOLUTE_DESTINATION
+--------------------------------
+
+.. diagnostic::
+  :default: ignore
+  :parent: CMD_AUTHOR
+
+  Warn when an :command:`install` command specifies an absolute ``DESTINATION``
+  path.  Absolute destinations are typically undesirable because they prevent
+  the installation prefix from being overridden at install time.
diff --git a/Help/diagnostic/CMD_UNINITIALIZED.rst b/Help/diagnostic/CMD_UNINITIALIZED.rst
new file mode 100644
index 0000000..8c2edc8
--- /dev/null
+++ b/Help/diagnostic/CMD_UNINITIALIZED.rst
@@ -0,0 +1,7 @@
+CMD_UNINITIALIZED
+-----------------
+
+.. diagnostic::
+  :default: ignore
+
+  Warn if an uninitialized variable is dereferenced.
diff --git a/Help/diagnostic/CMD_UNUSED_CLI.rst b/Help/diagnostic/CMD_UNUSED_CLI.rst
new file mode 100644
index 0000000..718598e
--- /dev/null
+++ b/Help/diagnostic/CMD_UNUSED_CLI.rst
@@ -0,0 +1,12 @@
+CMD_UNUSED_CLI
+--------------
+
+.. diagnostic::
+  :default: ignore
+
+  Warn about variables that are declared on the command line, but not used.
+
+  This diagnostic is issued outside of the configuration / generation phases.
+  Accordingly, while the action of this warning category can be queried as
+  usual, the :command:`cmake_diagnostic` command is unable to affect the action
+  of this diagnostic.
diff --git a/Help/manual/cmake-diagnostics.7.rst b/Help/manual/cmake-diagnostics.7.rst
index 5612299..de2b705 100644
--- a/Help/manual/cmake-diagnostics.7.rst
+++ b/Help/manual/cmake-diagnostics.7.rst
@@ -32,71 +32,62 @@
 * Issues that may impact the ability of the project
   to be built with newer versions of CMake.
 
-Diagnostic Actions
-------------------
+Controlling Diagnostics
+=======================
 
-The action taken when a particular diagnostic is triggered depends on the
-diagnostic category.  Most categories will warn by default.  The
-:command:`cmake_diagnostic` command and :option:`-W <cmake -W>` options can be
-used to control what action occurs when a diagnostic of a particular category
-is triggered.  The possible actions are described in the documentation of the
-same.
+Each diagnostic category has an associated action to be taken when that
+diagnostic is triggered.  Most categories will warn by default.  The available
+actions are described in the :command:`cmake_diagnostic` command documentation.
+
+CMake maintains a diagnostic state stack that is similar to the policy state.
+The initial state of the stack is determined by four factors, which are, in
+order of precedence:
+
+* The default action associated with the diagnostic.
+
+* The action associated with the diagnostic stored in the CMake variable cache,
+  which is used to persist the initial state between CMake runs.
+
+* The :preset:`configurePresets.warnings` and :preset:`configurePresets.errors`
+  fields of :manual:`CMake Presets <cmake-presets(7)>`.
+
+* The :option:`-W[no-][error=] <cmake -W>` command line arguments.
+
+.. note::
+
+  Because command line arguments operate both recursively and in the order
+  specified, some combinations of diagnostic arguments may result in later
+  arguments completely overwriting the action of earlier arguments.  For
+  example, ``-Wno-child -Wparent`` will result in the ``child`` warning being
+  enabled, because ``-Wparent`` promotes both ``parent`` and ``child`` to at
+  least ``WARN`` severity.  CMake presets are evaluated in order from most
+  ancestral to least ancestral.
+
+During script execution, the :command:`cmake_diagnostic` command can be used to
+query or alter the state, or to perform limited stack manipulations.
+
+When a diagnostic is issued at configure time (or during script execution, when
+CMake is running in script mode), the current diagnostic state controls the
+action.  Diagnostics issued at generate time, or outside of the configuration
+and generation phases must make use of recorded state information. While CMake
+strives to preserve this information in a way that matches the recorded state
+to the state as of the CMake command which ultimately causes a diagnostic to be
+issued, CMake may sometimes fall back to the state when processing of a
+subdirectory completed, or even the root state.  This may limit the ability of
+the :command:`cmake_diagnostic` command to control such diagnostics, especially
+if called from a function or included file.  This is especially the case for
+diagnostics that are not directly coupled to a CMake command.
 
 Diagnostic Categories
 =====================
 
-The following categories are defined.
+The following categories are defined:
 
-``CMD_AUTHOR`` (``-Wauthor``)
------------------------------
+.. toctree::
+   :maxdepth: 1
 
-:Default: Warn
-
-Warn about a build system's incorrect use of CMake, or of a CMake interface
-provided by a dependency.  This is the category triggered by
-:command:`message(AUTHOR_WARNING)`.  It is also the ancestor of many other
-diagnostic categories.
-
-The most important aspect of this category is that it represents issues with
-a project's build system which typically require alteration to the same.  This
-is to say that users simply trying to build a project obtained elsewhere will
-typically not be interested in these warnings, except to perhaps report them
-to the project's developer(s).
-
-``CMD_DEPRECATED`` (``-Wdeprecated``)
--------------------------------------
-
-:Default: Warn
-:Parent: ``CMD_AUTHOR``
-
-Warn about use of a deprecated function or package.  This is the category
-triggered by :command:`message(DEPRECATION)`.
-
-``CMD_UNINITIALIZED`` (``-Wuninitialized``)
--------------------------------------------
-
-:Default: Ignore
-
-Warn if an uninitialized variable is dereferenced.
-
-``CMD_UNUSED_CLI`` (``-Wunused-cli``)
--------------------------------------
-
-:Default: Warn
-
-Warn about variables that are declared on the command line, but not used.
-
-Although the action of this warning category can be queried as usual, changes
-made using the :command:`cmake_diagnostic` command have no effect.
-
-.. _CMD_INSTALL_ABSOLUTE_DESTINATION:
-
-``CMD_INSTALL_ABSOLUTE_DESTINATION`` (``-Winstall-absolute-destination``)
--------------------------------------------------------------------------
-
-:Default: Ignore
-
-Warn when an :command:`install` command specifies an absolute
-``DESTINATION`` path.  Absolute destinations are typically undesirable
-because they prevent the installation prefix from being overridden at
-install time.
+   /diagnostic/CMD_AUTHOR
+   /diagnostic/CMD_DEPRECATED
+   /diagnostic/CMD_INSTALL_ABSOLUTE_DESTINATION
+   /diagnostic/CMD_UNINITIALIZED
+   /diagnostic/CMD_UNUSED_CLI
diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst
index a2ddcef..71318dd 100644
--- a/Help/manual/cmake-variables.7.rst
+++ b/Help/manual/cmake-variables.7.rst
@@ -806,6 +806,7 @@
    /variable/CTEST_SVN_UPDATE_OPTIONS
    /variable/CTEST_TEST_LOAD
    /variable/CTEST_TEST_TIMEOUT
+   /variable/CTEST_TEST_COVERAGE_TOOL
    /variable/CTEST_TLS_VERIFY
    /variable/CTEST_TLS_VERSION
    /variable/CTEST_UPDATE_COMMAND
diff --git a/Help/manual/ctest.1.rst b/Help/manual/ctest.1.rst
index c64fd81..4ab9d75 100644
--- a/Help/manual/ctest.1.rst
+++ b/Help/manual/ctest.1.rst
@@ -1383,8 +1383,41 @@
   * `CTest Script`_ variable: :variable:`CTEST_TEST_TIMEOUT`
   * :module:`CTest` module variable: ``DART_TESTING_TIMEOUT``
 
+.. _`ctest-CoverageTool`:
+
+``CoverageTool``
+  .. versionadded:: 4.4
+
+  Specify the tool used for collecting coverage during the running
+  of the tests.  The tool may be one of:
+
+  ``LLVM-COV``
+    This value indicates the usage of Clang's source-based code coverage
+    which "operates on AST and preprocessor information directly".
+    For more information, see the `Clang Source-based Code Coverage`_
+    documentation.
+
+    CTest will run each test with the ``LLVM_PROFILE_FILE`` environment
+    variable set to ``<directory>/<test-name>_<process-id>.profraw``,
+    where ``<directory>`` is the absolute path to the directory where
+    the ``CTestTestfile.cmake`` that describes the test is located.
+    This configures Clang Source-based Code Coverage to uniquely identify
+    the coverage information gathered by each test without any collisions.
+
+    Any existing ``<directory>/<test-name>_*.profraw`` files for a test
+    are removed before running the test.  Any existing ``LLVM_PROFILE_FILE``
+    environment variable is ignored.
+
+  If no value is specified, no work is done and nothing is added to the
+  environment.
+
+  * `CTest Script`_ variable: :variable:`CTEST_TEST_COVERAGE_TOOL`
+  * :module:`CTest` module variable: :variable:`CTEST_TEST_COVERAGE_TOOL`
+
 To report extra test values to CDash, see :ref:`Additional Test Measurements`.
 
+.. _`Clang Source-based Code Coverage`: https://clang.llvm.org/docs/SourceBasedCodeCoverage.html
+
 .. _`CTest Coverage Step`:
 
 CTest Coverage Step
diff --git a/Help/manual/presets/schema.json b/Help/manual/presets/schema.json
index cd52447..128c829 100644
--- a/Help/manual/presets/schema.json
+++ b/Help/manual/presets/schema.json
@@ -1856,6 +1856,9 @@
     "buildPresets.environment@v2..": {
       "type": "object",
       "description": "An optional map of environment variables. The key is the variable name (which must not be an empty string). Each variable is set regardless of whether or not a value was given to it by the process's environment. This field supports macro expansion, and environment variables in this map may reference each other, and may be listed in any order, as long as such references do not cause a cycle (for example,if ENV_1 is $env{ENV_2}, ENV_2 may not be $env{ENV_1}.) Environment variables are inherited through the inherits field, and the preset's environment will be the union of its own environment and the environment from all its parents. If multiple presets in this union define the same variable, the standard rules of inherits are applied. Setting a variable to null causes it to not be set, even if a value was inherited from another preset.",
+      "propertyNames": {
+        "pattern": "^.+$"
+      },
       "properties": {},
       "additionalProperties": {
         "anyOf": [
diff --git a/Help/manual/presets/schema.yaml b/Help/manual/presets/schema.yaml
index c66bab0..7650fa4 100644
--- a/Help/manual/presets/schema.yaml
+++ b/Help/manual/presets/schema.yaml
@@ -989,6 +989,8 @@
             ExternalProject may use a different (system default) compiler than
             the top-level CMake project.
           properties: {}
+          propertyNames:
+            pattern: '^.+$'
           additionalProperties: *environment-additional-properties
         configurePreset:
           type: string
diff --git a/Help/release/dev/ctest-llvm-cov.rst b/Help/release/dev/ctest-llvm-cov.rst
new file mode 100644
index 0000000..f6ca701
--- /dev/null
+++ b/Help/release/dev/ctest-llvm-cov.rst
@@ -0,0 +1,6 @@
+ctest-llvm-cov
+--------------
+
+* :manual:`ctest(1)` gained a :ref:`CoverageTool <ctest-CoverageTool>`
+  option in :ref:`Dashboard Client` mode to configure tests for
+  coverage collection by ``llvm-cov``.
diff --git a/Help/release/dev/install-absolute-dest-configure-time.rst b/Help/release/dev/install-absolute-dest-configure-time.rst
index 25a9c0a..580a46c 100644
--- a/Help/release/dev/install-absolute-dest-configure-time.rst
+++ b/Help/release/dev/install-absolute-dest-configure-time.rst
@@ -3,8 +3,10 @@
 
 * CMake gained the ability to diagnose :command:`install` commands that
   specify an absolute ``DESTINATION`` path via the
-  :ref:`CMD_INSTALL_ABSOLUTE_DESTINATION <CMD_INSTALL_ABSOLUTE_DESTINATION>`
-  diagnostic category. This diagnostic may be controlled with the
-  :option:`-Winstall-absolute-destination <cmake -W>` command-line option, the
-  ``installAbsoluteDestination`` field in a :manual:`cmake-presets(7)`
-  ``warnings`` object, or the :command:`cmake_diagnostic` command.
+  :diagnostic:`CMD_INSTALL_ABSOLUTE_DESTINATION` diagnostic category.
+  This diagnostic may be controlled with the
+  :option:`-Winstall-absolute-destination <cmake -W>` command-line option,
+  the ``installAbsoluteDestination`` field in a
+  :manual:`CMake Presets <cmake-presets(7)>`
+  :preset:`configurePresets.warnings` object,
+  or the :command:`cmake_diagnostic` command.
diff --git a/Help/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst b/Help/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst
index 84a27e5..5ee7bf3 100644
--- a/Help/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst
+++ b/Help/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst
@@ -11,8 +11,7 @@
 
 .. versionadded:: 4.4
 
-  The :ref:`CMD_INSTALL_ABSOLUTE_DESTINATION <CMD_INSTALL_ABSOLUTE_DESTINATION>`
-  diagnostic can be used to to generate errors for absolute install destinations
-  at generate time.
+  The :diagnostic:`CMD_INSTALL_ABSOLUTE_DESTINATION` diagnostic can be used to
+  generate errors for absolute install destinations at generate time.
 
 See also :variable:`CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION`.
diff --git a/Help/variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst b/Help/variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst
index fac680e..ac40b3d 100644
--- a/Help/variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst
+++ b/Help/variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst
@@ -10,8 +10,7 @@
 
 .. versionadded:: 4.4
 
-  The :ref:`CMD_INSTALL_ABSOLUTE_DESTINATION <CMD_INSTALL_ABSOLUTE_DESTINATION>`
-  diagnostic can be used to to generate warnings for absolute install destinations
-  at generate time.
+  The :diagnostic:`CMD_INSTALL_ABSOLUTE_DESTINATION` diagnostic can be used to
+  generate warnings for absolute install destinations at generate time.
 
 See also :variable:`CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION`.
diff --git a/Help/variable/CTEST_TEST_COVERAGE_TOOL.rst b/Help/variable/CTEST_TEST_COVERAGE_TOOL.rst
new file mode 100644
index 0000000..bc94825
--- /dev/null
+++ b/Help/variable/CTEST_TEST_COVERAGE_TOOL.rst
@@ -0,0 +1,7 @@
+CTEST_TEST_COVERAGE_TOOL
+------------------------
+
+.. versionadded:: 4.4
+
+Specify the CTest :ref:`CoverageTool <ctest-CoverageTool>` setting
+in a :manual:`ctest(1)` :ref:`Dashboard Client` script.
diff --git a/Modules/DartConfiguration.tcl.in b/Modules/DartConfiguration.tcl.in
index 67d9f8f..409a5c6 100644
--- a/Modules/DartConfiguration.tcl.in
+++ b/Modules/DartConfiguration.tcl.in
@@ -107,3 +107,6 @@
 # specify behavior for retrying the submission
 CTestSubmitRetryDelay: @CTEST_SUBMIT_RETRY_DELAY@
 CTestSubmitRetryCount: @CTEST_SUBMIT_RETRY_COUNT@
+
+# Invoke each test with environment variables configuring tool's collection.
+CTestTestCoverageTool: @CTEST_TEST_COVERAGE_TOOL@
diff --git a/Modules/FindArmadillo.cmake b/Modules/FindArmadillo.cmake
index 901ea22..861540b 100644
--- a/Modules/FindArmadillo.cmake
+++ b/Modules/FindArmadillo.cmake
@@ -133,7 +133,7 @@
   set(Armadillo_VERSION_NAME "EARLY RELEASE")
 
   if(EXISTS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/arma_version.hpp")
-    # Read and parse armdillo version header file for version number
+    # Read and parse Armadillo version header file for version number.
     file(STRINGS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/arma_version.hpp" _ARMA_HEADER_CONTENTS REGEX "#define ARMA_VERSION_[A-Z]+ ")
     string(REGEX REPLACE ".*#define ARMA_VERSION_MAJOR ([0-9]+).*" "\\1" ARMADILLO_VERSION_MAJOR "${_ARMA_HEADER_CONTENTS}")
     string(REGEX REPLACE ".*#define ARMA_VERSION_MINOR ([0-9]+).*" "\\1" ARMADILLO_VERSION_MINOR "${_ARMA_HEADER_CONTENTS}")
@@ -176,8 +176,6 @@
     )
   mark_as_advanced(ARMADILLO_LIBRARY)
   set(_ARMA_REQUIRED_VARS ARMADILLO_LIBRARY)
-else()
-  set(ARMADILLO_LIBRARY "")
 endif()
 
 # Transitive linking with the wrapper does not work with MSVC,
diff --git a/Modules/Platform/Windows-PellesC-ASM_POASM.cmake b/Modules/Platform/Windows-PellesC-ASM_POASM.cmake
index 2cafaef..2bff21f 100644
--- a/Modules/Platform/Windows-PellesC-ASM_POASM.cmake
+++ b/Modules/Platform/Windows-PellesC-ASM_POASM.cmake
@@ -6,3 +6,8 @@
 
 set(CMAKE_ASM_POASM_COMPILE_OBJECT
   "<CMAKE_ASM_POASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -Fo<OBJECT> <SOURCE>")
+
+string(APPEND CMAKE_ASM_POASM_FLAGS_DEBUG_INIT " -Zi")
+string(APPEND CMAKE_ASM_POASM_FLAGS_RELEASE_INIT "")
+string(APPEND CMAKE_ASM_POASM_FLAGS_RELWITHDEBINFO_INIT " -Zi")
+string(APPEND CMAKE_ASM_POASM_FLAGS_MINSIZEREL_INIT "")
diff --git a/Modules/Platform/Windows-PellesC-C.cmake b/Modules/Platform/Windows-PellesC-C.cmake
index 64fd5f6..f5a3dad 100644
--- a/Modules/Platform/Windows-PellesC-C.cmake
+++ b/Modules/Platform/Windows-PellesC-C.cmake
@@ -6,3 +6,12 @@
 
 set(CMAKE_C_COMPILE_OBJECT
   "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -Fo<OBJECT> -c <SOURCE>")
+
+# Enable Pelles C's Microsoft extensions to use Windows APIs.
+# The flag also disables standard definitions, so add them.
+string(APPEND CMAKE_C_FLAGS_INIT " -Ze -D__STDC__=1 -D__STDC_VERSION__=__POCC_STDC_VERSION__")
+
+string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " -Zi -Ob0")
+string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -Ot -Ob2 -DNDEBUG=1")
+string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -Zi -Ot -Ob1 -DNDEBUG=1")
+string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -Os -Ob1 -DNDEBUG=1")
diff --git a/Modules/Platform/Windows-PellesC.cmake b/Modules/Platform/Windows-PellesC.cmake
index eb16576..d29cc4a 100644
--- a/Modules/Platform/Windows-PellesC.cmake
+++ b/Modules/Platform/Windows-PellesC.cmake
@@ -6,6 +6,8 @@
 set(CMAKE_LINK_DEF_FILE_FLAG "-def:")
 set(CMAKE_LINK_LIBRARY_FLAG "")
 
+set(CMAKE_BUILD_TYPE_INIT Debug)
+
 macro(__windows_compiler_pellesc lang)
   set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "<CMAKE_AR> <LINK_FLAGS> -out:<TARGET> <OBJECTS>")
 
@@ -27,3 +29,8 @@
   endif()
   enable_language(RC)
 endmacro()
+
+foreach (t IN ITEMS EXE SHARED MODULE)
+  string(APPEND CMAKE_${t}_LINKER_FLAGS_DEBUG_INIT " -debug -debugtype:both -dbg")
+  string(APPEND CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO_INIT " -debug -debugtype:both -dbg")
+endforeach ()
diff --git a/Modules/ProcessorCount.cmake b/Modules/ProcessorCount.cmake
index 260b663..b8fa1fa 100644
--- a/Modules/ProcessorCount.cmake
+++ b/Modules/ProcessorCount.cmake
@@ -94,12 +94,13 @@
       execute_process(COMMAND ${ProcessorCount_cmd_sysctl} -n hw.ncpu
         ERROR_QUIET
         OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE count)
+        OUTPUT_VARIABLE count
+        RESULT_VARIABLE _count_ok)
       #message("ProcessorCount: trying sysctl '${ProcessorCount_cmd_sysctl}'")
     endif()
   endif()
 
-  if(NOT count)
+  if(NOT (_count_ok EQUAL 0 AND count GREATER 0))
     # Linux (systems with nproc):
     # Prefer nproc to getconf if available as getconf may return the host CPU count in Linux containers
     find_program(ProcessorCount_cmd_nproc nproc)
@@ -108,12 +109,13 @@
       execute_process(COMMAND ${ProcessorCount_cmd_nproc}
         ERROR_QUIET
         OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE count)
+        OUTPUT_VARIABLE count
+        RESULT_VARIABLE _count_ok)
       #message("ProcessorCount: trying nproc '${ProcessorCount_cmd_nproc}'")
     endif()
   endif()
 
-  if(NOT count)
+  if(NOT (_count_ok EQUAL 0 AND count GREATER 0))
     # Linux (systems with getconf):
     find_program(ProcessorCount_cmd_getconf getconf)
     mark_as_advanced(ProcessorCount_cmd_getconf)
@@ -121,12 +123,13 @@
       execute_process(COMMAND ${ProcessorCount_cmd_getconf} _NPROCESSORS_ONLN
         ERROR_QUIET
         OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE count)
+        OUTPUT_VARIABLE count
+        RESULT_VARIABLE _count_ok)
       #message("ProcessorCount: trying getconf '${ProcessorCount_cmd_getconf}'")
     endif()
   endif()
 
-  if(NOT count)
+  if(NOT (_count_ok EQUAL 0 AND count GREATER 0))
     # HPUX (systems with machinfo):
     find_program(ProcessorCount_cmd_machinfo machinfo
       PATHS /usr/contrib/bin)
@@ -150,15 +153,18 @@
         execute_process(COMMAND ${ProcessorCount_cmd_mpsched} -s
           OUTPUT_QUIET
           ERROR_STRIP_TRAILING_WHITESPACE
-          ERROR_VARIABLE mpsched_output)
-        string(REGEX MATCHALL "Processor Count *: *([0-9]+)" procs "${mpsched_output}")
-        set(count "${CMAKE_MATCH_1}")
+          ERROR_VARIABLE mpsched_output
+          RESULT_VARIABLE _mpsched_ok)
+        if(_mpsched_ok EQUAL 0)
+          string(REGEX MATCHALL "Processor Count *: *([0-9]+)" procs "${mpsched_output}")
+          set(count "${CMAKE_MATCH_1}")
+        endif()
         #message("ProcessorCount: trying mpsched -s '${ProcessorCount_cmd_mpsched}'")
       endif()
     endif()
   endif()
 
-  if(NOT count)
+  if(NOT count GREATER 0)
     # AIX (systems with lsconf):
     find_program(ProcessorCount_cmd_lsconf lsconf
       PATHS /usr/sbin)
@@ -167,14 +173,17 @@
       execute_process(COMMAND ${ProcessorCount_cmd_lsconf}
         ERROR_QUIET
         OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE lsconf_output)
-      string(REGEX MATCHALL "Number Of Processors: ([0-9]+)" procs "${lsconf_output}")
-      set(count "${CMAKE_MATCH_1}")
+        OUTPUT_VARIABLE lsconf_output
+        RESULT_VARIABLE _lsconf_ok)
+      if(_lsconf_ok EQUAL 0)
+        string(REGEX MATCHALL "Number Of Processors: ([0-9]+)" procs "${lsconf_output}")
+        set(count "${CMAKE_MATCH_1}")
+      endif()
       #message("ProcessorCount: trying lsconf '${ProcessorCount_cmd_lsconf}'")
     endif()
   endif()
 
-  if(NOT count)
+  if(NOT count GREATER 0)
     # QNX (systems with pidin):
     find_program(ProcessorCount_cmd_pidin pidin)
     mark_as_advanced(ProcessorCount_cmd_pidin)
@@ -182,14 +191,17 @@
       execute_process(COMMAND ${ProcessorCount_cmd_pidin} info
         ERROR_QUIET
         OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE pidin_output)
-      string(REGEX MATCHALL "Processor[0-9]+: " procs "${pidin_output}")
-      list(LENGTH procs count)
+        OUTPUT_VARIABLE pidin_output
+        RESULT_VARIABLE _pidin_ok)
+      if(_pidin_ok EQUAL 0)
+        string(REGEX MATCHALL "Processor[0-9]+: " procs "${pidin_output}")
+        list(LENGTH procs count)
+      endif()
       #message("ProcessorCount: trying pidin '${ProcessorCount_cmd_pidin}'")
     endif()
   endif()
 
-  if(NOT count)
+  if(NOT count GREATER 0)
     # Sun (systems where psrinfo tool is available)
     find_program(ProcessorCount_cmd_psrinfo psrinfo PATHS /usr/sbin /sbin)
     mark_as_advanced(ProcessorCount_cmd_psrinfo)
@@ -197,13 +209,16 @@
       execute_process(COMMAND ${ProcessorCount_cmd_psrinfo} -p -v
         ERROR_QUIET
         OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE psrinfo_output)
-      string(REGEX MATCHALL "has [0-9]+ virtual processor" procs "${psrinfo_output}")
-      set(count "")
-      foreach(proc ${procs})
-        string(REGEX MATCH "has ([0-9]+) virtual" res ${proc})
-        math(EXPR count "${count} + ${CMAKE_MATCH_1}")
-      endforeach()
+        OUTPUT_VARIABLE psrinfo_output
+        RESULT_VARIABLE _psrinfo_ok)
+      if(_psrinfo_ok EQUAL 0)
+        string(REGEX MATCHALL "has [0-9]+ virtual processor" procs "${psrinfo_output}")
+        set(count "")
+        foreach(proc IN LISTS procs)
+          string(REGEX MATCH "has ([0-9]+) virtual" res ${proc})
+          math(EXPR count "${count} + ${CMAKE_MATCH_1}")
+        endforeach()
+      endif()
       #message("ProcessorCount: trying '${ProcessorCount_cmd_psrinfo}' -p -v")
     else()
       # Sun (systems where uname -X emits "NumCPU" in its output):
@@ -213,9 +228,12 @@
         execute_process(COMMAND ${ProcessorCount_cmd_uname} -X
           ERROR_QUIET
           OUTPUT_STRIP_TRAILING_WHITESPACE
-          OUTPUT_VARIABLE uname_X_output)
-        string(REGEX MATCHALL "NumCPU = ([0-9]+)" procs "${uname_X_output}")
-        set(count "${CMAKE_MATCH_1}")
+          OUTPUT_VARIABLE uname_X_output
+          RESULT_VARIABLE _uname_X_ok)
+        if(_uname_X_ok EQUAL 0)
+          string(REGEX MATCHALL "NumCPU = ([0-9]+)" procs "${uname_X_output}")
+          set(count "${CMAKE_MATCH_1}")
+        endif()
         #message("ProcessorCount: trying uname -X '${ProcessorCount_cmd_uname}'")
       endif()
     endif()
@@ -224,7 +242,7 @@
   # Execute this code when all previously attempted methods return empty
   # output:
   #
-  if(NOT count)
+  if(NOT count GREATER 0)
     # Systems with /proc/cpuinfo:
     set(cpuinfo_file /proc/cpuinfo)
     if(EXISTS "${cpuinfo_file}")
@@ -237,7 +255,7 @@
     endif()
   endif()
 
-  if(NOT count)
+  if(NOT count GREATER 0)
     # Haiku
     find_program(ProcessorCount_cmd_sysinfo sysinfo)
     mark_as_advanced(ProcessorCount_cmd_sysinfo)
@@ -245,9 +263,12 @@
       execute_process(COMMAND ${ProcessorCount_cmd_sysinfo}
         ERROR_QUIET
         OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE sysinfo_X_output)
-      string(REGEX MATCHALL "\nCPU #[0-9]+:" procs "\n${sysinfo_X_output}")
-      list(LENGTH procs count)
+        OUTPUT_VARIABLE sysinfo_X_output
+        RESULT_VARIABLE _sysinfo_ok)
+      if(_sysinfo_ok EQUAL 0)
+        string(REGEX MATCHALL "\nCPU #[0-9]+:" procs "\n${sysinfo_X_output}")
+        list(LENGTH procs count)
+      endif()
       #message("ProcessorCount: trying sysinfo '${ProcessorCount_cmd_sysinfo}'")
     endif()
   endif()
@@ -255,7 +276,7 @@
   # Since cygwin builds of CMake do not define WIN32 anymore, but they still
   # run on Windows, and will still have this env var defined:
   #
-  if(NOT count)
+  if(NOT count GREATER 0)
     set(count "$ENV{NUMBER_OF_PROCESSORS}")
     #message("ProcessorCount: last fallback, trying environment variable")
   endif()
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index 698d700..54bc9ad 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -1,7 +1,7 @@
 # CMake version number components.
 set(CMake_VERSION_MAJOR 4)
 set(CMake_VERSION_MINOR 3)
-set(CMake_VERSION_PATCH 20260504)
+set(CMake_VERSION_PATCH 20260505)
 #set(CMake_VERSION_RC 0)
 set(CMake_VERSION_IS_DIRTY 0)
 
diff --git a/Source/CTest/cmCTestRunTest.cxx b/Source/CTest/cmCTestRunTest.cxx
index c5e7ce1..eaf5831 100644
--- a/Source/CTest/cmCTestRunTest.cxx
+++ b/Source/CTest/cmCTestRunTest.cxx
@@ -14,7 +14,10 @@
 
 #include <cm/memory>
 #include <cm/optional>
+#include <cm/string_view>
+#include <cmext/string_view>
 
+#include "cmsys/Glob.hxx"
 #include "cmsys/RegularExpression.hxx"
 
 #include "cmCTest.h"
@@ -874,6 +877,35 @@
     diff.ApplyTo(env);
   }
 
+  // Inject LLVM Profile name :
+  // https://clang.llvm.org/docs/SourceBasedCodeCoverage.html#running-the-instrumented-program
+  if (this->CTest->GetCTestConfiguration("CTestTestCoverageTool") ==
+        "LLVM-COV"_s ||
+      this->TestHandler->TestOptions.CoverageTool == "LLVM-COV"_s) {
+
+    // Isolate the test from any ambient LLVM_PROFILE_FILE
+    env.UnPutEnv("LLVM_PROFILE_FILE");
+    // Value is <Test Dir>/<testName>_<processID>.profraw
+    std::string profileEnv =
+      cmStrCat(this->TestProperties->CTestDirectory, "/",
+               this->TestProperties->Name, "_%p.profraw"_s);
+    cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
+                       this->Index
+                         << ": Using environment variable LLVM_PROFILE_FILE="_s
+                         << profileEnv << " \n",
+                       this->TestHandler->GetQuiet());
+    env.PutEnv(cmStrCat("LLVM_PROFILE_FILE="_s, profileEnv));
+    // ProcessID -> * to allow for glob to find all
+    // files generated by the test
+    cmSystemTools::ReplaceString(profileEnv, "%p", "*");
+
+    cmsys::Glob glob;
+    glob.FindFiles(profileEnv);
+    for (std::string const& file : glob.GetFiles()) {
+      cmSystemTools::RemoveFile(file);
+    }
+  };
+
   if (this->UseAllocatedResources) {
     this->SetupResourcesEnvironment(env);
   } else {
diff --git a/Source/CTest/cmCTestTestCommand.cxx b/Source/CTest/cmCTestTestCommand.cxx
index 2d923a4..1c0d4e7 100644
--- a/Source/CTest/cmCTestTestCommand.cxx
+++ b/Source/CTest/cmCTestTestCommand.cxx
@@ -96,6 +96,9 @@
   if (!args.ResourceSpecFile.empty()) {
     handler->TestOptions.ResourceSpecFile = args.ResourceSpecFile;
   }
+  if (!args.CoverageTool.empty()) {
+    handler->TestOptions.CoverageTool = args.CoverageTool;
+  }
   if (!args.StopTime.empty()) {
     this->CTest->SetStopTime(args.StopTime);
   }
diff --git a/Source/CTest/cmCTestTestCommand.h b/Source/CTest/cmCTestTestCommand.h
index 125d5a5..00297f6 100644
--- a/Source/CTest/cmCTestTestCommand.h
+++ b/Source/CTest/cmCTestTestCommand.h
@@ -46,6 +46,7 @@
     std::string TestLoad;
     std::string ResourceSpecFile;
     std::string OutputJUnit;
+    std::string CoverageTool;
     bool StopOnFailure = false;
   };
 
@@ -74,6 +75,7 @@
       .Bind("TEST_LOAD"_s, &TestArguments::TestLoad)
       .Bind("RESOURCE_SPEC_FILE"_s, &TestArguments::ResourceSpecFile)
       .Bind("STOP_ON_FAILURE"_s, &TestArguments::StopOnFailure)
+      .Bind("COVERAGE_TOOL"_s, &TestArguments::CoverageTool)
       .Bind("OUTPUT_JUNIT"_s, &TestArguments::OutputJUnit);
   }
 
diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx
index 65957af..9731a17 100644
--- a/Source/CTest/cmCTestTestHandler.cxx
+++ b/Source/CTest/cmCTestTestHandler.cxx
@@ -2493,7 +2493,8 @@
   cmCTestTestProperties test;
   test.Name = testname;
   test.Args = args;
-  test.Directory = cmSystemTools::GetLogicalWorkingDirectory();
+  test.CTestDirectory = cmSystemTools::GetLogicalWorkingDirectory();
+  test.Directory = test.CTestDirectory;
   cmCTestOptionalLog(this->CTest, DEBUG,
                      "Set test directory: " << test.Directory << std::endl,
                      this->Quiet);
diff --git a/Source/CTest/cmCTestTestHandler.h b/Source/CTest/cmCTestTestHandler.h
index 4d4dbb8..c6238da 100644
--- a/Source/CTest/cmCTestTestHandler.h
+++ b/Source/CTest/cmCTestTestHandler.h
@@ -56,6 +56,8 @@
   std::string ResourceSpecFile;
   std::string JUnitXMLFileName;
 
+  std::string CoverageTool;
+
   std::vector<std::string> TestPassthroughArguments;
 };
 
@@ -131,7 +133,10 @@
     void AppendError(cm::string_view err);
     cm::optional<std::string> Error;
     std::string Name;
+    // working directory for test, overridden by WORKING_DIRECTORY property
     std::string Directory;
+    // Original directory of test creation
+    std::string CTestDirectory;
     std::vector<std::string> Args;
     std::vector<std::string> RequiredFiles;
     std::vector<std::string> Depends;
diff --git a/Source/LexerParser/cmDependsJavaParser.cxx b/Source/LexerParser/cmDependsJavaParser.cxx
index e85bf98..578646f 100644
--- a/Source/LexerParser/cmDependsJavaParser.cxx
+++ b/Source/LexerParser/cmDependsJavaParser.cxx
@@ -119,13 +119,16 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
 # endif
 #endif
 
-#line 129 "cmDependsJavaParser.cxx"
+#line 132 "cmDependsJavaParser.cxx"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -813,42 +816,42 @@
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   184,   184,   193,   201,   209,   217,   225,   233,   242,
-     250,   259,   267,   276,   281,   286,   291,   296,   301,   306,
-     311,   317,   325,   334,   344,   353,   362,   370,   380,   386,
-     393,   400,   406,   413,   422,   432,   442,   451,   459,   468,
-     477,   483,   492,   498,   507,   513,   522,   534,   542,   551,
-     563,   576,   584,   592,   601,   609,   618,   618,   618,   619,
-     620,   620,   620,   620,   620,   620,   621,   624,   634,   643,
-     652,   661,   671,   677,   686,   695,   704,   712,   721,   730,
-     736,   745,   753,   761,   769,   778,   786,   795,   801,   809,
-     818,   826,   835,   844,   853,   861,   870,   878,   886,   895,
-     904,   914,   921,   931,   941,   948,   955,   958,   964,   974,
-     984,   994,  1000,  1010,  1020,  1030,  1039,  1049,  1060,  1070,
-    1077,  1087,  1096,  1106,  1115,  1125,  1131,  1141,  1150,  1160,
-    1170,  1177,  1186,  1195,  1204,  1213,  1221,  1230,  1239,  1249,
-    1259,  1268,  1278,  1288,  1295,  1304,  1314,  1323,  1333,  1342,
-    1349,  1359,  1368,  1378,  1387,  1396,  1406,  1416,  1425,  1435,
-    1444,  1453,  1462,  1471,  1480,  1490,  1499,  1508,  1517,  1526,
-    1536,  1545,  1554,  1563,  1572,  1581,  1590,  1599,  1608,  1617,
-    1626,  1635,  1645,  1655,  1666,  1676,  1686,  1695,  1704,  1713,
-    1722,  1731,  1740,  1750,  1760,  1770,  1780,  1787,  1794,  1801,
-    1811,  1818,  1828,  1838,  1847,  1857,  1866,  1876,  1883,  1890,
-    1897,  1905,  1912,  1922,  1929,  1939,  1949,  1956,  1966,  1975,
-    1985,  1995,  2004,  2014,  2023,  2033,  2044,  2051,  2058,  2069,
-    2079,  2089,  2099,  2108,  2118,  2125,  2135,  2144,  2154,  2161,
-    2171,  2180,  2190,  2199,  2205,  2214,  2223,  2232,  2241,  2251,
-    2261,  2268,  2278,  2285,  2295,  2304,  2314,  2323,  2332,  2341,
-    2351,  2358,  2368,  2377,  2387,  2397,  2403,  2410,  2420,  2430,
-    2440,  2451,  2461,  2472,  2482,  2493,  2503,  2513,  2522,  2531,
-    2540,  2549,  2559,  2569,  2579,  2588,  2597,  2606,  2615,  2625,
-    2635,  2645,  2654,  2663,  2672,  2682,  2691,  2700,  2707,  2716,
-    2725,  2734,  2744,  2753,  2762,  2772,  2781,  2790,  2799,  2809,
-    2818,  2827,  2836,  2845,  2854,  2864,  2873,  2882,  2892,  2901,
-    2911,  2920,  2930,  2939,  2949,  2958,  2968,  2977,  2987,  2996,
-    3006,  3015,  3025,  3035,  3045,  3054,  3064,  3073,  3082,  3091,
-    3100,  3109,  3118,  3127,  3136,  3145,  3154,  3163,  3173,  3183,
-    3193,  3202
+       0,   187,   187,   196,   204,   212,   220,   228,   236,   245,
+     253,   262,   270,   279,   284,   289,   294,   299,   304,   309,
+     314,   320,   328,   337,   347,   356,   365,   373,   383,   389,
+     396,   403,   409,   416,   425,   435,   445,   454,   462,   471,
+     480,   486,   495,   501,   510,   516,   525,   537,   545,   554,
+     566,   579,   587,   595,   604,   612,   621,   621,   621,   622,
+     623,   623,   623,   623,   623,   623,   624,   627,   637,   646,
+     655,   664,   674,   680,   689,   698,   707,   715,   724,   733,
+     739,   748,   756,   764,   772,   781,   789,   798,   804,   812,
+     821,   829,   838,   847,   856,   864,   873,   881,   889,   898,
+     907,   917,   924,   934,   944,   951,   958,   961,   967,   977,
+     987,   997,  1003,  1013,  1023,  1033,  1042,  1052,  1063,  1073,
+    1080,  1090,  1099,  1109,  1118,  1128,  1134,  1144,  1153,  1163,
+    1173,  1180,  1189,  1198,  1207,  1216,  1224,  1233,  1242,  1252,
+    1262,  1271,  1281,  1291,  1298,  1307,  1317,  1326,  1336,  1345,
+    1352,  1362,  1371,  1381,  1390,  1399,  1409,  1419,  1428,  1438,
+    1447,  1456,  1465,  1474,  1483,  1493,  1502,  1511,  1520,  1529,
+    1539,  1548,  1557,  1566,  1575,  1584,  1593,  1602,  1611,  1620,
+    1629,  1638,  1648,  1658,  1669,  1679,  1689,  1698,  1707,  1716,
+    1725,  1734,  1743,  1753,  1763,  1773,  1783,  1790,  1797,  1804,
+    1814,  1821,  1831,  1841,  1850,  1860,  1869,  1879,  1886,  1893,
+    1900,  1908,  1915,  1925,  1932,  1942,  1952,  1959,  1969,  1978,
+    1988,  1998,  2007,  2017,  2026,  2036,  2047,  2054,  2061,  2072,
+    2082,  2092,  2102,  2111,  2121,  2128,  2138,  2147,  2157,  2164,
+    2174,  2183,  2193,  2202,  2208,  2217,  2226,  2235,  2244,  2254,
+    2264,  2271,  2281,  2288,  2298,  2307,  2317,  2326,  2335,  2344,
+    2354,  2361,  2371,  2380,  2390,  2400,  2406,  2413,  2423,  2433,
+    2443,  2454,  2464,  2475,  2485,  2496,  2506,  2516,  2525,  2534,
+    2543,  2552,  2562,  2572,  2582,  2591,  2600,  2609,  2618,  2628,
+    2638,  2648,  2657,  2666,  2675,  2685,  2694,  2703,  2710,  2719,
+    2728,  2737,  2747,  2756,  2765,  2775,  2784,  2793,  2802,  2812,
+    2821,  2830,  2839,  2848,  2857,  2867,  2876,  2885,  2895,  2904,
+    2914,  2923,  2933,  2942,  2952,  2961,  2971,  2980,  2990,  2999,
+    3009,  3018,  3028,  3038,  3048,  3057,  3067,  3076,  3085,  3094,
+    3103,  3112,  3121,  3130,  3139,  3148,  3157,  3166,  3176,  3186,
+    3196,  3205
 };
 #endif
 
@@ -2469,214 +2472,214 @@
   switch (yyn)
     {
   case 2: /* Goal: CompilationUnit  */
-#line 185 "cmDependsJavaParser.y"
+#line 188 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2480 "cmDependsJavaParser.cxx"
+#line 2483 "cmDependsJavaParser.cxx"
     break;
 
   case 3: /* Literal: IntegerLiteral  */
-#line 194 "cmDependsJavaParser.y"
+#line 197 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2491 "cmDependsJavaParser.cxx"
+#line 2494 "cmDependsJavaParser.cxx"
     break;
 
   case 4: /* Literal: jp_FLOATINGPOINTLITERAL  */
-#line 202 "cmDependsJavaParser.y"
+#line 205 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2502 "cmDependsJavaParser.cxx"
+#line 2505 "cmDependsJavaParser.cxx"
     break;
 
   case 5: /* Literal: jp_BOOLEANLITERAL  */
-#line 210 "cmDependsJavaParser.y"
+#line 213 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2513 "cmDependsJavaParser.cxx"
+#line 2516 "cmDependsJavaParser.cxx"
     break;
 
   case 6: /* Literal: jp_CHARACTERLITERAL  */
-#line 218 "cmDependsJavaParser.y"
+#line 221 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2524 "cmDependsJavaParser.cxx"
+#line 2527 "cmDependsJavaParser.cxx"
     break;
 
   case 7: /* Literal: jp_STRINGLITERAL  */
-#line 226 "cmDependsJavaParser.y"
+#line 229 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2535 "cmDependsJavaParser.cxx"
+#line 2538 "cmDependsJavaParser.cxx"
     break;
 
   case 8: /* Literal: jp_NULLLITERAL  */
-#line 234 "cmDependsJavaParser.y"
+#line 237 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2546 "cmDependsJavaParser.cxx"
+#line 2549 "cmDependsJavaParser.cxx"
     break;
 
   case 9: /* IntegerLiteral: jp_DECIMALINTEGERLITERAL  */
-#line 243 "cmDependsJavaParser.y"
+#line 246 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2557 "cmDependsJavaParser.cxx"
+#line 2560 "cmDependsJavaParser.cxx"
     break;
 
   case 10: /* IntegerLiteral: jp_HEXINTEGERLITERAL  */
-#line 251 "cmDependsJavaParser.y"
+#line 254 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2568 "cmDependsJavaParser.cxx"
+#line 2571 "cmDependsJavaParser.cxx"
     break;
 
   case 11: /* Type: PrimitiveType  */
-#line 260 "cmDependsJavaParser.y"
+#line 263 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2579 "cmDependsJavaParser.cxx"
+#line 2582 "cmDependsJavaParser.cxx"
     break;
 
   case 12: /* Type: ReferenceType  */
-#line 268 "cmDependsJavaParser.y"
+#line 271 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2590 "cmDependsJavaParser.cxx"
+#line 2593 "cmDependsJavaParser.cxx"
     break;
 
   case 13: /* PrimitiveType: jp_BYTE_TYPE  */
-#line 277 "cmDependsJavaParser.y"
+#line 280 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2598 "cmDependsJavaParser.cxx"
+#line 2601 "cmDependsJavaParser.cxx"
     break;
 
   case 14: /* PrimitiveType: jp_SHORT_TYPE  */
-#line 282 "cmDependsJavaParser.y"
+#line 285 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2606 "cmDependsJavaParser.cxx"
+#line 2609 "cmDependsJavaParser.cxx"
     break;
 
   case 15: /* PrimitiveType: jp_INT_TYPE  */
-#line 287 "cmDependsJavaParser.y"
+#line 290 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2614 "cmDependsJavaParser.cxx"
+#line 2617 "cmDependsJavaParser.cxx"
     break;
 
   case 16: /* PrimitiveType: jp_LONG_TYPE  */
-#line 292 "cmDependsJavaParser.y"
+#line 295 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2622 "cmDependsJavaParser.cxx"
+#line 2625 "cmDependsJavaParser.cxx"
     break;
 
   case 17: /* PrimitiveType: jp_CHAR_TYPE  */
-#line 297 "cmDependsJavaParser.y"
+#line 300 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2630 "cmDependsJavaParser.cxx"
+#line 2633 "cmDependsJavaParser.cxx"
     break;
 
   case 18: /* PrimitiveType: jp_FLOAT_TYPE  */
-#line 302 "cmDependsJavaParser.y"
+#line 305 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2638 "cmDependsJavaParser.cxx"
+#line 2641 "cmDependsJavaParser.cxx"
     break;
 
   case 19: /* PrimitiveType: jp_DOUBLE_TYPE  */
-#line 307 "cmDependsJavaParser.y"
+#line 310 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2646 "cmDependsJavaParser.cxx"
+#line 2649 "cmDependsJavaParser.cxx"
     break;
 
   case 20: /* PrimitiveType: jp_BOOLEAN_TYPE  */
-#line 312 "cmDependsJavaParser.y"
+#line 315 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2654 "cmDependsJavaParser.cxx"
+#line 2657 "cmDependsJavaParser.cxx"
     break;
 
   case 21: /* ReferenceType: ClassOrInterfaceType  */
-#line 318 "cmDependsJavaParser.y"
+#line 321 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2665 "cmDependsJavaParser.cxx"
+#line 2668 "cmDependsJavaParser.cxx"
     break;
 
   case 22: /* ReferenceType: ArrayType  */
-#line 326 "cmDependsJavaParser.y"
+#line 329 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2676 "cmDependsJavaParser.cxx"
+#line 2679 "cmDependsJavaParser.cxx"
     break;
 
   case 23: /* ClassOrInterfaceType: Name  */
-#line 335 "cmDependsJavaParser.y"
+#line 338 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpStoreClass((yyvsp[0].str));
@@ -2684,44 +2687,44 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2688 "cmDependsJavaParser.cxx"
+#line 2691 "cmDependsJavaParser.cxx"
     break;
 
   case 24: /* ClassType: ClassOrInterfaceType  */
-#line 345 "cmDependsJavaParser.y"
+#line 348 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2699 "cmDependsJavaParser.cxx"
+#line 2702 "cmDependsJavaParser.cxx"
     break;
 
   case 25: /* InterfaceType: ClassOrInterfaceType  */
-#line 354 "cmDependsJavaParser.y"
+#line 357 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2710 "cmDependsJavaParser.cxx"
+#line 2713 "cmDependsJavaParser.cxx"
     break;
 
   case 26: /* ArrayType: PrimitiveType Dims  */
-#line 363 "cmDependsJavaParser.y"
+#line 366 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2721 "cmDependsJavaParser.cxx"
+#line 2724 "cmDependsJavaParser.cxx"
     break;
 
   case 27: /* ArrayType: Name Dims  */
-#line 371 "cmDependsJavaParser.y"
+#line 374 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpStoreClass((yyvsp[-1].str));
@@ -2729,56 +2732,56 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2733 "cmDependsJavaParser.cxx"
+#line 2736 "cmDependsJavaParser.cxx"
     break;
 
   case 28: /* Name: SimpleName  */
-#line 381 "cmDependsJavaParser.y"
+#line 384 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = (yyvsp[0].str);
 }
-#line 2742 "cmDependsJavaParser.cxx"
+#line 2745 "cmDependsJavaParser.cxx"
     break;
 
   case 29: /* Name: QualifiedName  */
-#line 387 "cmDependsJavaParser.y"
+#line 390 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = (yyvsp[0].str);
 }
-#line 2751 "cmDependsJavaParser.cxx"
+#line 2754 "cmDependsJavaParser.cxx"
     break;
 
   case 30: /* SimpleName: Identifier  */
-#line 394 "cmDependsJavaParser.y"
+#line 397 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = (yyvsp[0].str);
 }
-#line 2760 "cmDependsJavaParser.cxx"
+#line 2763 "cmDependsJavaParser.cxx"
     break;
 
   case 31: /* Identifier: jp_NAME  */
-#line 401 "cmDependsJavaParser.y"
+#line 404 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = (yyvsp[0].str);
 }
-#line 2769 "cmDependsJavaParser.cxx"
+#line 2772 "cmDependsJavaParser.cxx"
     break;
 
   case 32: /* Identifier: jp_DOLLAR jp_NAME  */
-#line 407 "cmDependsJavaParser.y"
+#line 410 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   (yyval.str) = (yyvsp[0].str);
 }
-#line 2778 "cmDependsJavaParser.cxx"
+#line 2781 "cmDependsJavaParser.cxx"
     break;
 
   case 33: /* QualifiedName: Name jp_DOT Identifier  */
-#line 414 "cmDependsJavaParser.y"
+#line 417 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->AddClassFound((yyvsp[-2].str));
@@ -2786,11 +2789,11 @@
   yyGetParser->DeallocateParserType(&((yyvsp[-2].str)));
   (yyval.str) = const_cast<char*>(yyGetParser->GetCurrentCombine());
 }
-#line 2790 "cmDependsJavaParser.cxx"
+#line 2793 "cmDependsJavaParser.cxx"
     break;
 
   case 34: /* QualifiedName: Name jp_DOT jp_CLASS  */
-#line 423 "cmDependsJavaParser.y"
+#line 426 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpStoreClass((yyvsp[-2].str));
@@ -2799,11 +2802,11 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2803 "cmDependsJavaParser.cxx"
+#line 2806 "cmDependsJavaParser.cxx"
     break;
 
   case 35: /* QualifiedName: Name jp_DOT jp_THIS  */
-#line 433 "cmDependsJavaParser.y"
+#line 436 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpStoreClass((yyvsp[-2].str));
@@ -2812,118 +2815,118 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2816 "cmDependsJavaParser.cxx"
+#line 2819 "cmDependsJavaParser.cxx"
     break;
 
   case 36: /* QualifiedName: SimpleType jp_DOT jp_CLASS  */
-#line 443 "cmDependsJavaParser.y"
+#line 446 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2827 "cmDependsJavaParser.cxx"
+#line 2830 "cmDependsJavaParser.cxx"
     break;
 
   case 37: /* SimpleType: PrimitiveType  */
-#line 452 "cmDependsJavaParser.y"
+#line 455 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2838 "cmDependsJavaParser.cxx"
+#line 2841 "cmDependsJavaParser.cxx"
     break;
 
   case 38: /* SimpleType: jp_VOID  */
-#line 460 "cmDependsJavaParser.y"
+#line 463 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2849 "cmDependsJavaParser.cxx"
+#line 2852 "cmDependsJavaParser.cxx"
     break;
 
   case 39: /* CompilationUnit: PackageDeclarationopt ImportDeclarations TypeDeclarations  */
-#line 469 "cmDependsJavaParser.y"
+#line 472 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2860 "cmDependsJavaParser.cxx"
+#line 2863 "cmDependsJavaParser.cxx"
     break;
 
   case 40: /* PackageDeclarationopt: %empty  */
-#line 477 "cmDependsJavaParser.y"
+#line 480 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2870 "cmDependsJavaParser.cxx"
+#line 2873 "cmDependsJavaParser.cxx"
     break;
 
   case 41: /* PackageDeclarationopt: PackageDeclaration  */
-#line 484 "cmDependsJavaParser.y"
+#line 487 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2881 "cmDependsJavaParser.cxx"
+#line 2884 "cmDependsJavaParser.cxx"
     break;
 
   case 42: /* ImportDeclarations: %empty  */
-#line 492 "cmDependsJavaParser.y"
+#line 495 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2891 "cmDependsJavaParser.cxx"
+#line 2894 "cmDependsJavaParser.cxx"
     break;
 
   case 43: /* ImportDeclarations: ImportDeclarations ImportDeclaration  */
-#line 499 "cmDependsJavaParser.y"
+#line 502 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2902 "cmDependsJavaParser.cxx"
+#line 2905 "cmDependsJavaParser.cxx"
     break;
 
   case 44: /* TypeDeclarations: %empty  */
-#line 507 "cmDependsJavaParser.y"
+#line 510 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2912 "cmDependsJavaParser.cxx"
+#line 2915 "cmDependsJavaParser.cxx"
     break;
 
   case 45: /* TypeDeclarations: TypeDeclarations TypeDeclaration  */
-#line 514 "cmDependsJavaParser.y"
+#line 517 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2923 "cmDependsJavaParser.cxx"
+#line 2926 "cmDependsJavaParser.cxx"
     break;
 
   case 46: /* PackageDeclaration: jp_PACKAGE Name jp_SEMICOL  */
-#line 523 "cmDependsJavaParser.y"
+#line 526 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->SetCurrentPackage((yyvsp[-1].str));
@@ -2933,33 +2936,33 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2937 "cmDependsJavaParser.cxx"
+#line 2940 "cmDependsJavaParser.cxx"
     break;
 
   case 47: /* ImportDeclaration: SingleTypeImportDeclaration  */
-#line 535 "cmDependsJavaParser.y"
+#line 538 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2948 "cmDependsJavaParser.cxx"
+#line 2951 "cmDependsJavaParser.cxx"
     break;
 
   case 48: /* ImportDeclaration: TypeImportOnDemandDeclaration  */
-#line 543 "cmDependsJavaParser.y"
+#line 546 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2959 "cmDependsJavaParser.cxx"
+#line 2962 "cmDependsJavaParser.cxx"
     break;
 
   case 49: /* SingleTypeImportDeclaration: jp_IMPORT Name jp_SEMICOL  */
-#line 552 "cmDependsJavaParser.y"
+#line 555 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->AddPackagesImport((yyvsp[-1].str));
@@ -2969,11 +2972,11 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2973 "cmDependsJavaParser.cxx"
+#line 2976 "cmDependsJavaParser.cxx"
     break;
 
   case 50: /* TypeImportOnDemandDeclaration: jp_IMPORT Name jp_DOT jp_TIMES jp_SEMICOL  */
-#line 564 "cmDependsJavaParser.y"
+#line 567 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   std::string str = (yyvsp[-3].str);
@@ -2984,77 +2987,77 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2988 "cmDependsJavaParser.cxx"
+#line 2991 "cmDependsJavaParser.cxx"
     break;
 
   case 51: /* TypeDeclaration: ClassDeclaration  */
-#line 577 "cmDependsJavaParser.y"
+#line 580 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2999 "cmDependsJavaParser.cxx"
+#line 3002 "cmDependsJavaParser.cxx"
     break;
 
   case 52: /* TypeDeclaration: InterfaceDeclaration  */
-#line 585 "cmDependsJavaParser.y"
+#line 588 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3010 "cmDependsJavaParser.cxx"
+#line 3013 "cmDependsJavaParser.cxx"
     break;
 
   case 53: /* TypeDeclaration: jp_SEMICOL  */
-#line 593 "cmDependsJavaParser.y"
+#line 596 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3021 "cmDependsJavaParser.cxx"
+#line 3024 "cmDependsJavaParser.cxx"
     break;
 
   case 54: /* Modifiers: Modifier  */
-#line 602 "cmDependsJavaParser.y"
+#line 605 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3032 "cmDependsJavaParser.cxx"
+#line 3035 "cmDependsJavaParser.cxx"
     break;
 
   case 55: /* Modifiers: Modifiers Modifier  */
-#line 610 "cmDependsJavaParser.y"
+#line 613 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3043 "cmDependsJavaParser.cxx"
+#line 3046 "cmDependsJavaParser.cxx"
     break;
 
   case 67: /* ClassHeader: Modifiersopt jp_CLASS Identifier  */
-#line 625 "cmDependsJavaParser.y"
+#line 628 "cmDependsJavaParser.y"
 {
   yyGetParser->StartClass((yyvsp[0].str));
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
   jpCheckEmpty(3);
 }
-#line 3054 "cmDependsJavaParser.cxx"
+#line 3057 "cmDependsJavaParser.cxx"
     break;
 
   case 68: /* ClassDeclaration: ClassHeader ClassBody  */
-#line 635 "cmDependsJavaParser.y"
+#line 638 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3062,11 +3065,11 @@
   yyGetParser->SetCurrentCombine("");
   yyGetParser->EndClass();
 }
-#line 3066 "cmDependsJavaParser.cxx"
+#line 3069 "cmDependsJavaParser.cxx"
     break;
 
   case 69: /* ClassDeclaration: ClassHeader Interfaces ClassBody  */
-#line 644 "cmDependsJavaParser.y"
+#line 647 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(2);
@@ -3074,11 +3077,11 @@
   yyGetParser->SetCurrentCombine("");
   yyGetParser->EndClass();
 }
-#line 3078 "cmDependsJavaParser.cxx"
+#line 3081 "cmDependsJavaParser.cxx"
     break;
 
   case 70: /* ClassDeclaration: ClassHeader Super ClassBody  */
-#line 653 "cmDependsJavaParser.y"
+#line 656 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3086,11 +3089,11 @@
   yyGetParser->SetCurrentCombine("");
   yyGetParser->EndClass();
 }
-#line 3090 "cmDependsJavaParser.cxx"
+#line 3093 "cmDependsJavaParser.cxx"
     break;
 
   case 71: /* ClassDeclaration: ClassHeader Super Interfaces ClassBody  */
-#line 662 "cmDependsJavaParser.y"
+#line 665 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -3098,226 +3101,226 @@
   yyGetParser->SetCurrentCombine("");
   yyGetParser->EndClass();
 }
-#line 3102 "cmDependsJavaParser.cxx"
+#line 3105 "cmDependsJavaParser.cxx"
     break;
 
   case 72: /* Modifiersopt: %empty  */
-#line 671 "cmDependsJavaParser.y"
+#line 674 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3112 "cmDependsJavaParser.cxx"
+#line 3115 "cmDependsJavaParser.cxx"
     break;
 
   case 73: /* Modifiersopt: Modifiers  */
-#line 678 "cmDependsJavaParser.y"
+#line 681 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3123 "cmDependsJavaParser.cxx"
+#line 3126 "cmDependsJavaParser.cxx"
     break;
 
   case 74: /* Super: jp_EXTENDS ClassType  */
-#line 687 "cmDependsJavaParser.y"
+#line 690 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3134 "cmDependsJavaParser.cxx"
+#line 3137 "cmDependsJavaParser.cxx"
     break;
 
   case 75: /* Interfaces: jp_IMPLEMENTS InterfaceTypeList  */
-#line 696 "cmDependsJavaParser.y"
+#line 699 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3145 "cmDependsJavaParser.cxx"
+#line 3148 "cmDependsJavaParser.cxx"
     break;
 
   case 76: /* InterfaceTypeList: InterfaceType  */
-#line 705 "cmDependsJavaParser.y"
+#line 708 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3156 "cmDependsJavaParser.cxx"
+#line 3159 "cmDependsJavaParser.cxx"
     break;
 
   case 77: /* InterfaceTypeList: InterfaceTypeList jp_COMMA InterfaceType  */
-#line 713 "cmDependsJavaParser.y"
+#line 716 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3167 "cmDependsJavaParser.cxx"
+#line 3170 "cmDependsJavaParser.cxx"
     break;
 
   case 78: /* ClassBody: jp_CURLYSTART ClassBodyDeclarations jp_CURLYEND  */
-#line 722 "cmDependsJavaParser.y"
+#line 725 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3178 "cmDependsJavaParser.cxx"
+#line 3181 "cmDependsJavaParser.cxx"
     break;
 
   case 79: /* ClassBodyDeclarations: %empty  */
-#line 730 "cmDependsJavaParser.y"
+#line 733 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3188 "cmDependsJavaParser.cxx"
+#line 3191 "cmDependsJavaParser.cxx"
     break;
 
   case 80: /* ClassBodyDeclarations: ClassBodyDeclarations ClassBodyDeclaration  */
-#line 737 "cmDependsJavaParser.y"
+#line 740 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3199 "cmDependsJavaParser.cxx"
+#line 3202 "cmDependsJavaParser.cxx"
     break;
 
   case 81: /* ClassBodyDeclaration: ClassMemberDeclaration  */
-#line 746 "cmDependsJavaParser.y"
+#line 749 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3210 "cmDependsJavaParser.cxx"
+#line 3213 "cmDependsJavaParser.cxx"
     break;
 
   case 82: /* ClassBodyDeclaration: StaticInitializer  */
-#line 754 "cmDependsJavaParser.y"
+#line 757 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3221 "cmDependsJavaParser.cxx"
+#line 3224 "cmDependsJavaParser.cxx"
     break;
 
   case 83: /* ClassBodyDeclaration: ConstructorDeclaration  */
-#line 762 "cmDependsJavaParser.y"
+#line 765 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3232 "cmDependsJavaParser.cxx"
+#line 3235 "cmDependsJavaParser.cxx"
     break;
 
   case 84: /* ClassBodyDeclaration: TypeDeclaration  */
-#line 770 "cmDependsJavaParser.y"
+#line 773 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3243 "cmDependsJavaParser.cxx"
+#line 3246 "cmDependsJavaParser.cxx"
     break;
 
   case 85: /* ClassMemberDeclaration: FieldDeclaration  */
-#line 779 "cmDependsJavaParser.y"
+#line 782 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3254 "cmDependsJavaParser.cxx"
+#line 3257 "cmDependsJavaParser.cxx"
     break;
 
   case 86: /* ClassMemberDeclaration: MethodDeclaration  */
-#line 787 "cmDependsJavaParser.y"
+#line 790 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3265 "cmDependsJavaParser.cxx"
+#line 3268 "cmDependsJavaParser.cxx"
     break;
 
   case 87: /* FieldDeclaration: Modifiersopt Type VariableDeclarators jp_SEMICOL  */
-#line 796 "cmDependsJavaParser.y"
+#line 799 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
 }
-#line 3273 "cmDependsJavaParser.cxx"
+#line 3276 "cmDependsJavaParser.cxx"
     break;
 
   case 88: /* VariableDeclarators: VariableDeclarator  */
-#line 802 "cmDependsJavaParser.y"
+#line 805 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3284 "cmDependsJavaParser.cxx"
+#line 3287 "cmDependsJavaParser.cxx"
     break;
 
   case 89: /* VariableDeclarators: VariableDeclarators jp_COMMA VariableDeclarator  */
-#line 810 "cmDependsJavaParser.y"
+#line 813 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3295 "cmDependsJavaParser.cxx"
+#line 3298 "cmDependsJavaParser.cxx"
     break;
 
   case 90: /* VariableDeclarator: VariableDeclaratorId  */
-#line 819 "cmDependsJavaParser.y"
+#line 822 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3306 "cmDependsJavaParser.cxx"
+#line 3309 "cmDependsJavaParser.cxx"
     break;
 
   case 91: /* VariableDeclarator: VariableDeclaratorId jp_EQUALS VariableInitializer  */
-#line 827 "cmDependsJavaParser.y"
+#line 830 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3317 "cmDependsJavaParser.cxx"
+#line 3320 "cmDependsJavaParser.cxx"
     break;
 
   case 92: /* VariableDeclaratorId: Identifier  */
-#line 836 "cmDependsJavaParser.y"
+#line 839 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -3325,77 +3328,77 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3329 "cmDependsJavaParser.cxx"
+#line 3332 "cmDependsJavaParser.cxx"
     break;
 
   case 93: /* VariableDeclaratorId: VariableDeclaratorId jp_BRACKETSTART jp_BRACKETEND  */
-#line 845 "cmDependsJavaParser.y"
+#line 848 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3340 "cmDependsJavaParser.cxx"
+#line 3343 "cmDependsJavaParser.cxx"
     break;
 
   case 94: /* VariableInitializer: Expression  */
-#line 854 "cmDependsJavaParser.y"
+#line 857 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3351 "cmDependsJavaParser.cxx"
+#line 3354 "cmDependsJavaParser.cxx"
     break;
 
   case 95: /* VariableInitializer: ArrayInitializer  */
-#line 862 "cmDependsJavaParser.y"
+#line 865 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3362 "cmDependsJavaParser.cxx"
+#line 3365 "cmDependsJavaParser.cxx"
     break;
 
   case 96: /* MethodDeclaration: MethodHeader jp_SEMICOL  */
-#line 871 "cmDependsJavaParser.y"
+#line 874 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3373 "cmDependsJavaParser.cxx"
+#line 3376 "cmDependsJavaParser.cxx"
     break;
 
   case 97: /* MethodDeclaration: MethodHeader MethodBody  */
-#line 879 "cmDependsJavaParser.y"
+#line 882 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3384 "cmDependsJavaParser.cxx"
+#line 3387 "cmDependsJavaParser.cxx"
     break;
 
   case 98: /* MethodDeclaration: MethodHeader MethodBody jp_SEMICOL  */
-#line 887 "cmDependsJavaParser.y"
+#line 890 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3395 "cmDependsJavaParser.cxx"
+#line 3398 "cmDependsJavaParser.cxx"
     break;
 
   case 99: /* MethodHeader: Modifiersopt Type MethodDeclarator Throwsopt  */
-#line 896 "cmDependsJavaParser.y"
+#line 899 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -3403,11 +3406,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3407 "cmDependsJavaParser.cxx"
+#line 3410 "cmDependsJavaParser.cxx"
     break;
 
   case 100: /* MethodHeader: Modifiersopt jp_VOID MethodDeclarator Throwsopt  */
-#line 905 "cmDependsJavaParser.y"
+#line 908 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -3415,22 +3418,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3419 "cmDependsJavaParser.cxx"
+#line 3422 "cmDependsJavaParser.cxx"
     break;
 
   case 101: /* Throwsopt: %empty  */
-#line 914 "cmDependsJavaParser.y"
+#line 917 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3430 "cmDependsJavaParser.cxx"
+#line 3433 "cmDependsJavaParser.cxx"
     break;
 
   case 102: /* Throwsopt: Throws  */
-#line 922 "cmDependsJavaParser.y"
+#line 925 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3438,11 +3441,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3442 "cmDependsJavaParser.cxx"
+#line 3445 "cmDependsJavaParser.cxx"
     break;
 
   case 103: /* MethodDeclarator: Identifier jp_PARESTART FormalParameterListopt jp_PAREEND  */
-#line 932 "cmDependsJavaParser.y"
+#line 935 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -3451,40 +3454,40 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3455 "cmDependsJavaParser.cxx"
+#line 3458 "cmDependsJavaParser.cxx"
     break;
 
   case 104: /* MethodDeclarator: MethodDeclarator jp_BRACKETSTART jp_BRACKETEND  */
-#line 942 "cmDependsJavaParser.y"
+#line 945 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
 
 }
-#line 3464 "cmDependsJavaParser.cxx"
+#line 3467 "cmDependsJavaParser.cxx"
     break;
 
   case 105: /* FormalParameterListopt: %empty  */
-#line 948 "cmDependsJavaParser.y"
+#line 951 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3475 "cmDependsJavaParser.cxx"
+#line 3478 "cmDependsJavaParser.cxx"
     break;
 
   case 107: /* FormalParameterList: FormalParameter  */
-#line 959 "cmDependsJavaParser.y"
+#line 962 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
 
 }
-#line 3484 "cmDependsJavaParser.cxx"
+#line 3487 "cmDependsJavaParser.cxx"
     break;
 
   case 108: /* FormalParameterList: FormalParameterList jp_COMMA FormalParameter  */
-#line 965 "cmDependsJavaParser.y"
+#line 968 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3492,11 +3495,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3496 "cmDependsJavaParser.cxx"
+#line 3499 "cmDependsJavaParser.cxx"
     break;
 
   case 109: /* FormalParameter: Modifiersopt Type VariableDeclaratorId  */
-#line 975 "cmDependsJavaParser.y"
+#line 978 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3504,11 +3507,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3508 "cmDependsJavaParser.cxx"
+#line 3511 "cmDependsJavaParser.cxx"
     break;
 
   case 110: /* Throws: jp_THROWS ClassTypeList  */
-#line 985 "cmDependsJavaParser.y"
+#line 988 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3516,20 +3519,20 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3520 "cmDependsJavaParser.cxx"
+#line 3523 "cmDependsJavaParser.cxx"
     break;
 
   case 111: /* ClassTypeList: ClassType  */
-#line 995 "cmDependsJavaParser.y"
+#line 998 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
 
 }
-#line 3529 "cmDependsJavaParser.cxx"
+#line 3532 "cmDependsJavaParser.cxx"
     break;
 
   case 112: /* ClassTypeList: ClassTypeList jp_COMMA ClassType  */
-#line 1001 "cmDependsJavaParser.y"
+#line 1004 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3537,11 +3540,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3541 "cmDependsJavaParser.cxx"
+#line 3544 "cmDependsJavaParser.cxx"
     break;
 
   case 113: /* MethodBody: Block  */
-#line 1011 "cmDependsJavaParser.y"
+#line 1014 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3549,11 +3552,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3553 "cmDependsJavaParser.cxx"
+#line 3556 "cmDependsJavaParser.cxx"
     break;
 
   case 114: /* StaticInitializer: jp_STATIC Block  */
-#line 1021 "cmDependsJavaParser.y"
+#line 1024 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3561,11 +3564,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3565 "cmDependsJavaParser.cxx"
+#line 3568 "cmDependsJavaParser.cxx"
     break;
 
   case 115: /* ConstructorDeclaration: Modifiersopt ConstructorDeclarator Throwsopt ConstructorBody  */
-#line 1031 "cmDependsJavaParser.y"
+#line 1034 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -3573,11 +3576,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3577 "cmDependsJavaParser.cxx"
+#line 3580 "cmDependsJavaParser.cxx"
     break;
 
   case 116: /* ConstructorDeclaration: Modifiersopt ConstructorDeclarator Throwsopt ConstructorBody jp_SEMICOL  */
-#line 1040 "cmDependsJavaParser.y"
+#line 1043 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -3585,11 +3588,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3589 "cmDependsJavaParser.cxx"
+#line 3592 "cmDependsJavaParser.cxx"
     break;
 
   case 117: /* ConstructorDeclarator: SimpleName jp_PARESTART FormalParameterListopt jp_PAREEND  */
-#line 1050 "cmDependsJavaParser.y"
+#line 1053 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -3598,11 +3601,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3602 "cmDependsJavaParser.cxx"
+#line 3605 "cmDependsJavaParser.cxx"
     break;
 
   case 118: /* ConstructorBody: jp_CURLYSTART ExplicitConstructorInvocationopt BlockStatementsopt jp_CURLYEND  */
-#line 1061 "cmDependsJavaParser.y"
+#line 1064 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -3610,22 +3613,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3614 "cmDependsJavaParser.cxx"
+#line 3617 "cmDependsJavaParser.cxx"
     break;
 
   case 119: /* ExplicitConstructorInvocationopt: %empty  */
-#line 1070 "cmDependsJavaParser.y"
+#line 1073 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3625 "cmDependsJavaParser.cxx"
+#line 3628 "cmDependsJavaParser.cxx"
     break;
 
   case 120: /* ExplicitConstructorInvocationopt: ExplicitConstructorInvocationopt ExplicitConstructorInvocation  */
-#line 1078 "cmDependsJavaParser.y"
+#line 1081 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3633,11 +3636,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3637 "cmDependsJavaParser.cxx"
+#line 3640 "cmDependsJavaParser.cxx"
     break;
 
   case 121: /* ExplicitConstructorInvocation: jp_THIS jp_PARESTART ArgumentListopt jp_PAREEND jp_SEMICOL  */
-#line 1088 "cmDependsJavaParser.y"
+#line 1091 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -3645,11 +3648,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3649 "cmDependsJavaParser.cxx"
+#line 3652 "cmDependsJavaParser.cxx"
     break;
 
   case 122: /* ExplicitConstructorInvocation: jp_SUPER jp_PARESTART ArgumentListopt jp_PAREEND jp_SEMICOL  */
-#line 1097 "cmDependsJavaParser.y"
+#line 1100 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -3657,22 +3660,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3661 "cmDependsJavaParser.cxx"
+#line 3664 "cmDependsJavaParser.cxx"
     break;
 
   case 123: /* InterfaceHeader: Modifiersopt jp_INTERFACE Identifier  */
-#line 1107 "cmDependsJavaParser.y"
+#line 1110 "cmDependsJavaParser.y"
 {
   yyGetParser->StartClass((yyvsp[0].str));
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
   jpCheckEmpty(3);
 }
-#line 3672 "cmDependsJavaParser.cxx"
+#line 3675 "cmDependsJavaParser.cxx"
     break;
 
   case 124: /* InterfaceDeclaration: InterfaceHeader ExtendsInterfacesopt InterfaceBody  */
-#line 1116 "cmDependsJavaParser.y"
+#line 1119 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3680,21 +3683,21 @@
   yyGetParser->SetCurrentCombine("");
   yyGetParser->EndClass();
 }
-#line 3684 "cmDependsJavaParser.cxx"
+#line 3687 "cmDependsJavaParser.cxx"
     break;
 
   case 125: /* ExtendsInterfacesopt: %empty  */
-#line 1125 "cmDependsJavaParser.y"
+#line 1128 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3694 "cmDependsJavaParser.cxx"
+#line 3697 "cmDependsJavaParser.cxx"
     break;
 
   case 126: /* ExtendsInterfacesopt: ExtendsInterfaces  */
-#line 1132 "cmDependsJavaParser.y"
+#line 1135 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3702,11 +3705,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3706 "cmDependsJavaParser.cxx"
+#line 3709 "cmDependsJavaParser.cxx"
     break;
 
   case 127: /* ExtendsInterfaces: jp_EXTENDS InterfaceType  */
-#line 1142 "cmDependsJavaParser.y"
+#line 1145 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3714,11 +3717,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3718 "cmDependsJavaParser.cxx"
+#line 3721 "cmDependsJavaParser.cxx"
     break;
 
   case 128: /* ExtendsInterfaces: ExtendsInterfaces jp_COMMA InterfaceType  */
-#line 1151 "cmDependsJavaParser.y"
+#line 1154 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3726,11 +3729,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3730 "cmDependsJavaParser.cxx"
+#line 3733 "cmDependsJavaParser.cxx"
     break;
 
   case 129: /* InterfaceBody: jp_CURLYSTART InterfaceMemberDeclarations jp_CURLYEND  */
-#line 1161 "cmDependsJavaParser.y"
+#line 1164 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3738,33 +3741,33 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3742 "cmDependsJavaParser.cxx"
+#line 3745 "cmDependsJavaParser.cxx"
     break;
 
   case 130: /* InterfaceMemberDeclarations: %empty  */
-#line 1170 "cmDependsJavaParser.y"
+#line 1173 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3753 "cmDependsJavaParser.cxx"
+#line 3756 "cmDependsJavaParser.cxx"
     break;
 
   case 131: /* InterfaceMemberDeclarations: InterfaceMemberDeclarations InterfaceMemberDeclaration  */
-#line 1178 "cmDependsJavaParser.y"
+#line 1181 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3764 "cmDependsJavaParser.cxx"
+#line 3767 "cmDependsJavaParser.cxx"
     break;
 
   case 132: /* InterfaceMemberDeclaration: ConstantDeclaration  */
-#line 1187 "cmDependsJavaParser.y"
+#line 1190 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3772,11 +3775,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3776 "cmDependsJavaParser.cxx"
+#line 3779 "cmDependsJavaParser.cxx"
     break;
 
   case 133: /* InterfaceMemberDeclaration: AbstractMethodDeclaration  */
-#line 1196 "cmDependsJavaParser.y"
+#line 1199 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3784,11 +3787,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3788 "cmDependsJavaParser.cxx"
+#line 3791 "cmDependsJavaParser.cxx"
     break;
 
   case 134: /* InterfaceMemberDeclaration: ClassDeclaration  */
-#line 1205 "cmDependsJavaParser.y"
+#line 1208 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3796,22 +3799,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3800 "cmDependsJavaParser.cxx"
+#line 3803 "cmDependsJavaParser.cxx"
     break;
 
   case 135: /* InterfaceMemberDeclaration: ClassDeclaration jp_SEMICOL  */
-#line 1214 "cmDependsJavaParser.y"
+#line 1217 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3811 "cmDependsJavaParser.cxx"
+#line 3814 "cmDependsJavaParser.cxx"
     break;
 
   case 136: /* InterfaceMemberDeclaration: InterfaceDeclaration  */
-#line 1222 "cmDependsJavaParser.y"
+#line 1225 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3819,22 +3822,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3823 "cmDependsJavaParser.cxx"
+#line 3826 "cmDependsJavaParser.cxx"
     break;
 
   case 137: /* InterfaceMemberDeclaration: InterfaceDeclaration jp_SEMICOL  */
-#line 1231 "cmDependsJavaParser.y"
+#line 1234 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3834 "cmDependsJavaParser.cxx"
+#line 3837 "cmDependsJavaParser.cxx"
     break;
 
   case 138: /* ConstantDeclaration: FieldDeclaration  */
-#line 1240 "cmDependsJavaParser.y"
+#line 1243 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3842,11 +3845,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3846 "cmDependsJavaParser.cxx"
+#line 3849 "cmDependsJavaParser.cxx"
     break;
 
   case 139: /* AbstractMethodDeclaration: MethodHeader Semicols  */
-#line 1250 "cmDependsJavaParser.y"
+#line 1253 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3854,11 +3857,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3858 "cmDependsJavaParser.cxx"
+#line 3861 "cmDependsJavaParser.cxx"
     break;
 
   case 140: /* Semicols: jp_SEMICOL  */
-#line 1260 "cmDependsJavaParser.y"
+#line 1263 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3866,11 +3869,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3870 "cmDependsJavaParser.cxx"
+#line 3873 "cmDependsJavaParser.cxx"
     break;
 
   case 141: /* Semicols: Semicols jp_SEMICOL  */
-#line 1269 "cmDependsJavaParser.y"
+#line 1272 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3878,11 +3881,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3882 "cmDependsJavaParser.cxx"
+#line 3885 "cmDependsJavaParser.cxx"
     break;
 
   case 142: /* ArrayInitializer: jp_CURLYSTART VariableInitializersOptional jp_CURLYEND  */
-#line 1279 "cmDependsJavaParser.y"
+#line 1282 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3890,22 +3893,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3894 "cmDependsJavaParser.cxx"
+#line 3897 "cmDependsJavaParser.cxx"
     break;
 
   case 143: /* VariableInitializersOptional: %empty  */
-#line 1288 "cmDependsJavaParser.y"
+#line 1291 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3905 "cmDependsJavaParser.cxx"
+#line 3908 "cmDependsJavaParser.cxx"
     break;
 
   case 144: /* VariableInitializersOptional: VariableInitializers  */
-#line 1296 "cmDependsJavaParser.y"
+#line 1299 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3913,11 +3916,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3917 "cmDependsJavaParser.cxx"
+#line 3920 "cmDependsJavaParser.cxx"
     break;
 
   case 145: /* VariableInitializersOptional: VariableInitializers jp_COMMA  */
-#line 1305 "cmDependsJavaParser.y"
+#line 1308 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3925,11 +3928,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3929 "cmDependsJavaParser.cxx"
+#line 3932 "cmDependsJavaParser.cxx"
     break;
 
   case 146: /* VariableInitializers: VariableInitializer  */
-#line 1315 "cmDependsJavaParser.y"
+#line 1318 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3937,11 +3940,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3941 "cmDependsJavaParser.cxx"
+#line 3944 "cmDependsJavaParser.cxx"
     break;
 
   case 147: /* VariableInitializers: VariableInitializers jp_COMMA VariableInitializer  */
-#line 1324 "cmDependsJavaParser.y"
+#line 1327 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3949,33 +3952,33 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3953 "cmDependsJavaParser.cxx"
+#line 3956 "cmDependsJavaParser.cxx"
     break;
 
   case 148: /* Block: jp_CURLYSTART BlockStatementsopt jp_CURLYEND  */
-#line 1334 "cmDependsJavaParser.y"
+#line 1337 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3964 "cmDependsJavaParser.cxx"
+#line 3967 "cmDependsJavaParser.cxx"
     break;
 
   case 149: /* BlockStatementsopt: %empty  */
-#line 1342 "cmDependsJavaParser.y"
+#line 1345 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3975 "cmDependsJavaParser.cxx"
+#line 3978 "cmDependsJavaParser.cxx"
     break;
 
   case 150: /* BlockStatementsopt: BlockStatements  */
-#line 1350 "cmDependsJavaParser.y"
+#line 1353 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3983,11 +3986,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3987 "cmDependsJavaParser.cxx"
+#line 3990 "cmDependsJavaParser.cxx"
     break;
 
   case 151: /* BlockStatements: BlockStatement  */
-#line 1360 "cmDependsJavaParser.y"
+#line 1363 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3995,11 +3998,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3999 "cmDependsJavaParser.cxx"
+#line 4002 "cmDependsJavaParser.cxx"
     break;
 
   case 152: /* BlockStatements: BlockStatements BlockStatement  */
-#line 1369 "cmDependsJavaParser.y"
+#line 1372 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(2);
@@ -4007,11 +4010,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4011 "cmDependsJavaParser.cxx"
+#line 4014 "cmDependsJavaParser.cxx"
     break;
 
   case 153: /* BlockStatement: LocalVariableDeclarationStatement  */
-#line 1379 "cmDependsJavaParser.y"
+#line 1382 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4019,11 +4022,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4023 "cmDependsJavaParser.cxx"
+#line 4026 "cmDependsJavaParser.cxx"
     break;
 
   case 154: /* BlockStatement: Statement  */
-#line 1388 "cmDependsJavaParser.y"
+#line 1391 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4031,11 +4034,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4035 "cmDependsJavaParser.cxx"
+#line 4038 "cmDependsJavaParser.cxx"
     break;
 
   case 155: /* BlockStatement: ClassDeclaration  */
-#line 1397 "cmDependsJavaParser.y"
+#line 1400 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4043,11 +4046,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4047 "cmDependsJavaParser.cxx"
+#line 4050 "cmDependsJavaParser.cxx"
     break;
 
   case 156: /* LocalVariableDeclarationStatement: LocalVariableDeclaration jp_SEMICOL  */
-#line 1407 "cmDependsJavaParser.y"
+#line 1410 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(2);
@@ -4055,11 +4058,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4059 "cmDependsJavaParser.cxx"
+#line 4062 "cmDependsJavaParser.cxx"
     break;
 
   case 157: /* LocalVariableDeclaration: Modifiers Type VariableDeclarators  */
-#line 1417 "cmDependsJavaParser.y"
+#line 1420 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(3);
@@ -4067,11 +4070,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4071 "cmDependsJavaParser.cxx"
+#line 4074 "cmDependsJavaParser.cxx"
     break;
 
   case 158: /* LocalVariableDeclaration: Type VariableDeclarators  */
-#line 1426 "cmDependsJavaParser.y"
+#line 1429 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(2);
@@ -4079,11 +4082,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4083 "cmDependsJavaParser.cxx"
+#line 4086 "cmDependsJavaParser.cxx"
     break;
 
   case 159: /* Statement: StatementWithoutTrailingSubstatement  */
-#line 1436 "cmDependsJavaParser.y"
+#line 1439 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4091,11 +4094,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4095 "cmDependsJavaParser.cxx"
+#line 4098 "cmDependsJavaParser.cxx"
     break;
 
   case 160: /* Statement: LabeledStatement  */
-#line 1445 "cmDependsJavaParser.y"
+#line 1448 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4103,11 +4106,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4107 "cmDependsJavaParser.cxx"
+#line 4110 "cmDependsJavaParser.cxx"
     break;
 
   case 161: /* Statement: IfThenStatement  */
-#line 1454 "cmDependsJavaParser.y"
+#line 1457 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4115,11 +4118,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4119 "cmDependsJavaParser.cxx"
+#line 4122 "cmDependsJavaParser.cxx"
     break;
 
   case 162: /* Statement: IfThenElseStatement  */
-#line 1463 "cmDependsJavaParser.y"
+#line 1466 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4127,11 +4130,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4131 "cmDependsJavaParser.cxx"
+#line 4134 "cmDependsJavaParser.cxx"
     break;
 
   case 163: /* Statement: WhileStatement  */
-#line 1472 "cmDependsJavaParser.y"
+#line 1475 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4139,11 +4142,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4143 "cmDependsJavaParser.cxx"
+#line 4146 "cmDependsJavaParser.cxx"
     break;
 
   case 164: /* Statement: ForStatement  */
-#line 1481 "cmDependsJavaParser.y"
+#line 1484 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4151,11 +4154,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4155 "cmDependsJavaParser.cxx"
+#line 4158 "cmDependsJavaParser.cxx"
     break;
 
   case 165: /* StatementNoShortIf: StatementWithoutTrailingSubstatement  */
-#line 1491 "cmDependsJavaParser.y"
+#line 1494 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4163,11 +4166,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4167 "cmDependsJavaParser.cxx"
+#line 4170 "cmDependsJavaParser.cxx"
     break;
 
   case 166: /* StatementNoShortIf: LabeledStatementNoShortIf  */
-#line 1500 "cmDependsJavaParser.y"
+#line 1503 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4175,11 +4178,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4179 "cmDependsJavaParser.cxx"
+#line 4182 "cmDependsJavaParser.cxx"
     break;
 
   case 167: /* StatementNoShortIf: IfThenElseStatementNoShortIf  */
-#line 1509 "cmDependsJavaParser.y"
+#line 1512 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4187,11 +4190,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4191 "cmDependsJavaParser.cxx"
+#line 4194 "cmDependsJavaParser.cxx"
     break;
 
   case 168: /* StatementNoShortIf: WhileStatementNoShortIf  */
-#line 1518 "cmDependsJavaParser.y"
+#line 1521 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4199,11 +4202,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4203 "cmDependsJavaParser.cxx"
+#line 4206 "cmDependsJavaParser.cxx"
     break;
 
   case 169: /* StatementNoShortIf: ForStatementNoShortIf  */
-#line 1527 "cmDependsJavaParser.y"
+#line 1530 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4211,11 +4214,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4215 "cmDependsJavaParser.cxx"
+#line 4218 "cmDependsJavaParser.cxx"
     break;
 
   case 170: /* StatementWithoutTrailingSubstatement: Block  */
-#line 1537 "cmDependsJavaParser.y"
+#line 1540 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4223,11 +4226,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4227 "cmDependsJavaParser.cxx"
+#line 4230 "cmDependsJavaParser.cxx"
     break;
 
   case 171: /* StatementWithoutTrailingSubstatement: EmptyStatement  */
-#line 1546 "cmDependsJavaParser.y"
+#line 1549 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4235,11 +4238,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4239 "cmDependsJavaParser.cxx"
+#line 4242 "cmDependsJavaParser.cxx"
     break;
 
   case 172: /* StatementWithoutTrailingSubstatement: ExpressionStatement  */
-#line 1555 "cmDependsJavaParser.y"
+#line 1558 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4247,11 +4250,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4251 "cmDependsJavaParser.cxx"
+#line 4254 "cmDependsJavaParser.cxx"
     break;
 
   case 173: /* StatementWithoutTrailingSubstatement: SwitchStatement  */
-#line 1564 "cmDependsJavaParser.y"
+#line 1567 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4259,11 +4262,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4263 "cmDependsJavaParser.cxx"
+#line 4266 "cmDependsJavaParser.cxx"
     break;
 
   case 174: /* StatementWithoutTrailingSubstatement: DoStatement  */
-#line 1573 "cmDependsJavaParser.y"
+#line 1576 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4271,11 +4274,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4275 "cmDependsJavaParser.cxx"
+#line 4278 "cmDependsJavaParser.cxx"
     break;
 
   case 175: /* StatementWithoutTrailingSubstatement: BreakStatement  */
-#line 1582 "cmDependsJavaParser.y"
+#line 1585 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4283,11 +4286,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4287 "cmDependsJavaParser.cxx"
+#line 4290 "cmDependsJavaParser.cxx"
     break;
 
   case 176: /* StatementWithoutTrailingSubstatement: ContinueStatement  */
-#line 1591 "cmDependsJavaParser.y"
+#line 1594 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4295,11 +4298,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4299 "cmDependsJavaParser.cxx"
+#line 4302 "cmDependsJavaParser.cxx"
     break;
 
   case 177: /* StatementWithoutTrailingSubstatement: ReturnStatement  */
-#line 1600 "cmDependsJavaParser.y"
+#line 1603 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4307,11 +4310,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4311 "cmDependsJavaParser.cxx"
+#line 4314 "cmDependsJavaParser.cxx"
     break;
 
   case 178: /* StatementWithoutTrailingSubstatement: SynchronizedStatement  */
-#line 1609 "cmDependsJavaParser.y"
+#line 1612 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4319,11 +4322,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4323 "cmDependsJavaParser.cxx"
+#line 4326 "cmDependsJavaParser.cxx"
     break;
 
   case 179: /* StatementWithoutTrailingSubstatement: ThrowStatement  */
-#line 1618 "cmDependsJavaParser.y"
+#line 1621 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4331,11 +4334,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4335 "cmDependsJavaParser.cxx"
+#line 4338 "cmDependsJavaParser.cxx"
     break;
 
   case 180: /* StatementWithoutTrailingSubstatement: TryStatement  */
-#line 1627 "cmDependsJavaParser.y"
+#line 1630 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4343,11 +4346,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4347 "cmDependsJavaParser.cxx"
+#line 4350 "cmDependsJavaParser.cxx"
     break;
 
   case 181: /* StatementWithoutTrailingSubstatement: AssertStatement  */
-#line 1636 "cmDependsJavaParser.y"
+#line 1639 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4355,11 +4358,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4359 "cmDependsJavaParser.cxx"
+#line 4362 "cmDependsJavaParser.cxx"
     break;
 
   case 182: /* EmptyStatement: jp_SEMICOL  */
-#line 1646 "cmDependsJavaParser.y"
+#line 1649 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4367,11 +4370,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4371 "cmDependsJavaParser.cxx"
+#line 4374 "cmDependsJavaParser.cxx"
     break;
 
   case 183: /* LabeledStatement: Identifier jp_COLON Statement  */
-#line 1656 "cmDependsJavaParser.y"
+#line 1659 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[-2].str)));
@@ -4380,11 +4383,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4384 "cmDependsJavaParser.cxx"
+#line 4387 "cmDependsJavaParser.cxx"
     break;
 
   case 184: /* LabeledStatementNoShortIf: Identifier jp_COLON StatementNoShortIf  */
-#line 1667 "cmDependsJavaParser.y"
+#line 1670 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4392,11 +4395,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4396 "cmDependsJavaParser.cxx"
+#line 4399 "cmDependsJavaParser.cxx"
     break;
 
   case 185: /* ExpressionStatement: StatementExpression jp_SEMICOL  */
-#line 1677 "cmDependsJavaParser.y"
+#line 1680 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -4404,11 +4407,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4408 "cmDependsJavaParser.cxx"
+#line 4411 "cmDependsJavaParser.cxx"
     break;
 
   case 186: /* StatementExpression: Assignment  */
-#line 1687 "cmDependsJavaParser.y"
+#line 1690 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4416,11 +4419,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4420 "cmDependsJavaParser.cxx"
+#line 4423 "cmDependsJavaParser.cxx"
     break;
 
   case 187: /* StatementExpression: PreIncrementExpression  */
-#line 1696 "cmDependsJavaParser.y"
+#line 1699 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4428,11 +4431,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4432 "cmDependsJavaParser.cxx"
+#line 4435 "cmDependsJavaParser.cxx"
     break;
 
   case 188: /* StatementExpression: PreDecrementExpression  */
-#line 1705 "cmDependsJavaParser.y"
+#line 1708 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4440,11 +4443,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4444 "cmDependsJavaParser.cxx"
+#line 4447 "cmDependsJavaParser.cxx"
     break;
 
   case 189: /* StatementExpression: PostIncrementExpression  */
-#line 1714 "cmDependsJavaParser.y"
+#line 1717 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4452,11 +4455,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4456 "cmDependsJavaParser.cxx"
+#line 4459 "cmDependsJavaParser.cxx"
     break;
 
   case 190: /* StatementExpression: PostDecrementExpression  */
-#line 1723 "cmDependsJavaParser.y"
+#line 1726 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4464,11 +4467,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4468 "cmDependsJavaParser.cxx"
+#line 4471 "cmDependsJavaParser.cxx"
     break;
 
   case 191: /* StatementExpression: MethodInvocation  */
-#line 1732 "cmDependsJavaParser.y"
+#line 1735 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4476,11 +4479,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4480 "cmDependsJavaParser.cxx"
+#line 4483 "cmDependsJavaParser.cxx"
     break;
 
   case 192: /* StatementExpression: ClassInstanceCreationExpression  */
-#line 1741 "cmDependsJavaParser.y"
+#line 1744 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4488,11 +4491,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4492 "cmDependsJavaParser.cxx"
+#line 4495 "cmDependsJavaParser.cxx"
     break;
 
   case 193: /* IfThenStatement: jp_IF jp_PARESTART Expression jp_PAREEND Statement  */
-#line 1751 "cmDependsJavaParser.y"
+#line 1754 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -4500,11 +4503,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4504 "cmDependsJavaParser.cxx"
+#line 4507 "cmDependsJavaParser.cxx"
     break;
 
   case 194: /* IfThenElseStatement: jp_IF jp_PARESTART Expression jp_PAREEND StatementNoShortIf jp_ELSE Statement  */
-#line 1761 "cmDependsJavaParser.y"
+#line 1764 "cmDependsJavaParser.y"
 {
   jpElementStart(7);
   jpCheckEmpty(7);
@@ -4512,11 +4515,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4516 "cmDependsJavaParser.cxx"
+#line 4519 "cmDependsJavaParser.cxx"
     break;
 
   case 195: /* IfThenElseStatementNoShortIf: jp_IF jp_PARESTART Expression jp_PAREEND StatementNoShortIf jp_ELSE StatementNoShortIf  */
-#line 1771 "cmDependsJavaParser.y"
+#line 1774 "cmDependsJavaParser.y"
 {
   jpElementStart(7);
   jpCheckEmpty(7);
@@ -4524,40 +4527,40 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4528 "cmDependsJavaParser.cxx"
+#line 4531 "cmDependsJavaParser.cxx"
     break;
 
   case 196: /* SwitchStatement: jp_SWITCH jp_PARESTART Expression jp_PAREEND SwitchBlock  */
-#line 1781 "cmDependsJavaParser.y"
+#line 1784 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
 
 }
-#line 4537 "cmDependsJavaParser.cxx"
+#line 4540 "cmDependsJavaParser.cxx"
     break;
 
   case 197: /* SwitchBlock: jp_CURLYSTART SwitchBlockStatementGroups SwitchLabelsopt jp_CURLYEND  */
-#line 1788 "cmDependsJavaParser.y"
+#line 1791 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
 
 }
-#line 4546 "cmDependsJavaParser.cxx"
+#line 4549 "cmDependsJavaParser.cxx"
     break;
 
   case 198: /* SwitchLabelsopt: %empty  */
-#line 1794 "cmDependsJavaParser.y"
+#line 1797 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4557 "cmDependsJavaParser.cxx"
+#line 4560 "cmDependsJavaParser.cxx"
     break;
 
   case 199: /* SwitchLabelsopt: SwitchLabels  */
-#line 1802 "cmDependsJavaParser.y"
+#line 1805 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4565,22 +4568,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4569 "cmDependsJavaParser.cxx"
+#line 4572 "cmDependsJavaParser.cxx"
     break;
 
   case 200: /* SwitchBlockStatementGroups: %empty  */
-#line 1811 "cmDependsJavaParser.y"
+#line 1814 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4580 "cmDependsJavaParser.cxx"
+#line 4583 "cmDependsJavaParser.cxx"
     break;
 
   case 201: /* SwitchBlockStatementGroups: SwitchBlockStatementGroups SwitchBlockStatementGroup  */
-#line 1819 "cmDependsJavaParser.y"
+#line 1822 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -4588,11 +4591,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4592 "cmDependsJavaParser.cxx"
+#line 4595 "cmDependsJavaParser.cxx"
     break;
 
   case 202: /* SwitchBlockStatementGroup: SwitchLabels BlockStatements  */
-#line 1829 "cmDependsJavaParser.y"
+#line 1832 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -4600,11 +4603,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4604 "cmDependsJavaParser.cxx"
+#line 4607 "cmDependsJavaParser.cxx"
     break;
 
   case 203: /* SwitchLabels: SwitchLabel  */
-#line 1839 "cmDependsJavaParser.y"
+#line 1842 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4612,11 +4615,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4616 "cmDependsJavaParser.cxx"
+#line 4619 "cmDependsJavaParser.cxx"
     break;
 
   case 204: /* SwitchLabels: SwitchLabels SwitchLabel  */
-#line 1848 "cmDependsJavaParser.y"
+#line 1851 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -4624,11 +4627,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4628 "cmDependsJavaParser.cxx"
+#line 4631 "cmDependsJavaParser.cxx"
     break;
 
   case 205: /* SwitchLabel: jp_CASE ConstantExpression jp_COLON  */
-#line 1858 "cmDependsJavaParser.y"
+#line 1861 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4636,11 +4639,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4640 "cmDependsJavaParser.cxx"
+#line 4643 "cmDependsJavaParser.cxx"
     break;
 
   case 206: /* SwitchLabel: jp_DEFAULT jp_COLON  */
-#line 1867 "cmDependsJavaParser.y"
+#line 1870 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -4648,58 +4651,58 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4652 "cmDependsJavaParser.cxx"
+#line 4655 "cmDependsJavaParser.cxx"
     break;
 
   case 207: /* WhileStatement: jp_WHILE jp_PARESTART Expression jp_PAREEND Statement  */
-#line 1877 "cmDependsJavaParser.y"
+#line 1880 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
 
 }
-#line 4661 "cmDependsJavaParser.cxx"
+#line 4664 "cmDependsJavaParser.cxx"
     break;
 
   case 208: /* WhileStatementNoShortIf: jp_WHILE jp_PARESTART Expression jp_PAREEND StatementNoShortIf  */
-#line 1884 "cmDependsJavaParser.y"
+#line 1887 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
 
 }
-#line 4670 "cmDependsJavaParser.cxx"
+#line 4673 "cmDependsJavaParser.cxx"
     break;
 
   case 209: /* DoStatement: jp_DO Statement jp_WHILE jp_PARESTART Expression jp_PAREEND jp_SEMICOL  */
-#line 1891 "cmDependsJavaParser.y"
+#line 1894 "cmDependsJavaParser.y"
 {
   jpElementStart(7);
 
 }
-#line 4679 "cmDependsJavaParser.cxx"
+#line 4682 "cmDependsJavaParser.cxx"
     break;
 
   case 210: /* ForStatement: jp_FOR jp_PARESTART ForInitopt jp_SEMICOL Expressionopt jp_SEMICOL ForUpdateopt jp_PAREEND Statement  */
-#line 1899 "cmDependsJavaParser.y"
+#line 1902 "cmDependsJavaParser.y"
 {
   jpElementStart(9);
 
 }
-#line 4688 "cmDependsJavaParser.cxx"
+#line 4691 "cmDependsJavaParser.cxx"
     break;
 
   case 211: /* ForUpdateopt: %empty  */
-#line 1905 "cmDependsJavaParser.y"
+#line 1908 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4699 "cmDependsJavaParser.cxx"
+#line 4702 "cmDependsJavaParser.cxx"
     break;
 
   case 212: /* ForUpdateopt: ForUpdate  */
-#line 1913 "cmDependsJavaParser.y"
+#line 1916 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4707,22 +4710,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4711 "cmDependsJavaParser.cxx"
+#line 4714 "cmDependsJavaParser.cxx"
     break;
 
   case 213: /* ForInitopt: %empty  */
-#line 1922 "cmDependsJavaParser.y"
+#line 1925 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4722 "cmDependsJavaParser.cxx"
+#line 4725 "cmDependsJavaParser.cxx"
     break;
 
   case 214: /* ForInitopt: ForInit  */
-#line 1930 "cmDependsJavaParser.y"
+#line 1933 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4730,33 +4733,33 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4734 "cmDependsJavaParser.cxx"
+#line 4737 "cmDependsJavaParser.cxx"
     break;
 
   case 215: /* ForStatementNoShortIf: jp_FOR jp_PARESTART ForInitopt jp_SEMICOL Expressionopt jp_SEMICOL ForUpdateopt jp_PAREEND StatementNoShortIf  */
-#line 1941 "cmDependsJavaParser.y"
+#line 1944 "cmDependsJavaParser.y"
 {
   jpElementStart(9);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4745 "cmDependsJavaParser.cxx"
+#line 4748 "cmDependsJavaParser.cxx"
     break;
 
   case 216: /* Expressionopt: %empty  */
-#line 1949 "cmDependsJavaParser.y"
+#line 1952 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4756 "cmDependsJavaParser.cxx"
+#line 4759 "cmDependsJavaParser.cxx"
     break;
 
   case 217: /* Expressionopt: Expression  */
-#line 1957 "cmDependsJavaParser.y"
+#line 1960 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4764,11 +4767,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4768 "cmDependsJavaParser.cxx"
+#line 4771 "cmDependsJavaParser.cxx"
     break;
 
   case 218: /* ForInit: StatementExpressionList  */
-#line 1967 "cmDependsJavaParser.y"
+#line 1970 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4776,11 +4779,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4780 "cmDependsJavaParser.cxx"
+#line 4783 "cmDependsJavaParser.cxx"
     break;
 
   case 219: /* ForInit: LocalVariableDeclaration  */
-#line 1976 "cmDependsJavaParser.y"
+#line 1979 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4788,11 +4791,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4792 "cmDependsJavaParser.cxx"
+#line 4795 "cmDependsJavaParser.cxx"
     break;
 
   case 220: /* ForUpdate: StatementExpressionList  */
-#line 1986 "cmDependsJavaParser.y"
+#line 1989 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4800,11 +4803,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4804 "cmDependsJavaParser.cxx"
+#line 4807 "cmDependsJavaParser.cxx"
     break;
 
   case 221: /* StatementExpressionList: StatementExpression  */
-#line 1996 "cmDependsJavaParser.y"
+#line 1999 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4812,11 +4815,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4816 "cmDependsJavaParser.cxx"
+#line 4819 "cmDependsJavaParser.cxx"
     break;
 
   case 222: /* StatementExpressionList: StatementExpressionList jp_COMMA StatementExpression  */
-#line 2005 "cmDependsJavaParser.y"
+#line 2008 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4824,11 +4827,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4828 "cmDependsJavaParser.cxx"
+#line 4831 "cmDependsJavaParser.cxx"
     break;
 
   case 223: /* AssertStatement: jp_ASSERT Expression jp_SEMICOL  */
-#line 2015 "cmDependsJavaParser.y"
+#line 2018 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4836,11 +4839,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4840 "cmDependsJavaParser.cxx"
+#line 4843 "cmDependsJavaParser.cxx"
     break;
 
   case 224: /* AssertStatement: jp_ASSERT Expression jp_COLON Expression jp_SEMICOL  */
-#line 2024 "cmDependsJavaParser.y"
+#line 2027 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -4848,11 +4851,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4852 "cmDependsJavaParser.cxx"
+#line 4855 "cmDependsJavaParser.cxx"
     break;
 
   case 225: /* BreakStatement: jp_BREAK Identifieropt jp_SEMICOL  */
-#line 2034 "cmDependsJavaParser.y"
+#line 2037 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[-1].str)));
@@ -4861,31 +4864,31 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4865 "cmDependsJavaParser.cxx"
+#line 4868 "cmDependsJavaParser.cxx"
     break;
 
   case 226: /* Identifieropt: %empty  */
-#line 2044 "cmDependsJavaParser.y"
+#line 2047 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4876 "cmDependsJavaParser.cxx"
+#line 4879 "cmDependsJavaParser.cxx"
     break;
 
   case 227: /* Identifieropt: Identifier  */
-#line 2052 "cmDependsJavaParser.y"
+#line 2055 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
 
 }
-#line 4885 "cmDependsJavaParser.cxx"
+#line 4888 "cmDependsJavaParser.cxx"
     break;
 
   case 228: /* ContinueStatement: jp_CONTINUE Identifieropt jp_SEMICOL  */
-#line 2059 "cmDependsJavaParser.y"
+#line 2062 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[-1].str)));
@@ -4894,11 +4897,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4898 "cmDependsJavaParser.cxx"
+#line 4901 "cmDependsJavaParser.cxx"
     break;
 
   case 229: /* ReturnStatement: jp_RETURN Expressionopt jp_SEMICOL  */
-#line 2070 "cmDependsJavaParser.y"
+#line 2073 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4906,11 +4909,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4910 "cmDependsJavaParser.cxx"
+#line 4913 "cmDependsJavaParser.cxx"
     break;
 
   case 230: /* ThrowStatement: jp_THROW Expression jp_SEMICOL  */
-#line 2080 "cmDependsJavaParser.y"
+#line 2083 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4918,11 +4921,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4922 "cmDependsJavaParser.cxx"
+#line 4925 "cmDependsJavaParser.cxx"
     break;
 
   case 231: /* SynchronizedStatement: jp_SYNCHRONIZED jp_PARESTART Expression jp_PAREEND Block  */
-#line 2090 "cmDependsJavaParser.y"
+#line 2093 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -4930,11 +4933,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4934 "cmDependsJavaParser.cxx"
+#line 4937 "cmDependsJavaParser.cxx"
     break;
 
   case 232: /* TryStatement: jp_TRY Block Catches  */
-#line 2100 "cmDependsJavaParser.y"
+#line 2103 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4942,11 +4945,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4946 "cmDependsJavaParser.cxx"
+#line 4949 "cmDependsJavaParser.cxx"
     break;
 
   case 233: /* TryStatement: jp_TRY Block Catchesopt Finally  */
-#line 2109 "cmDependsJavaParser.y"
+#line 2112 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -4954,22 +4957,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4958 "cmDependsJavaParser.cxx"
+#line 4961 "cmDependsJavaParser.cxx"
     break;
 
   case 234: /* Catchesopt: %empty  */
-#line 2118 "cmDependsJavaParser.y"
+#line 2121 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4969 "cmDependsJavaParser.cxx"
+#line 4972 "cmDependsJavaParser.cxx"
     break;
 
   case 235: /* Catchesopt: Catches  */
-#line 2126 "cmDependsJavaParser.y"
+#line 2129 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4977,11 +4980,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4981 "cmDependsJavaParser.cxx"
+#line 4984 "cmDependsJavaParser.cxx"
     break;
 
   case 236: /* Catches: CatchClause  */
-#line 2136 "cmDependsJavaParser.y"
+#line 2139 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4989,11 +4992,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4993 "cmDependsJavaParser.cxx"
+#line 4996 "cmDependsJavaParser.cxx"
     break;
 
   case 237: /* Catches: Catches CatchClause  */
-#line 2145 "cmDependsJavaParser.y"
+#line 2148 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5001,20 +5004,20 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5005 "cmDependsJavaParser.cxx"
+#line 5008 "cmDependsJavaParser.cxx"
     break;
 
   case 238: /* CatchClause: jp_CATCH jp_PARESTART FormalParameter jp_PAREEND Block  */
-#line 2155 "cmDependsJavaParser.y"
+#line 2158 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
 
 }
-#line 5014 "cmDependsJavaParser.cxx"
+#line 5017 "cmDependsJavaParser.cxx"
     break;
 
   case 239: /* Finally: jp_FINALLY Block  */
-#line 2162 "cmDependsJavaParser.y"
+#line 2165 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5022,11 +5025,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5026 "cmDependsJavaParser.cxx"
+#line 5029 "cmDependsJavaParser.cxx"
     break;
 
   case 240: /* Primary: PrimaryNoNewArray  */
-#line 2172 "cmDependsJavaParser.y"
+#line 2175 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5034,11 +5037,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5038 "cmDependsJavaParser.cxx"
+#line 5041 "cmDependsJavaParser.cxx"
     break;
 
   case 241: /* Primary: ArrayCreationExpression  */
-#line 2181 "cmDependsJavaParser.y"
+#line 2184 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5046,11 +5049,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5050 "cmDependsJavaParser.cxx"
+#line 5053 "cmDependsJavaParser.cxx"
     break;
 
   case 242: /* PrimaryNoNewArray: Literal  */
-#line 2191 "cmDependsJavaParser.y"
+#line 2194 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5058,20 +5061,20 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5062 "cmDependsJavaParser.cxx"
+#line 5065 "cmDependsJavaParser.cxx"
     break;
 
   case 243: /* PrimaryNoNewArray: jp_THIS  */
-#line 2200 "cmDependsJavaParser.y"
+#line 2203 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
 
 }
-#line 5071 "cmDependsJavaParser.cxx"
+#line 5074 "cmDependsJavaParser.cxx"
     break;
 
   case 244: /* PrimaryNoNewArray: jp_PARESTART Expression jp_PAREEND  */
-#line 2206 "cmDependsJavaParser.y"
+#line 2209 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5079,11 +5082,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5083 "cmDependsJavaParser.cxx"
+#line 5086 "cmDependsJavaParser.cxx"
     break;
 
   case 245: /* PrimaryNoNewArray: ClassInstanceCreationExpression  */
-#line 2215 "cmDependsJavaParser.y"
+#line 2218 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5091,11 +5094,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5095 "cmDependsJavaParser.cxx"
+#line 5098 "cmDependsJavaParser.cxx"
     break;
 
   case 246: /* PrimaryNoNewArray: FieldAccess  */
-#line 2224 "cmDependsJavaParser.y"
+#line 2227 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5103,11 +5106,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5107 "cmDependsJavaParser.cxx"
+#line 5110 "cmDependsJavaParser.cxx"
     break;
 
   case 247: /* PrimaryNoNewArray: MethodInvocation  */
-#line 2233 "cmDependsJavaParser.y"
+#line 2236 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5115,11 +5118,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5119 "cmDependsJavaParser.cxx"
+#line 5122 "cmDependsJavaParser.cxx"
     break;
 
   case 248: /* PrimaryNoNewArray: ArrayAccess  */
-#line 2242 "cmDependsJavaParser.y"
+#line 2245 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5127,11 +5130,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5131 "cmDependsJavaParser.cxx"
+#line 5134 "cmDependsJavaParser.cxx"
     break;
 
   case 249: /* ClassInstanceCreationExpression: New ClassType jp_PARESTART ArgumentListopt jp_PAREEND ClassBodyOpt  */
-#line 2252 "cmDependsJavaParser.y"
+#line 2255 "cmDependsJavaParser.y"
 {
   jpElementStart(6);
   jpCheckEmpty(6);
@@ -5139,22 +5142,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5143 "cmDependsJavaParser.cxx"
+#line 5146 "cmDependsJavaParser.cxx"
     break;
 
   case 250: /* ClassBodyOpt: %empty  */
-#line 2261 "cmDependsJavaParser.y"
+#line 2264 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5154 "cmDependsJavaParser.cxx"
+#line 5157 "cmDependsJavaParser.cxx"
     break;
 
   case 251: /* ClassBodyOpt: ClassBody  */
-#line 2269 "cmDependsJavaParser.y"
+#line 2272 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5162,22 +5165,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5166 "cmDependsJavaParser.cxx"
+#line 5169 "cmDependsJavaParser.cxx"
     break;
 
   case 252: /* ArgumentListopt: %empty  */
-#line 2278 "cmDependsJavaParser.y"
+#line 2281 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5177 "cmDependsJavaParser.cxx"
+#line 5180 "cmDependsJavaParser.cxx"
     break;
 
   case 253: /* ArgumentListopt: ArgumentList  */
-#line 2286 "cmDependsJavaParser.y"
+#line 2289 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5185,11 +5188,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5189 "cmDependsJavaParser.cxx"
+#line 5192 "cmDependsJavaParser.cxx"
     break;
 
   case 254: /* ArgumentList: Expression  */
-#line 2296 "cmDependsJavaParser.y"
+#line 2299 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5197,11 +5200,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5201 "cmDependsJavaParser.cxx"
+#line 5204 "cmDependsJavaParser.cxx"
     break;
 
   case 255: /* ArgumentList: ArgumentList jp_COMMA Expression  */
-#line 2305 "cmDependsJavaParser.y"
+#line 2308 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5209,11 +5212,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5213 "cmDependsJavaParser.cxx"
+#line 5216 "cmDependsJavaParser.cxx"
     break;
 
   case 256: /* ArrayCreationExpression: New PrimitiveType DimExprs Dimsopt  */
-#line 2315 "cmDependsJavaParser.y"
+#line 2318 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5221,11 +5224,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5225 "cmDependsJavaParser.cxx"
+#line 5228 "cmDependsJavaParser.cxx"
     break;
 
   case 257: /* ArrayCreationExpression: New ClassOrInterfaceType DimExprs Dimsopt  */
-#line 2324 "cmDependsJavaParser.y"
+#line 2327 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5233,11 +5236,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5237 "cmDependsJavaParser.cxx"
+#line 5240 "cmDependsJavaParser.cxx"
     break;
 
   case 258: /* ArrayCreationExpression: New PrimitiveType Dims ArrayInitializer  */
-#line 2333 "cmDependsJavaParser.y"
+#line 2336 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5245,11 +5248,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5249 "cmDependsJavaParser.cxx"
+#line 5252 "cmDependsJavaParser.cxx"
     break;
 
   case 259: /* ArrayCreationExpression: New ClassOrInterfaceType Dims ArrayInitializer  */
-#line 2342 "cmDependsJavaParser.y"
+#line 2345 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5257,22 +5260,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5261 "cmDependsJavaParser.cxx"
+#line 5264 "cmDependsJavaParser.cxx"
     break;
 
   case 260: /* Dimsopt: %empty  */
-#line 2351 "cmDependsJavaParser.y"
+#line 2354 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5272 "cmDependsJavaParser.cxx"
+#line 5275 "cmDependsJavaParser.cxx"
     break;
 
   case 261: /* Dimsopt: Dims  */
-#line 2359 "cmDependsJavaParser.y"
+#line 2362 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5280,11 +5283,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5284 "cmDependsJavaParser.cxx"
+#line 5287 "cmDependsJavaParser.cxx"
     break;
 
   case 262: /* DimExprs: DimExpr  */
-#line 2369 "cmDependsJavaParser.y"
+#line 2372 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5292,11 +5295,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5296 "cmDependsJavaParser.cxx"
+#line 5299 "cmDependsJavaParser.cxx"
     break;
 
   case 263: /* DimExprs: DimExprs DimExpr  */
-#line 2378 "cmDependsJavaParser.y"
+#line 2381 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5304,11 +5307,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5308 "cmDependsJavaParser.cxx"
+#line 5311 "cmDependsJavaParser.cxx"
     break;
 
   case 264: /* DimExpr: jp_BRACKETSTART Expression jp_BRACKETEND  */
-#line 2388 "cmDependsJavaParser.y"
+#line 2391 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5316,29 +5319,29 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5320 "cmDependsJavaParser.cxx"
+#line 5323 "cmDependsJavaParser.cxx"
     break;
 
   case 265: /* Dims: jp_BRACKETSTART jp_BRACKETEND  */
-#line 2398 "cmDependsJavaParser.y"
+#line 2401 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
 
 }
-#line 5329 "cmDependsJavaParser.cxx"
+#line 5332 "cmDependsJavaParser.cxx"
     break;
 
   case 266: /* Dims: Dims jp_BRACKETSTART jp_BRACKETEND  */
-#line 2404 "cmDependsJavaParser.y"
+#line 2407 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
 
 }
-#line 5338 "cmDependsJavaParser.cxx"
+#line 5341 "cmDependsJavaParser.cxx"
     break;
 
   case 267: /* FieldAccess: Primary jp_DOT Identifier  */
-#line 2411 "cmDependsJavaParser.y"
+#line 2414 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -5347,11 +5350,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5351 "cmDependsJavaParser.cxx"
+#line 5354 "cmDependsJavaParser.cxx"
     break;
 
   case 268: /* FieldAccess: jp_SUPER jp_DOT Identifier  */
-#line 2421 "cmDependsJavaParser.y"
+#line 2424 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -5360,11 +5363,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5364 "cmDependsJavaParser.cxx"
+#line 5367 "cmDependsJavaParser.cxx"
     break;
 
   case 269: /* FieldAccess: jp_THIS jp_DOT Identifier  */
-#line 2431 "cmDependsJavaParser.y"
+#line 2434 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -5373,11 +5376,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5377 "cmDependsJavaParser.cxx"
+#line 5380 "cmDependsJavaParser.cxx"
     break;
 
   case 270: /* FieldAccess: Primary jp_DOT jp_THIS  */
-#line 2441 "cmDependsJavaParser.y"
+#line 2444 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -5386,11 +5389,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5390 "cmDependsJavaParser.cxx"
+#line 5393 "cmDependsJavaParser.cxx"
     break;
 
   case 271: /* MethodInvocation: Name jp_PARESTART ArgumentListopt jp_PAREEND  */
-#line 2452 "cmDependsJavaParser.y"
+#line 2455 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -5399,11 +5402,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5403 "cmDependsJavaParser.cxx"
+#line 5406 "cmDependsJavaParser.cxx"
     break;
 
   case 272: /* MethodInvocation: Primary jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND  */
-#line 2462 "cmDependsJavaParser.y"
+#line 2465 "cmDependsJavaParser.y"
 {
   jpElementStart(6);
   yyGetParser->DeallocateParserType(&((yyvsp[-5].str)));
@@ -5413,11 +5416,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5417 "cmDependsJavaParser.cxx"
+#line 5420 "cmDependsJavaParser.cxx"
     break;
 
   case 273: /* MethodInvocation: jp_SUPER jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND  */
-#line 2473 "cmDependsJavaParser.y"
+#line 2476 "cmDependsJavaParser.y"
 {
   jpElementStart(6);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -5426,11 +5429,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5430 "cmDependsJavaParser.cxx"
+#line 5433 "cmDependsJavaParser.cxx"
     break;
 
   case 274: /* MethodInvocation: jp_THIS jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND  */
-#line 2483 "cmDependsJavaParser.y"
+#line 2486 "cmDependsJavaParser.y"
 {
   jpElementStart(6);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -5439,11 +5442,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5443 "cmDependsJavaParser.cxx"
+#line 5446 "cmDependsJavaParser.cxx"
     break;
 
   case 275: /* ArrayAccess: Name jp_BRACKETSTART Expression jp_BRACKETEND  */
-#line 2494 "cmDependsJavaParser.y"
+#line 2497 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -5452,11 +5455,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5456 "cmDependsJavaParser.cxx"
+#line 5459 "cmDependsJavaParser.cxx"
     break;
 
   case 276: /* ArrayAccess: PrimaryNoNewArray jp_BRACKETSTART Expression jp_BRACKETEND  */
-#line 2504 "cmDependsJavaParser.y"
+#line 2507 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5464,11 +5467,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5468 "cmDependsJavaParser.cxx"
+#line 5471 "cmDependsJavaParser.cxx"
     break;
 
   case 277: /* PostfixExpression: Primary  */
-#line 2514 "cmDependsJavaParser.y"
+#line 2517 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5476,11 +5479,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5480 "cmDependsJavaParser.cxx"
+#line 5483 "cmDependsJavaParser.cxx"
     break;
 
   case 278: /* PostfixExpression: Name  */
-#line 2523 "cmDependsJavaParser.y"
+#line 2526 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -5488,11 +5491,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5492 "cmDependsJavaParser.cxx"
+#line 5495 "cmDependsJavaParser.cxx"
     break;
 
   case 279: /* PostfixExpression: ArrayType jp_DOT jp_CLASS  */
-#line 2532 "cmDependsJavaParser.y"
+#line 2535 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5500,11 +5503,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5504 "cmDependsJavaParser.cxx"
+#line 5507 "cmDependsJavaParser.cxx"
     break;
 
   case 280: /* PostfixExpression: PostIncrementExpression  */
-#line 2541 "cmDependsJavaParser.y"
+#line 2544 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5512,11 +5515,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5516 "cmDependsJavaParser.cxx"
+#line 5519 "cmDependsJavaParser.cxx"
     break;
 
   case 281: /* PostfixExpression: PostDecrementExpression  */
-#line 2550 "cmDependsJavaParser.y"
+#line 2553 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5524,11 +5527,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5528 "cmDependsJavaParser.cxx"
+#line 5531 "cmDependsJavaParser.cxx"
     break;
 
   case 282: /* PostIncrementExpression: PostfixExpression jp_PLUSPLUS  */
-#line 2560 "cmDependsJavaParser.y"
+#line 2563 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5536,11 +5539,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5540 "cmDependsJavaParser.cxx"
+#line 5543 "cmDependsJavaParser.cxx"
     break;
 
   case 283: /* PostDecrementExpression: PostfixExpression jp_MINUSMINUS  */
-#line 2570 "cmDependsJavaParser.y"
+#line 2573 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5548,11 +5551,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5552 "cmDependsJavaParser.cxx"
+#line 5555 "cmDependsJavaParser.cxx"
     break;
 
   case 284: /* UnaryExpression: PreIncrementExpression  */
-#line 2580 "cmDependsJavaParser.y"
+#line 2583 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5560,11 +5563,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5564 "cmDependsJavaParser.cxx"
+#line 5567 "cmDependsJavaParser.cxx"
     break;
 
   case 285: /* UnaryExpression: PreDecrementExpression  */
-#line 2589 "cmDependsJavaParser.y"
+#line 2592 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5572,11 +5575,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5576 "cmDependsJavaParser.cxx"
+#line 5579 "cmDependsJavaParser.cxx"
     break;
 
   case 286: /* UnaryExpression: jp_PLUS UnaryExpression  */
-#line 2598 "cmDependsJavaParser.y"
+#line 2601 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5584,11 +5587,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5588 "cmDependsJavaParser.cxx"
+#line 5591 "cmDependsJavaParser.cxx"
     break;
 
   case 287: /* UnaryExpression: jp_MINUS UnaryExpression  */
-#line 2607 "cmDependsJavaParser.y"
+#line 2610 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5596,11 +5599,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5600 "cmDependsJavaParser.cxx"
+#line 5603 "cmDependsJavaParser.cxx"
     break;
 
   case 288: /* UnaryExpression: UnaryExpressionNotPlusMinus  */
-#line 2616 "cmDependsJavaParser.y"
+#line 2619 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5608,11 +5611,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5612 "cmDependsJavaParser.cxx"
+#line 5615 "cmDependsJavaParser.cxx"
     break;
 
   case 289: /* PreIncrementExpression: jp_PLUSPLUS UnaryExpression  */
-#line 2626 "cmDependsJavaParser.y"
+#line 2629 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5620,11 +5623,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5624 "cmDependsJavaParser.cxx"
+#line 5627 "cmDependsJavaParser.cxx"
     break;
 
   case 290: /* PreDecrementExpression: jp_MINUSMINUS UnaryExpression  */
-#line 2636 "cmDependsJavaParser.y"
+#line 2639 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5632,11 +5635,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5636 "cmDependsJavaParser.cxx"
+#line 5639 "cmDependsJavaParser.cxx"
     break;
 
   case 291: /* UnaryExpressionNotPlusMinus: PostfixExpression  */
-#line 2646 "cmDependsJavaParser.y"
+#line 2649 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5644,11 +5647,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5648 "cmDependsJavaParser.cxx"
+#line 5651 "cmDependsJavaParser.cxx"
     break;
 
   case 292: /* UnaryExpressionNotPlusMinus: jp_TILDE UnaryExpression  */
-#line 2655 "cmDependsJavaParser.y"
+#line 2658 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5656,11 +5659,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5660 "cmDependsJavaParser.cxx"
+#line 5663 "cmDependsJavaParser.cxx"
     break;
 
   case 293: /* UnaryExpressionNotPlusMinus: jp_EXCLAMATION UnaryExpression  */
-#line 2664 "cmDependsJavaParser.y"
+#line 2667 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5668,11 +5671,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5672 "cmDependsJavaParser.cxx"
+#line 5675 "cmDependsJavaParser.cxx"
     break;
 
   case 294: /* UnaryExpressionNotPlusMinus: CastExpression  */
-#line 2673 "cmDependsJavaParser.y"
+#line 2676 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5680,11 +5683,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5684 "cmDependsJavaParser.cxx"
+#line 5687 "cmDependsJavaParser.cxx"
     break;
 
   case 295: /* CastExpression: jp_PARESTART PrimitiveType Dimsopt jp_PAREEND UnaryExpression  */
-#line 2683 "cmDependsJavaParser.y"
+#line 2686 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -5692,11 +5695,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5696 "cmDependsJavaParser.cxx"
+#line 5699 "cmDependsJavaParser.cxx"
     break;
 
   case 296: /* CastExpression: jp_PARESTART Expression jp_PAREEND UnaryExpressionNotPlusMinus  */
-#line 2692 "cmDependsJavaParser.y"
+#line 2695 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5704,20 +5707,20 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5708 "cmDependsJavaParser.cxx"
+#line 5711 "cmDependsJavaParser.cxx"
     break;
 
   case 297: /* CastExpression: jp_PARESTART Name Dims jp_PAREEND UnaryExpressionNotPlusMinus  */
-#line 2701 "cmDependsJavaParser.y"
+#line 2704 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
 
 }
-#line 5717 "cmDependsJavaParser.cxx"
+#line 5720 "cmDependsJavaParser.cxx"
     break;
 
   case 298: /* MultiplicativeExpression: UnaryExpression  */
-#line 2708 "cmDependsJavaParser.y"
+#line 2711 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5725,11 +5728,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5729 "cmDependsJavaParser.cxx"
+#line 5732 "cmDependsJavaParser.cxx"
     break;
 
   case 299: /* MultiplicativeExpression: MultiplicativeExpression jp_TIMES UnaryExpression  */
-#line 2717 "cmDependsJavaParser.y"
+#line 2720 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5737,11 +5740,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5741 "cmDependsJavaParser.cxx"
+#line 5744 "cmDependsJavaParser.cxx"
     break;
 
   case 300: /* MultiplicativeExpression: MultiplicativeExpression jp_DIVIDE UnaryExpression  */
-#line 2726 "cmDependsJavaParser.y"
+#line 2729 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5749,11 +5752,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5753 "cmDependsJavaParser.cxx"
+#line 5756 "cmDependsJavaParser.cxx"
     break;
 
   case 301: /* MultiplicativeExpression: MultiplicativeExpression jp_PERCENT UnaryExpression  */
-#line 2735 "cmDependsJavaParser.y"
+#line 2738 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5761,11 +5764,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5765 "cmDependsJavaParser.cxx"
+#line 5768 "cmDependsJavaParser.cxx"
     break;
 
   case 302: /* AdditiveExpression: MultiplicativeExpression  */
-#line 2745 "cmDependsJavaParser.y"
+#line 2748 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5773,11 +5776,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5777 "cmDependsJavaParser.cxx"
+#line 5780 "cmDependsJavaParser.cxx"
     break;
 
   case 303: /* AdditiveExpression: AdditiveExpression jp_PLUS MultiplicativeExpression  */
-#line 2754 "cmDependsJavaParser.y"
+#line 2757 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5785,11 +5788,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5789 "cmDependsJavaParser.cxx"
+#line 5792 "cmDependsJavaParser.cxx"
     break;
 
   case 304: /* AdditiveExpression: AdditiveExpression jp_MINUS MultiplicativeExpression  */
-#line 2763 "cmDependsJavaParser.y"
+#line 2766 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5797,11 +5800,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5801 "cmDependsJavaParser.cxx"
+#line 5804 "cmDependsJavaParser.cxx"
     break;
 
   case 305: /* ShiftExpression: AdditiveExpression  */
-#line 2773 "cmDependsJavaParser.y"
+#line 2776 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5809,11 +5812,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5813 "cmDependsJavaParser.cxx"
+#line 5816 "cmDependsJavaParser.cxx"
     break;
 
   case 306: /* ShiftExpression: ShiftExpression jp_LTLT AdditiveExpression  */
-#line 2782 "cmDependsJavaParser.y"
+#line 2785 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5821,11 +5824,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5825 "cmDependsJavaParser.cxx"
+#line 5828 "cmDependsJavaParser.cxx"
     break;
 
   case 307: /* ShiftExpression: ShiftExpression jp_GTGT AdditiveExpression  */
-#line 2791 "cmDependsJavaParser.y"
+#line 2794 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5833,11 +5836,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5837 "cmDependsJavaParser.cxx"
+#line 5840 "cmDependsJavaParser.cxx"
     break;
 
   case 308: /* ShiftExpression: ShiftExpression jp_GTGTGT AdditiveExpression  */
-#line 2800 "cmDependsJavaParser.y"
+#line 2803 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5845,11 +5848,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5849 "cmDependsJavaParser.cxx"
+#line 5852 "cmDependsJavaParser.cxx"
     break;
 
   case 309: /* RelationalExpression: ShiftExpression  */
-#line 2810 "cmDependsJavaParser.y"
+#line 2813 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5857,11 +5860,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5861 "cmDependsJavaParser.cxx"
+#line 5864 "cmDependsJavaParser.cxx"
     break;
 
   case 310: /* RelationalExpression: RelationalExpression jp_LESSTHAN ShiftExpression  */
-#line 2819 "cmDependsJavaParser.y"
+#line 2822 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5869,11 +5872,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5873 "cmDependsJavaParser.cxx"
+#line 5876 "cmDependsJavaParser.cxx"
     break;
 
   case 311: /* RelationalExpression: RelationalExpression jp_GREATER ShiftExpression  */
-#line 2828 "cmDependsJavaParser.y"
+#line 2831 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5881,11 +5884,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5885 "cmDependsJavaParser.cxx"
+#line 5888 "cmDependsJavaParser.cxx"
     break;
 
   case 312: /* RelationalExpression: RelationalExpression jp_LTEQUALS ShiftExpression  */
-#line 2837 "cmDependsJavaParser.y"
+#line 2840 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5893,11 +5896,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5897 "cmDependsJavaParser.cxx"
+#line 5900 "cmDependsJavaParser.cxx"
     break;
 
   case 313: /* RelationalExpression: RelationalExpression jp_GTEQUALS ShiftExpression  */
-#line 2846 "cmDependsJavaParser.y"
+#line 2849 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5905,11 +5908,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5909 "cmDependsJavaParser.cxx"
+#line 5912 "cmDependsJavaParser.cxx"
     break;
 
   case 314: /* RelationalExpression: RelationalExpression jp_INSTANCEOF ReferenceType  */
-#line 2855 "cmDependsJavaParser.y"
+#line 2858 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5917,11 +5920,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5921 "cmDependsJavaParser.cxx"
+#line 5924 "cmDependsJavaParser.cxx"
     break;
 
   case 315: /* EqualityExpression: RelationalExpression  */
-#line 2865 "cmDependsJavaParser.y"
+#line 2868 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5929,11 +5932,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5933 "cmDependsJavaParser.cxx"
+#line 5936 "cmDependsJavaParser.cxx"
     break;
 
   case 316: /* EqualityExpression: EqualityExpression jp_EQUALSEQUALS RelationalExpression  */
-#line 2874 "cmDependsJavaParser.y"
+#line 2877 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5941,11 +5944,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5945 "cmDependsJavaParser.cxx"
+#line 5948 "cmDependsJavaParser.cxx"
     break;
 
   case 317: /* EqualityExpression: EqualityExpression jp_EXCLAMATIONEQUALS RelationalExpression  */
-#line 2883 "cmDependsJavaParser.y"
+#line 2886 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5953,11 +5956,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5957 "cmDependsJavaParser.cxx"
+#line 5960 "cmDependsJavaParser.cxx"
     break;
 
   case 318: /* AndExpression: EqualityExpression  */
-#line 2893 "cmDependsJavaParser.y"
+#line 2896 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5965,11 +5968,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5969 "cmDependsJavaParser.cxx"
+#line 5972 "cmDependsJavaParser.cxx"
     break;
 
   case 319: /* AndExpression: AndExpression jp_AND EqualityExpression  */
-#line 2902 "cmDependsJavaParser.y"
+#line 2905 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5977,11 +5980,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5981 "cmDependsJavaParser.cxx"
+#line 5984 "cmDependsJavaParser.cxx"
     break;
 
   case 320: /* ExclusiveOrExpression: AndExpression  */
-#line 2912 "cmDependsJavaParser.y"
+#line 2915 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5989,11 +5992,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5993 "cmDependsJavaParser.cxx"
+#line 5996 "cmDependsJavaParser.cxx"
     break;
 
   case 321: /* ExclusiveOrExpression: ExclusiveOrExpression jp_CARROT AndExpression  */
-#line 2921 "cmDependsJavaParser.y"
+#line 2924 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -6001,11 +6004,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6005 "cmDependsJavaParser.cxx"
+#line 6008 "cmDependsJavaParser.cxx"
     break;
 
   case 322: /* InclusiveOrExpression: ExclusiveOrExpression  */
-#line 2931 "cmDependsJavaParser.y"
+#line 2934 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6013,11 +6016,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6017 "cmDependsJavaParser.cxx"
+#line 6020 "cmDependsJavaParser.cxx"
     break;
 
   case 323: /* InclusiveOrExpression: InclusiveOrExpression jp_PIPE ExclusiveOrExpression  */
-#line 2940 "cmDependsJavaParser.y"
+#line 2943 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -6025,11 +6028,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6029 "cmDependsJavaParser.cxx"
+#line 6032 "cmDependsJavaParser.cxx"
     break;
 
   case 324: /* ConditionalAndExpression: InclusiveOrExpression  */
-#line 2950 "cmDependsJavaParser.y"
+#line 2953 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6037,11 +6040,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6041 "cmDependsJavaParser.cxx"
+#line 6044 "cmDependsJavaParser.cxx"
     break;
 
   case 325: /* ConditionalAndExpression: ConditionalAndExpression jp_ANDAND InclusiveOrExpression  */
-#line 2959 "cmDependsJavaParser.y"
+#line 2962 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -6049,11 +6052,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6053 "cmDependsJavaParser.cxx"
+#line 6056 "cmDependsJavaParser.cxx"
     break;
 
   case 326: /* ConditionalOrExpression: ConditionalAndExpression  */
-#line 2969 "cmDependsJavaParser.y"
+#line 2972 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6061,11 +6064,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6065 "cmDependsJavaParser.cxx"
+#line 6068 "cmDependsJavaParser.cxx"
     break;
 
   case 327: /* ConditionalOrExpression: ConditionalOrExpression jp_PIPEPIPE ConditionalAndExpression  */
-#line 2978 "cmDependsJavaParser.y"
+#line 2981 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -6073,11 +6076,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6077 "cmDependsJavaParser.cxx"
+#line 6080 "cmDependsJavaParser.cxx"
     break;
 
   case 328: /* ConditionalExpression: ConditionalOrExpression  */
-#line 2988 "cmDependsJavaParser.y"
+#line 2991 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6085,11 +6088,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6089 "cmDependsJavaParser.cxx"
+#line 6092 "cmDependsJavaParser.cxx"
     break;
 
   case 329: /* ConditionalExpression: ConditionalOrExpression jp_QUESTION Expression jp_COLON ConditionalExpression  */
-#line 2997 "cmDependsJavaParser.y"
+#line 3000 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -6097,11 +6100,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6101 "cmDependsJavaParser.cxx"
+#line 6104 "cmDependsJavaParser.cxx"
     break;
 
   case 330: /* AssignmentExpression: ConditionalExpression  */
-#line 3007 "cmDependsJavaParser.y"
+#line 3010 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6109,11 +6112,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6113 "cmDependsJavaParser.cxx"
+#line 6116 "cmDependsJavaParser.cxx"
     break;
 
   case 331: /* AssignmentExpression: Assignment  */
-#line 3016 "cmDependsJavaParser.y"
+#line 3019 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6121,11 +6124,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6125 "cmDependsJavaParser.cxx"
+#line 6128 "cmDependsJavaParser.cxx"
     break;
 
   case 332: /* Assignment: LeftHandSide AssignmentOperator AssignmentExpression  */
-#line 3026 "cmDependsJavaParser.y"
+#line 3029 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -6133,11 +6136,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6137 "cmDependsJavaParser.cxx"
+#line 6140 "cmDependsJavaParser.cxx"
     break;
 
   case 333: /* LeftHandSide: Name  */
-#line 3036 "cmDependsJavaParser.y"
+#line 3039 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -6146,11 +6149,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6150 "cmDependsJavaParser.cxx"
+#line 6153 "cmDependsJavaParser.cxx"
     break;
 
   case 334: /* LeftHandSide: FieldAccess  */
-#line 3046 "cmDependsJavaParser.y"
+#line 3049 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6158,11 +6161,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6162 "cmDependsJavaParser.cxx"
+#line 6165 "cmDependsJavaParser.cxx"
     break;
 
   case 335: /* LeftHandSide: ArrayAccess  */
-#line 3055 "cmDependsJavaParser.y"
+#line 3058 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6170,11 +6173,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6174 "cmDependsJavaParser.cxx"
+#line 6177 "cmDependsJavaParser.cxx"
     break;
 
   case 336: /* AssignmentOperator: jp_EQUALS  */
-#line 3065 "cmDependsJavaParser.y"
+#line 3068 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6182,11 +6185,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6186 "cmDependsJavaParser.cxx"
+#line 6189 "cmDependsJavaParser.cxx"
     break;
 
   case 337: /* AssignmentOperator: jp_TIMESEQUALS  */
-#line 3074 "cmDependsJavaParser.y"
+#line 3077 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6194,11 +6197,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6198 "cmDependsJavaParser.cxx"
+#line 6201 "cmDependsJavaParser.cxx"
     break;
 
   case 338: /* AssignmentOperator: jp_DIVIDEEQUALS  */
-#line 3083 "cmDependsJavaParser.y"
+#line 3086 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6206,11 +6209,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6210 "cmDependsJavaParser.cxx"
+#line 6213 "cmDependsJavaParser.cxx"
     break;
 
   case 339: /* AssignmentOperator: jp_PERCENTEQUALS  */
-#line 3092 "cmDependsJavaParser.y"
+#line 3095 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6218,11 +6221,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6222 "cmDependsJavaParser.cxx"
+#line 6225 "cmDependsJavaParser.cxx"
     break;
 
   case 340: /* AssignmentOperator: jp_PLUSEQUALS  */
-#line 3101 "cmDependsJavaParser.y"
+#line 3104 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6230,11 +6233,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6234 "cmDependsJavaParser.cxx"
+#line 6237 "cmDependsJavaParser.cxx"
     break;
 
   case 341: /* AssignmentOperator: jp_MINUSEQUALS  */
-#line 3110 "cmDependsJavaParser.y"
+#line 3113 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6242,11 +6245,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6246 "cmDependsJavaParser.cxx"
+#line 6249 "cmDependsJavaParser.cxx"
     break;
 
   case 342: /* AssignmentOperator: jp_LESLESEQUALS  */
-#line 3119 "cmDependsJavaParser.y"
+#line 3122 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6254,11 +6257,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6258 "cmDependsJavaParser.cxx"
+#line 6261 "cmDependsJavaParser.cxx"
     break;
 
   case 343: /* AssignmentOperator: jp_GTGTEQUALS  */
-#line 3128 "cmDependsJavaParser.y"
+#line 3131 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6266,11 +6269,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6270 "cmDependsJavaParser.cxx"
+#line 6273 "cmDependsJavaParser.cxx"
     break;
 
   case 344: /* AssignmentOperator: jp_GTGTGTEQUALS  */
-#line 3137 "cmDependsJavaParser.y"
+#line 3140 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6278,11 +6281,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6282 "cmDependsJavaParser.cxx"
+#line 6285 "cmDependsJavaParser.cxx"
     break;
 
   case 345: /* AssignmentOperator: jp_ANDEQUALS  */
-#line 3146 "cmDependsJavaParser.y"
+#line 3149 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6290,11 +6293,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6294 "cmDependsJavaParser.cxx"
+#line 6297 "cmDependsJavaParser.cxx"
     break;
 
   case 346: /* AssignmentOperator: jp_CARROTEQUALS  */
-#line 3155 "cmDependsJavaParser.y"
+#line 3158 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6302,11 +6305,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6306 "cmDependsJavaParser.cxx"
+#line 6309 "cmDependsJavaParser.cxx"
     break;
 
   case 347: /* AssignmentOperator: jp_PIPEEQUALS  */
-#line 3164 "cmDependsJavaParser.y"
+#line 3167 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6314,11 +6317,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6318 "cmDependsJavaParser.cxx"
+#line 6321 "cmDependsJavaParser.cxx"
     break;
 
   case 348: /* Expression: AssignmentExpression  */
-#line 3174 "cmDependsJavaParser.y"
+#line 3177 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6326,11 +6329,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6330 "cmDependsJavaParser.cxx"
+#line 6333 "cmDependsJavaParser.cxx"
     break;
 
   case 349: /* ConstantExpression: Expression  */
-#line 3184 "cmDependsJavaParser.y"
+#line 3187 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6338,11 +6341,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6342 "cmDependsJavaParser.cxx"
+#line 6345 "cmDependsJavaParser.cxx"
     break;
 
   case 350: /* New: jp_NEW  */
-#line 3194 "cmDependsJavaParser.y"
+#line 3197 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6350,11 +6353,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6354 "cmDependsJavaParser.cxx"
+#line 6357 "cmDependsJavaParser.cxx"
     break;
 
   case 351: /* New: Name jp_DOT jp_NEW  */
-#line 3203 "cmDependsJavaParser.y"
+#line 3206 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpStoreClass((yyvsp[-2].str));
@@ -6363,11 +6366,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6367 "cmDependsJavaParser.cxx"
+#line 6370 "cmDependsJavaParser.cxx"
     break;
 
 
-#line 6371 "cmDependsJavaParser.cxx"
+#line 6374 "cmDependsJavaParser.cxx"
 
       default: break;
     }
@@ -6591,7 +6594,7 @@
   return yyresult;
 }
 
-#line 3212 "cmDependsJavaParser.y"
+#line 3215 "cmDependsJavaParser.y"
 
 /* End of grammar */
 
diff --git a/Source/LexerParser/cmDependsJavaParser.y b/Source/LexerParser/cmDependsJavaParser.y
index 01d0017..7679212 100644
--- a/Source/LexerParser/cmDependsJavaParser.y
+++ b/Source/LexerParser/cmDependsJavaParser.y
@@ -44,6 +44,9 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
diff --git a/Source/LexerParser/cmExprParser.cxx b/Source/LexerParser/cmExprParser.cxx
index d30d5cf..d4168a0 100644
--- a/Source/LexerParser/cmExprParser.cxx
+++ b/Source/LexerParser/cmExprParser.cxx
@@ -112,6 +112,9 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
@@ -125,7 +128,7 @@
 #  pragma diag_suppress 550 /* variable set but never used */
 #endif
 
-#line 129 "cmExprParser.cxx"
+#line 132 "cmExprParser.cxx"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -567,9 +570,9 @@
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint8 yyrline[] =
 {
-       0,    86,    86,    91,    94,    99,   102,   107,   110,   115,
-     118,   122,   128,   131,   135,   141,   144,   148,   152,   158,
-     161,   164,   168,   173,   176
+       0,    89,    89,    94,    97,   102,   105,   110,   113,   118,
+     121,   125,   131,   134,   138,   144,   147,   151,   155,   161,
+     164,   167,   171,   176,   179
 };
 #endif
 
@@ -1430,199 +1433,199 @@
   switch (yyn)
     {
   case 2: /* start: exp  */
-#line 86 "cmExprParser.y"
+#line 89 "cmExprParser.y"
       {
     cmExpr_yyget_extra(yyscanner)->SetResult((yyvsp[0].Number));
   }
-#line 1438 "cmExprParser.cxx"
+#line 1441 "cmExprParser.cxx"
     break;
 
   case 3: /* exp: bitwiseor  */
-#line 91 "cmExprParser.y"
+#line 94 "cmExprParser.y"
             {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1446 "cmExprParser.cxx"
+#line 1449 "cmExprParser.cxx"
     break;
 
   case 4: /* exp: exp exp_OR bitwiseor  */
-#line 94 "cmExprParser.y"
+#line 97 "cmExprParser.y"
                        {
     (yyval.Number) = (yyvsp[-2].Number) | (yyvsp[0].Number);
   }
-#line 1454 "cmExprParser.cxx"
+#line 1457 "cmExprParser.cxx"
     break;
 
   case 5: /* bitwiseor: bitwisexor  */
-#line 99 "cmExprParser.y"
+#line 102 "cmExprParser.y"
              {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1462 "cmExprParser.cxx"
+#line 1465 "cmExprParser.cxx"
     break;
 
   case 6: /* bitwiseor: bitwiseor exp_XOR bitwisexor  */
-#line 102 "cmExprParser.y"
+#line 105 "cmExprParser.y"
                                {
     (yyval.Number) = (yyvsp[-2].Number) ^ (yyvsp[0].Number);
   }
-#line 1470 "cmExprParser.cxx"
+#line 1473 "cmExprParser.cxx"
     break;
 
   case 7: /* bitwisexor: bitwiseand  */
-#line 107 "cmExprParser.y"
+#line 110 "cmExprParser.y"
              {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1478 "cmExprParser.cxx"
+#line 1481 "cmExprParser.cxx"
     break;
 
   case 8: /* bitwisexor: bitwisexor exp_AND bitwiseand  */
-#line 110 "cmExprParser.y"
+#line 113 "cmExprParser.y"
                                 {
     (yyval.Number) = (yyvsp[-2].Number) & (yyvsp[0].Number);
   }
-#line 1486 "cmExprParser.cxx"
+#line 1489 "cmExprParser.cxx"
     break;
 
   case 9: /* bitwiseand: shift  */
-#line 115 "cmExprParser.y"
+#line 118 "cmExprParser.y"
         {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1494 "cmExprParser.cxx"
+#line 1497 "cmExprParser.cxx"
     break;
 
   case 10: /* bitwiseand: bitwiseand exp_SHIFTLEFT shift  */
-#line 118 "cmExprParser.y"
+#line 121 "cmExprParser.y"
                                  {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->ShL((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1503 "cmExprParser.cxx"
+#line 1506 "cmExprParser.cxx"
     break;
 
   case 11: /* bitwiseand: bitwiseand exp_SHIFTRIGHT shift  */
-#line 122 "cmExprParser.y"
+#line 125 "cmExprParser.y"
                                   {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->ShR((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1512 "cmExprParser.cxx"
+#line 1515 "cmExprParser.cxx"
     break;
 
   case 12: /* shift: term  */
-#line 128 "cmExprParser.y"
+#line 131 "cmExprParser.y"
        {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1520 "cmExprParser.cxx"
+#line 1523 "cmExprParser.cxx"
     break;
 
   case 13: /* shift: shift exp_PLUS term  */
-#line 131 "cmExprParser.y"
+#line 134 "cmExprParser.y"
                       {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Add((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1529 "cmExprParser.cxx"
+#line 1532 "cmExprParser.cxx"
     break;
 
   case 14: /* shift: shift exp_MINUS term  */
-#line 135 "cmExprParser.y"
+#line 138 "cmExprParser.y"
                        {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Sub((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1538 "cmExprParser.cxx"
+#line 1541 "cmExprParser.cxx"
     break;
 
   case 15: /* term: unary  */
-#line 141 "cmExprParser.y"
+#line 144 "cmExprParser.y"
         {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1546 "cmExprParser.cxx"
+#line 1549 "cmExprParser.cxx"
     break;
 
   case 16: /* term: term exp_TIMES unary  */
-#line 144 "cmExprParser.y"
+#line 147 "cmExprParser.y"
                        {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Mul((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1555 "cmExprParser.cxx"
+#line 1558 "cmExprParser.cxx"
     break;
 
   case 17: /* term: term exp_DIVIDE unary  */
-#line 148 "cmExprParser.y"
+#line 151 "cmExprParser.y"
                         {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Div((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1564 "cmExprParser.cxx"
+#line 1567 "cmExprParser.cxx"
     break;
 
   case 18: /* term: term exp_MOD unary  */
-#line 152 "cmExprParser.y"
+#line 155 "cmExprParser.y"
                      {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Mod((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1573 "cmExprParser.cxx"
+#line 1576 "cmExprParser.cxx"
     break;
 
   case 19: /* unary: factor  */
-#line 158 "cmExprParser.y"
+#line 161 "cmExprParser.y"
          {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1581 "cmExprParser.cxx"
+#line 1584 "cmExprParser.cxx"
     break;
 
   case 20: /* unary: exp_PLUS unary  */
-#line 161 "cmExprParser.y"
+#line 164 "cmExprParser.y"
                  {
     (yyval.Number) = + (yyvsp[0].Number);
   }
-#line 1589 "cmExprParser.cxx"
+#line 1592 "cmExprParser.cxx"
     break;
 
   case 21: /* unary: exp_MINUS unary  */
-#line 164 "cmExprParser.y"
+#line 167 "cmExprParser.y"
                   {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Neg((yyvsp[0].Number));
   }
-#line 1598 "cmExprParser.cxx"
+#line 1601 "cmExprParser.cxx"
     break;
 
   case 22: /* unary: exp_NOT unary  */
-#line 168 "cmExprParser.y"
+#line 171 "cmExprParser.y"
                 {
     (yyval.Number) = ~ (yyvsp[0].Number);
   }
-#line 1606 "cmExprParser.cxx"
+#line 1609 "cmExprParser.cxx"
     break;
 
   case 23: /* factor: exp_NUMBER  */
-#line 173 "cmExprParser.y"
+#line 176 "cmExprParser.y"
              {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1614 "cmExprParser.cxx"
+#line 1617 "cmExprParser.cxx"
     break;
 
   case 24: /* factor: exp_OPENPARENT exp exp_CLOSEPARENT  */
-#line 176 "cmExprParser.y"
+#line 179 "cmExprParser.y"
                                      {
     (yyval.Number) = (yyvsp[-1].Number);
   }
-#line 1622 "cmExprParser.cxx"
+#line 1625 "cmExprParser.cxx"
     break;
 
 
-#line 1626 "cmExprParser.cxx"
+#line 1629 "cmExprParser.cxx"
 
       default: break;
     }
@@ -1846,7 +1849,7 @@
   return yyresult;
 }
 
-#line 181 "cmExprParser.y"
+#line 184 "cmExprParser.y"
 
 /* End of grammar */
 
diff --git a/Source/LexerParser/cmExprParser.y b/Source/LexerParser/cmExprParser.y
index edd3bc5..b4f7e60 100644
--- a/Source/LexerParser/cmExprParser.y
+++ b/Source/LexerParser/cmExprParser.y
@@ -37,6 +37,9 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
diff --git a/Source/LexerParser/cmFortranParser.cxx b/Source/LexerParser/cmFortranParser.cxx
index a43f4fc..5bc20b0 100644
--- a/Source/LexerParser/cmFortranParser.cxx
+++ b/Source/LexerParser/cmFortranParser.cxx
@@ -132,13 +132,16 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
 # endif
 #endif
 
-#line 142 "cmFortranParser.cxx"
+#line 145 "cmFortranParser.cxx"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -610,13 +613,13 @@
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   106,   106,   106,   109,   113,   118,   123,   129,   136,
-     141,   146,   150,   155,   167,   172,   177,   182,   187,   192,
-     197,   202,   207,   211,   215,   219,   223,   224,   229,   229,
-     229,   230,   230,   231,   231,   232,   232,   233,   233,   234,
-     234,   235,   235,   236,   236,   237,   237,   238,   238,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257
+       0,   109,   109,   109,   112,   116,   121,   126,   132,   139,
+     144,   149,   153,   158,   170,   175,   180,   185,   190,   195,
+     200,   205,   210,   214,   218,   222,   226,   227,   232,   232,
+     232,   233,   233,   234,   234,   235,   235,   236,   236,   237,
+     237,   238,   238,   239,   239,   240,   240,   241,   241,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260
 };
 #endif
 
@@ -1327,21 +1330,21 @@
   switch (yykind)
     {
     case YYSYMBOL_STRING: /* STRING  */
-#line 100 "cmFortranParser.y"
+#line 103 "cmFortranParser.y"
             { free(((*yyvaluep).string)); }
-#line 1333 "cmFortranParser.cxx"
+#line 1336 "cmFortranParser.cxx"
         break;
 
     case YYSYMBOL_WORD: /* WORD  */
-#line 100 "cmFortranParser.y"
+#line 103 "cmFortranParser.y"
             { free(((*yyvaluep).string)); }
-#line 1339 "cmFortranParser.cxx"
+#line 1342 "cmFortranParser.cxx"
         break;
 
     case YYSYMBOL_CPP_INCLUDE_ANGLE: /* CPP_INCLUDE_ANGLE  */
-#line 100 "cmFortranParser.y"
+#line 103 "cmFortranParser.y"
             { free(((*yyvaluep).string)); }
-#line 1345 "cmFortranParser.cxx"
+#line 1348 "cmFortranParser.cxx"
         break;
 
       default:
@@ -1618,47 +1621,47 @@
   switch (yyn)
     {
   case 4: /* stmt: INTERFACE EOSTMT  */
-#line 109 "cmFortranParser.y"
+#line 112 "cmFortranParser.y"
                    {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_SetInInterface(parser, true);
   }
-#line 1627 "cmFortranParser.cxx"
+#line 1630 "cmFortranParser.cxx"
     break;
 
   case 5: /* stmt: USE WORD other EOSTMT  */
-#line 113 "cmFortranParser.y"
+#line 116 "cmFortranParser.y"
                         {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleUse(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1637 "cmFortranParser.cxx"
+#line 1640 "cmFortranParser.cxx"
     break;
 
   case 6: /* stmt: MODULE WORD EOSTMT  */
-#line 118 "cmFortranParser.y"
+#line 121 "cmFortranParser.y"
                      {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleModule(parser, (yyvsp[-1].string));
     free((yyvsp[-1].string));
   }
-#line 1647 "cmFortranParser.cxx"
+#line 1650 "cmFortranParser.cxx"
     break;
 
   case 7: /* stmt: SUBMODULE LPAREN WORD RPAREN WORD EOSTMT  */
-#line 123 "cmFortranParser.y"
+#line 126 "cmFortranParser.y"
                                            {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleSubmodule(parser, (yyvsp[-3].string), (yyvsp[-1].string));
     free((yyvsp[-3].string));
     free((yyvsp[-1].string));
   }
-#line 1658 "cmFortranParser.cxx"
+#line 1661 "cmFortranParser.cxx"
     break;
 
   case 8: /* stmt: SUBMODULE LPAREN WORD COLON WORD RPAREN WORD EOSTMT  */
-#line 129 "cmFortranParser.y"
+#line 132 "cmFortranParser.y"
                                                       {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleSubmoduleNested(parser, (yyvsp[-5].string), (yyvsp[-3].string), (yyvsp[-1].string));
@@ -1666,50 +1669,50 @@
     free((yyvsp[-3].string));
     free((yyvsp[-1].string));
   }
-#line 1670 "cmFortranParser.cxx"
+#line 1673 "cmFortranParser.cxx"
     break;
 
   case 9: /* stmt: INTERFACE WORD EOSTMT  */
-#line 136 "cmFortranParser.y"
+#line 139 "cmFortranParser.y"
                         {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_SetInInterface(parser, true);
     free((yyvsp[-1].string));
   }
-#line 1680 "cmFortranParser.cxx"
+#line 1683 "cmFortranParser.cxx"
     break;
 
   case 10: /* stmt: END INTERFACE WORD EOSTMT  */
-#line 141 "cmFortranParser.y"
+#line 144 "cmFortranParser.y"
                             {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_SetInInterface(parser, false);
     free((yyvsp[-1].string));
   }
-#line 1690 "cmFortranParser.cxx"
+#line 1693 "cmFortranParser.cxx"
     break;
 
   case 11: /* stmt: END INTERFACE EOSTMT  */
-#line 146 "cmFortranParser.y"
+#line 149 "cmFortranParser.y"
                        {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_SetInInterface(parser, false);
   }
-#line 1699 "cmFortranParser.cxx"
+#line 1702 "cmFortranParser.cxx"
     break;
 
   case 12: /* stmt: USE DCOLON WORD other EOSTMT  */
-#line 150 "cmFortranParser.y"
+#line 153 "cmFortranParser.y"
                                {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleUse(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1709 "cmFortranParser.cxx"
+#line 1712 "cmFortranParser.cxx"
     break;
 
   case 13: /* stmt: USE COMMA WORD DCOLON WORD other EOSTMT  */
-#line 155 "cmFortranParser.y"
+#line 158 "cmFortranParser.y"
                                           {
     if (cmsysString_strcasecmp((yyvsp[-4].string), "non_intrinsic") == 0) {
       cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
@@ -1722,139 +1725,139 @@
     free((yyvsp[-4].string));
     free((yyvsp[-2].string));
   }
-#line 1726 "cmFortranParser.cxx"
+#line 1729 "cmFortranParser.cxx"
     break;
 
   case 14: /* stmt: INCLUDE STRING EOSTMT  */
-#line 167 "cmFortranParser.y"
+#line 170 "cmFortranParser.y"
                         {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleInclude(parser, (yyvsp[-1].string));
     free((yyvsp[-1].string));
   }
-#line 1736 "cmFortranParser.cxx"
+#line 1739 "cmFortranParser.cxx"
     break;
 
   case 15: /* stmt: CPP_LINE_DIRECTIVE STRING other EOSTMT  */
-#line 172 "cmFortranParser.y"
+#line 175 "cmFortranParser.y"
                                          {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleLineDirective(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1746 "cmFortranParser.cxx"
+#line 1749 "cmFortranParser.cxx"
     break;
 
   case 16: /* stmt: CPP_INCLUDE_ANGLE other EOSTMT  */
-#line 177 "cmFortranParser.y"
+#line 180 "cmFortranParser.y"
                                  {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleInclude(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1756 "cmFortranParser.cxx"
+#line 1759 "cmFortranParser.cxx"
     break;
 
   case 17: /* stmt: include STRING other EOSTMT  */
-#line 182 "cmFortranParser.y"
+#line 185 "cmFortranParser.y"
                               {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleInclude(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1766 "cmFortranParser.cxx"
+#line 1769 "cmFortranParser.cxx"
     break;
 
   case 18: /* stmt: define WORD other EOSTMT  */
-#line 187 "cmFortranParser.y"
+#line 190 "cmFortranParser.y"
                            {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleDefine(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1776 "cmFortranParser.cxx"
+#line 1779 "cmFortranParser.cxx"
     break;
 
   case 19: /* stmt: undef WORD other EOSTMT  */
-#line 192 "cmFortranParser.y"
+#line 195 "cmFortranParser.y"
                           {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleUndef(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1786 "cmFortranParser.cxx"
+#line 1789 "cmFortranParser.cxx"
     break;
 
   case 20: /* stmt: ifdef WORD other EOSTMT  */
-#line 197 "cmFortranParser.y"
+#line 200 "cmFortranParser.y"
                           {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleIfdef(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1796 "cmFortranParser.cxx"
+#line 1799 "cmFortranParser.cxx"
     break;
 
   case 21: /* stmt: ifndef WORD other EOSTMT  */
-#line 202 "cmFortranParser.y"
+#line 205 "cmFortranParser.y"
                            {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleIfndef(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1806 "cmFortranParser.cxx"
+#line 1809 "cmFortranParser.cxx"
     break;
 
   case 22: /* stmt: if other EOSTMT  */
-#line 207 "cmFortranParser.y"
+#line 210 "cmFortranParser.y"
                   {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleIf(parser);
   }
-#line 1815 "cmFortranParser.cxx"
+#line 1818 "cmFortranParser.cxx"
     break;
 
   case 23: /* stmt: elif other EOSTMT  */
-#line 211 "cmFortranParser.y"
+#line 214 "cmFortranParser.y"
                     {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleElif(parser);
   }
-#line 1824 "cmFortranParser.cxx"
+#line 1827 "cmFortranParser.cxx"
     break;
 
   case 24: /* stmt: else other EOSTMT  */
-#line 215 "cmFortranParser.y"
+#line 218 "cmFortranParser.y"
                     {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleElse(parser);
   }
-#line 1833 "cmFortranParser.cxx"
+#line 1836 "cmFortranParser.cxx"
     break;
 
   case 25: /* stmt: endif other EOSTMT  */
-#line 219 "cmFortranParser.y"
+#line 222 "cmFortranParser.y"
                      {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleEndif(parser);
   }
-#line 1842 "cmFortranParser.cxx"
+#line 1845 "cmFortranParser.cxx"
     break;
 
   case 49: /* misc_code: WORD  */
-#line 241 "cmFortranParser.y"
+#line 244 "cmFortranParser.y"
                       { free ((yyvsp[0].string)); }
-#line 1848 "cmFortranParser.cxx"
+#line 1851 "cmFortranParser.cxx"
     break;
 
   case 56: /* misc_code: STRING  */
-#line 248 "cmFortranParser.y"
+#line 251 "cmFortranParser.y"
                       { free ((yyvsp[0].string)); }
-#line 1854 "cmFortranParser.cxx"
+#line 1857 "cmFortranParser.cxx"
     break;
 
 
-#line 1858 "cmFortranParser.cxx"
+#line 1861 "cmFortranParser.cxx"
 
       default: break;
     }
@@ -2078,6 +2081,6 @@
   return yyresult;
 }
 
-#line 260 "cmFortranParser.y"
+#line 263 "cmFortranParser.y"
 
 /* End of grammar */
diff --git a/Source/LexerParser/cmFortranParser.y b/Source/LexerParser/cmFortranParser.y
index 431d6ab..77eaf75 100644
--- a/Source/LexerParser/cmFortranParser.y
+++ b/Source/LexerParser/cmFortranParser.y
@@ -57,6 +57,9 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
diff --git a/Source/LexerParser/cmFortranParserTokens.h b/Source/LexerParser/cmFortranParserTokens.h
index cb2b999..51b6a45 100644
--- a/Source/LexerParser/cmFortranParserTokens.h
+++ b/Source/LexerParser/cmFortranParserTokens.h
@@ -100,7 +100,7 @@
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 76 "cmFortranParser.y"
+#line 79 "cmFortranParser.y"
 
   char* string;
 
diff --git a/Source/cmCMakePresetsErrors.cxx b/Source/cmCMakePresetsErrors.cxx
index 8f82e66..be3d193 100644
--- a/Source/cmCMakePresetsErrors.cxx
+++ b/Source/cmCMakePresetsErrors.cxx
@@ -80,9 +80,16 @@
   state->AddErrorAtValue("Invalid preset", value);
 }
 
-void INVALID_PRESET_NAMED(std::string const& presetName, cmJSONState* state)
+void INVALID_PRESET_NAMED(std::string const& presetName,
+                          std::string const& kind, cmJSONState* state,
+                          std::string const& detail)
 {
-  state->AddError(cmStrCat("Invalid preset: \"", presetName, '"'));
+  std::string err_msg =
+    cmStrCat("Invalid ", kind, " preset: \"", presetName, '"');
+  if (!detail.empty()) {
+    err_msg = cmStrCat(err_msg, ": ", detail);
+  }
+  state->AddError(err_msg);
 }
 
 void INVALID_VARIABLE(Json::Value const* value, cmJSONState* state)
@@ -97,17 +104,18 @@
 }
 
 void CYCLIC_PRESET_INHERITANCE(std::string const& presetName,
-                               cmJSONState* state)
+                               std::string const& kind, cmJSONState* state)
 
 {
-  state->AddError(
-    cmStrCat("Cyclic preset inheritance for preset \"", presetName, '"'));
+  state->AddError(cmStrCat("Cyclic preset inheritance for ", kind,
+                           " preset \"", presetName, '"'));
 }
 
 void INHERITED_PRESET_UNREACHABLE_FROM_FILE(std::string const& presetName,
+                                            std::string const& kind,
                                             cmJSONState* state)
 {
-  state->AddError(cmStrCat("Inherited preset \"", presetName,
+  state->AddError(cmStrCat("Inherited ", kind, " preset \"", presetName,
                            "\" is unreachable from preset's file"));
 }
 
diff --git a/Source/cmCMakePresetsErrors.h b/Source/cmCMakePresetsErrors.h
index a153d92..e8ca3e5 100644
--- a/Source/cmCMakePresetsErrors.h
+++ b/Source/cmCMakePresetsErrors.h
@@ -35,16 +35,19 @@
 
 void INVALID_PRESET(Json::Value const* value, cmJSONState* state);
 
-void INVALID_PRESET_NAMED(std::string const& presetName, cmJSONState* state);
+void INVALID_PRESET_NAMED(std::string const& presetName,
+                          std::string const& kind, cmJSONState* state,
+                          std::string const& detail);
 
 void INVALID_VARIABLE(Json::Value const* value, cmJSONState* state);
 
 void DUPLICATE_PRESETS(std::string const& presetName, cmJSONState* state);
 
 void CYCLIC_PRESET_INHERITANCE(std::string const& presetName,
-                               cmJSONState* state);
+                               std::string const& kind, cmJSONState* state);
 
 void INHERITED_PRESET_UNREACHABLE_FROM_FILE(std::string const& presetName,
+                                            std::string const& kind,
                                             cmJSONState* state);
 
 void CONFIGURE_PRESET_UNREACHABLE_FROM_FILE(std::string const& presetName,
diff --git a/Source/cmCMakePresetsGraph.cxx b/Source/cmCMakePresetsGraph.cxx
index 212a97b..98dc6c6 100644
--- a/Source/cmCMakePresetsGraph.cxx
+++ b/Source/cmCMakePresetsGraph.cxx
@@ -109,8 +109,8 @@
 {
   switch (cycleStatus[preset.Name]) {
     case CycleStatus::InProgress:
-      cmCMakePresetsErrors::CYCLIC_PRESET_INHERITANCE(preset.Name,
-                                                      &graph.parseState);
+      cmCMakePresetsErrors::CYCLIC_PRESET_INHERITANCE(
+        preset.Name, preset.kind(), &graph.parseState);
       return false;
     case CycleStatus::Verified:
       return true;
@@ -121,28 +121,32 @@
   cycleStatus[preset.Name] = CycleStatus::InProgress;
 
   if (preset.Environment.count("") != 0) {
-    cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name, &graph.parseState);
+    cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+      preset.Name, preset.kind(), &graph.parseState,
+      "Empty environment variable names are not allowed");
     return false;
   }
 
   bool result = preset.VisitPresetBeforeInherit();
   if (!result) {
-    cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name, &graph.parseState);
+    cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+      preset.Name, preset.kind(), &graph.parseState, preset.ErrorDetail);
     return false;
   }
 
   for (auto const& i : preset.Inherits) {
     auto parent = presets.find(i);
     if (parent == presets.end()) {
-      cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name,
-                                                 &graph.parseState);
+      cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+        preset.Name, preset.kind(), &graph.parseState,
+        cmStrCat("Could not find inherited preset \"", i, "\""));
       return false;
     }
 
     auto& parentPreset = parent->second.Unexpanded;
     if (!preset.OriginFile->ReachableFiles.count(parentPreset.OriginFile)) {
       cmCMakePresetsErrors::INHERITED_PRESET_UNREACHABLE_FROM_FILE(
-        preset.Name, &graph.parseState);
+        preset.Name, preset.kind(), &graph.parseState);
       return false;
     }
 
@@ -152,8 +156,8 @@
 
     result = preset.VisitPresetInherit(parentPreset);
     if (!result) {
-      cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name,
-                                                 &graph.parseState);
+      cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+        preset.Name, preset.kind(), &graph.parseState, preset.ErrorDetail);
       return false;
     }
 
@@ -171,7 +175,8 @@
   result = preset.VisitPresetAfterInherit(graph.GetVersion(preset),
                                           &graph.parseState);
   if (!result) {
-    cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name, &graph.parseState);
+    cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+      preset.Name, preset.kind(), &graph.parseState, preset.ErrorDetail);
     return false;
   }
 
@@ -453,8 +458,9 @@
       switch (VisitEnv(*v.second, envCycles[v.first], macroExpanders,
                        graph->GetVersion(preset))) {
         case ExpandMacroResult::Error:
-          cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name,
-                                                     &graph->parseState);
+          cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+            preset.Name, preset.kind(), &graph->parseState,
+            "Invalid macro expansion");
           return false;
         case ExpandMacroResult::Ignore:
           out.reset();
@@ -471,8 +477,8 @@
     cm::optional<bool> result;
     if (!preset.ConditionEvaluator->Evaluate(
           macroExpanders, graph->GetVersion(preset), result)) {
-      cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name,
-                                                 &graph->parseState);
+      cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+        preset.Name, preset.kind(), &graph->parseState, "Invalid condition");
       return false;
     }
     if (!result) {
@@ -911,6 +917,8 @@
 {
   auto& preset = *this;
   if (preset.Environment.count("") != 0) {
+    this->ErrorDetail =
+      "Empty environment variable names are not allowed in configure presets";
     return false;
   }
 
@@ -945,6 +953,7 @@
     }
 
     if (preset.CacheVariables.count("") != 0) {
+      this->ErrorDetail = "Empty cache variable names are not allowed";
       return false;
     }
   }
@@ -977,7 +986,12 @@
 bool cmCMakePresetsGraph::BuildPreset::VisitPresetAfterInherit(
   int /* version */, cmJSONState* /*stat*/)
 {
-  return this->Hidden || !this->ConfigurePreset.empty();
+  if (!this->Hidden && this->ConfigurePreset.empty()) {
+    this->ErrorDetail = "Build presets must either be hidden or have an "
+                        "associated configure preset";
+    return false;
+  }
+  return true;
 }
 
 bool cmCMakePresetsGraph::TestPreset::VisitPresetInherit(
@@ -1087,7 +1101,12 @@
 bool cmCMakePresetsGraph::TestPreset::VisitPresetAfterInherit(
   int /* version */, cmJSONState* /*state*/)
 {
-  return this->Hidden || !this->ConfigurePreset.empty();
+  if (!this->Hidden && this->ConfigurePreset.empty()) {
+    this->ErrorDetail = "Test presets must either be hidden or have an "
+                        "associated configure preset";
+    return false;
+  }
+  return true;
 }
 
 bool cmCMakePresetsGraph::PackagePreset::VisitPresetInherit(
@@ -1116,7 +1135,12 @@
 bool cmCMakePresetsGraph::PackagePreset::VisitPresetAfterInherit(
   int /* version */, cmJSONState* /*state*/)
 {
-  return this->Hidden || !this->ConfigurePreset.empty();
+  if (!this->Hidden && this->ConfigurePreset.empty()) {
+    this->ErrorDetail = "Package presets must either be hidden or have an "
+                        "associated configure preset";
+    return false;
+  }
+  return true;
 }
 
 bool cmCMakePresetsGraph::WorkflowPreset::VisitPresetInherit(
diff --git a/Source/cmCMakePresetsGraph.h b/Source/cmCMakePresetsGraph.h
index 74063e4..f04dfdd 100644
--- a/Source/cmCMakePresetsGraph.h
+++ b/Source/cmCMakePresetsGraph.h
@@ -84,6 +84,8 @@
 
     std::map<std::string, cm::optional<std::string>> Environment;
 
+    std::string ErrorDetail;
+
     virtual bool VisitPresetInherit(Preset const& parent) = 0;
     virtual bool VisitPresetBeforeInherit() { return true; }
 
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index 9bec12f..caf450e 100644
--- a/Source/cmCTest.cxx
+++ b/Source/cmCTest.cxx
@@ -3267,6 +3267,7 @@
 
   // CTest Test Step
   set("CTEST_TEST_TIMEOUT", "TimeOut");
+  set("CTEST_TEST_COVERAGE_TOOL", "CTestTestCoverageTool");
 
   // CTest Coverage Step
   set("CTEST_COVERAGE_COMMAND", "CoverageCommand");
diff --git a/Source/cmDiagnostics.cxx b/Source/cmDiagnostics.cxx
index 60d3ec4..50d3c02 100644
--- a/Source/cmDiagnostics.cxx
+++ b/Source/cmDiagnostics.cxx
@@ -12,6 +12,28 @@
 #include "cmStringAlgorithms.h"
 
 namespace {
+
+#if __cplusplus >= 201703L
+constexpr unsigned validateDiagnosticsSubtree(unsigned parent, unsigned index)
+{
+  // Ensure that all diagnostics, starting from the specified index, have the
+  // specified parent as an ancestor. Return the first index that violates
+  // this condition.
+  while (index < cmDiagnostics::CategoryCount &&
+         cmDiagnostics::CategoryInfo[index].Parent == parent) {
+    unsigned const child = index;
+    // For each diagnostic, 'consume' its children (if any).
+    index = validateDiagnosticsSubtree(child, ++index);
+  }
+  return index;
+}
+
+static_assert(validateDiagnosticsSubtree(cmDiagnostics::CMD_NONE, 1) ==
+                cmDiagnostics::CategoryCount,
+              "Diagnostics are not properly ordered"
+              " (hint: LHS is the index of the first misordered diagnostic)");
+#endif
+
 cm::optional<cmDiagnosticCategory> stringToCategory(cm::string_view input)
 {
   using Map = std::map<cm::string_view, cmDiagnosticCategory>;
diff --git a/Source/cmDiagnostics.h b/Source/cmDiagnostics.h
index bad732b..84fe098 100644
--- a/Source/cmDiagnostics.h
+++ b/Source/cmDiagnostics.h
@@ -36,7 +36,7 @@
 #define CM_FOR_EACH_DIAGNOSTIC_CATEGORY(ACTION)                               \
   CM_FOR_EACH_DIAGNOSTIC_TABLE(ACTION, CM_SELECT_CATEGORY)
 
-/** \class cmDiagnostic
+/** \class cmDiagnostics
  * \brief Handles CMake diagnostic (warning) behavior
  *
  * See the cmake-diagnostics(7) manual for an overview of this class's purpose.
diff --git a/Source/cmDocumentation.cxx b/Source/cmDocumentation.cxx
index 66e3730..0cc2b64 100644
--- a/Source/cmDocumentation.cxx
+++ b/Source/cmDocumentation.cxx
@@ -26,7 +26,7 @@
 #include "cmVersion.h"
 
 namespace {
-cmDocumentationEntry const cmDocumentationStandardOptions[21] = {
+cmDocumentationEntry const cmDocumentationStandardOptions[] = {
   { "-h,-H,--help,-help,-usage,/?", "Print usage information and exit." },
   { "--version[=json-v1],-version[=json-v1],/V[=json-v1],/version[=json-v1] "
     "[<file>]",
@@ -39,6 +39,12 @@
   { "--help-command-list [<file>]",
     "List commands with help available and exit." },
   { "--help-commands [<file>]", "Print cmake-commands manual and exit." },
+  { "--help-diagnostic <diag> [<file>]",
+    "Print help for one diagnostic and exit." },
+  { "--help-diagnostic-list [<file>]",
+    "List diagnostics with help available and exit." },
+  { "--help-diagnostics [<file>]",
+    "Print cmake-diagnostics manual and exit." },
   { "--help-module <mod> [<file>]", "Print help for one module and exit." },
   { "--help-module-list [<file>]",
     "List modules with help available and exit." },
@@ -164,6 +170,8 @@
       return this->PrintHelpOneManual(os);
     case cmDocumentation::OneCommand:
       return this->PrintHelpOneCommand(os);
+    case cmDocumentation::OneDiagnostic:
+      return this->PrintHelpOneDiagnostic(os);
     case cmDocumentation::OneModule:
       return this->PrintHelpOneModule(os);
     case cmDocumentation::OnePolicy:
@@ -176,6 +184,8 @@
       return this->PrintHelpListManuals(os);
     case cmDocumentation::ListCommands:
       return this->PrintHelpListCommands(os);
+    case cmDocumentation::ListDiagnostics:
+      return this->PrintHelpListDiagnostics(os);
     case cmDocumentation::ListModules:
       return this->PrintHelpListModules(os);
     case cmDocumentation::ListProperties:
@@ -377,6 +387,11 @@
       cmSystemTools::Message(
         "Warning: --help-compatcommands no longer supported");
       return true;
+    } else if (strcmp(argv[i], "--help-diagnostics") == 0) {
+      help.HelpType = cmDocumentation::OneManual;
+      help.Argument = "cmake-diagnostics.7";
+      i += int(get_opt_argument(i + 1, help.Filename));
+      this->WarnFormFromFilename(help, result);
     } else if (strcmp(argv[i], "--help-full") == 0) {
       help.HelpType = cmDocumentation::Full;
       i += int(get_opt_argument(i + 1, help.Filename));
@@ -393,6 +408,12 @@
       i += int(get_opt_argument(i + 1, help.Filename));
       help.Argument = cmSystemTools::LowerCase(help.Argument);
       this->WarnFormFromFilename(help, result);
+    } else if (strcmp(argv[i], "--help-diagnostic") == 0) {
+      help.HelpType = cmDocumentation::OneDiagnostic;
+      i += int(get_opt_argument(i + 1, help.Argument));
+      i += int(get_opt_argument(i + 1, help.Filename));
+      help.Argument = cmSystemTools::UpperCase(help.Argument);
+      this->WarnFormFromFilename(help, result);
     } else if (strcmp(argv[i], "--help-module") == 0) {
       help.HelpType = cmDocumentation::OneModule;
       i += int(get_opt_argument(i + 1, help.Argument));
@@ -421,6 +442,9 @@
     } else if (strcmp(argv[i], "--help-command-list") == 0) {
       help.HelpType = cmDocumentation::ListCommands;
       i += int(get_opt_argument(i + 1, help.Filename));
+    } else if (strcmp(argv[i], "--help-diagnostic-list") == 0) {
+      help.HelpType = cmDocumentation::ListDiagnostics;
+      i += int(get_opt_argument(i + 1, help.Filename));
     } else if (strcmp(argv[i], "--help-module-list") == 0) {
       help.HelpType = cmDocumentation::ListModules;
       i += int(get_opt_argument(i + 1, help.Filename));
@@ -622,6 +646,25 @@
   return true;
 }
 
+bool cmDocumentation::PrintHelpOneDiagnostic(std::ostream& os)
+{
+  std::string dname = cmSystemTools::UpperCase(this->CurrentArgument);
+  if (this->PrintFiles(os, cmStrCat("diagnostic/", dname))) {
+    return true;
+  }
+  // Argument was not a command.  Complain.
+  os << "Argument \"" << this->CurrentArgument
+     << "\" to --help-command is not a CMake diagnostic.  "
+        "Use --help-diagnostic-list to see all diagnostics.\n";
+  return false;
+}
+
+bool cmDocumentation::PrintHelpListDiagnostics(std::ostream& os)
+{
+  this->PrintNames(os, "diagnostic/*");
+  return true;
+}
+
 bool cmDocumentation::PrintHelpOneModule(std::ostream& os)
 {
   std::string mname = this->CurrentArgument;
diff --git a/Source/cmDocumentation.h b/Source/cmDocumentation.h
index dd0fadb..e23cee9 100644
--- a/Source/cmDocumentation.h
+++ b/Source/cmDocumentation.h
@@ -30,6 +30,7 @@
     Full,
     ListManuals,
     ListCommands,
+    ListDiagnostics,
     ListModules,
     ListProperties,
     ListVariables,
@@ -38,6 +39,7 @@
     OneArbitrary,
     OneManual,
     OneCommand,
+    OneDiagnostic,
     OneModule,
     OneProperty,
     OneVariable,
@@ -124,12 +126,14 @@
   bool PrintHelpOneArbitrary(std::ostream& os);
   bool PrintHelpOneManual(std::ostream& os);
   bool PrintHelpOneCommand(std::ostream& os);
+  bool PrintHelpOneDiagnostic(std::ostream& os);
   bool PrintHelpOneModule(std::ostream& os);
   bool PrintHelpOnePolicy(std::ostream& os);
   bool PrintHelpOneProperty(std::ostream& os);
   bool PrintHelpOneVariable(std::ostream& os);
   bool PrintHelpListManuals(std::ostream& os);
   bool PrintHelpListCommands(std::ostream& os);
+  bool PrintHelpListDiagnostics(std::ostream& os);
   bool PrintHelpListModules(std::ostream& os);
   bool PrintHelpListProperties(std::ostream& os);
   bool PrintHelpListVariables(std::ostream& os);
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index aeb68a3..9d8311d 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -63,8 +63,8 @@
                                                openmodeApp);
   } else {
     // Generate atomically and with copy-if-different.
-    std::unique_ptr<cmGeneratedFileStream> ap(
-      new cmGeneratedFileStream(this->MainImportFile, true));
+    auto ap =
+      cm::make_unique<cmGeneratedFileStream>(this->MainImportFile, true);
     ap->SetCopyIfDifferent(true);
     foutPtr = std::move(ap);
   }
diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx
index 9a5e109..7427422 100644
--- a/Source/cmExtraEclipseCDT4Generator.cxx
+++ b/Source/cmExtraEclipseCDT4Generator.cxx
@@ -463,7 +463,8 @@
 }
 
 void cmExtraEclipseCDT4Generator::WriteGroups(
-  SourceGroupVector const& sourceGroups, std::string& linkName,
+  SourceGroupVector const& sourceGroups,
+  cmSourceGroupFiles const& sourceGroupFiles, std::string& linkName,
   cmXMLWriter& xml)
 {
   for (auto const& sg : sourceGroups) {
@@ -475,10 +476,11 @@
       xml, linkName3, "virtual:/virtual", VirtualFolder);
     SourceGroupVector const& children = sg->GetGroupChildren();
     if (!children.empty()) {
-      this->WriteGroups(children, linkName, xml);
+      this->WriteGroups(children, sourceGroupFiles, linkName, xml);
     }
-    std::vector<cmSourceFile const*> sFiles = sg->GetSourceFiles();
-    for (cmSourceFile const* file : sFiles) {
+    std::vector<cmSourceFile const*> const& sourceFiles =
+      sourceGroupFiles.GetSourceFiles(sg.get());
+    for (cmSourceFile const* file : sourceFiles) {
       std::string const& fullPath = file->GetFullPath();
 
       if (!cmSystemTools::FileIsDirectory(fullPath)) {
@@ -521,17 +523,18 @@
             break; // skip generating the linked resources to the source files
           }
           // get the files from the source lists then add them to the groups
+          cmSourceGroupFiles sourceGroupFiles;
           std::vector<cmSourceFile*> files;
           target->GetSourceFiles(
             files, makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"));
           for (cmSourceFile* sf : files) {
             // Add the file to the list of sources.
-            std::string const& source = sf->ResolveFullPath();
-            cmSourceGroup* sourceGroup = lg->FindSourceGroup(source);
-            sourceGroup->AssignSource(sf);
+            sourceGroupFiles.Add(lg->FindSourceGroup(sf->ResolveFullPath()),
+                                 sf);
           }
 
-          this->WriteGroups(makefile->GetSourceGroups(), linkName2, xml);
+          this->WriteGroups(makefile->GetSourceGroups(), sourceGroupFiles,
+                            linkName2, xml);
         } break;
         // ignore all others:
         default:
diff --git a/Source/cmExtraEclipseCDT4Generator.h b/Source/cmExtraEclipseCDT4Generator.h
index aa7cc25..fa92fb4 100644
--- a/Source/cmExtraEclipseCDT4Generator.h
+++ b/Source/cmExtraEclipseCDT4Generator.h
@@ -88,6 +88,7 @@
                         cmLocalGenerator& lg);
 
   void WriteGroups(SourceGroupVector const& sourceGroups,
+                   cmSourceGroupFiles const& sourceGroupFiles,
                    std::string& linkName, cmXMLWriter& xml);
   void CreateLinksToSubprojects(cmXMLWriter& xml, std::string const& baseDir);
   void CreateLinksForTargets(cmXMLWriter& xml);
diff --git a/Source/cmFastbuildNormalTargetGenerator.cxx b/Source/cmFastbuildNormalTargetGenerator.cxx
index 615c45b..f450823 100644
--- a/Source/cmFastbuildNormalTargetGenerator.cxx
+++ b/Source/cmFastbuildNormalTargetGenerator.cxx
@@ -1419,8 +1419,8 @@
     useUnity = false;
   }
 
-  // List of sources isolated from the unity build if enabled.
-  std::set<std::string> isolatedFromUnity;
+  // List of sources excluded from the unity build if enabled.
+  std::set<std::string> excludedFromUnity;
 
   // Mapping from unity group (if any) to sources belonging to that group.
   std::map<std::string, std::vector<std::string>> sourcesWithGroups;
@@ -1431,10 +1431,10 @@
     std::string const pathToFile = srcFile.GetFullPath();
     bool fileUsesUnity = useUnity;
     if (useUnity) {
-      // Check if the source should be added to "UnityInputIsolatedFiles".
+      // Check if the source should be added to "UnityInputExcludedFiles".
       if (srcFile.GetPropertyAsBool(SKIP_UNITY_BUILD_INCLUSION)) {
         fileUsesUnity = false;
-        isolatedFromUnity.emplace(pathToFile);
+        excludedFromUnity.emplace(pathToFile);
       }
       std::string const perFileUnityGroup =
         srcFile.GetSafeProperty(UNITY_GROUP);
@@ -1573,27 +1573,27 @@
   }
   if (useUnity) {
     target.UnityNodes =
-      GenerateUnity(objects, isolatedFromUnity, sourcesWithGroups);
+      GenerateUnity(objects, excludedFromUnity, sourcesWithGroups);
   }
 }
 
 FastbuildUnityNode cmFastbuildNormalTargetGenerator::GetOneUnity(
-  std::set<std::string> const& isolatedFiles, std::vector<std::string>& files,
+  std::set<std::string> const& excludedFiles, std::vector<std::string>& files,
   int unitySize) const
 {
   FastbuildUnityNode result;
   for (auto iter = files.begin(); iter != files.end();) {
     std::string pathToFile = std::move(*iter);
     iter = files.erase(iter);
-    // This source must be isolated
-    if (isolatedFiles.find(pathToFile) != isolatedFiles.end()) {
+    // This source must be excluded from the generated unity file.
+    if (excludedFiles.find(pathToFile) != excludedFiles.end()) {
       result.UnityInputFiles.emplace_back(pathToFile);
-      result.UnityInputIsolatedFiles.emplace_back(std::move(pathToFile));
+      result.UnityInputExcludedFiles.emplace_back(std::move(pathToFile));
     } else {
       result.UnityInputFiles.emplace_back(std::move(pathToFile));
     }
     if (int(result.UnityInputFiles.size() -
-            result.UnityInputIsolatedFiles.size()) == unitySize) {
+            result.UnityInputExcludedFiles.size()) == unitySize) {
       break;
     }
   }
@@ -1623,7 +1623,7 @@
 std::vector<FastbuildUnityNode>
 cmFastbuildNormalTargetGenerator::GenerateUnity(
   std::vector<FastbuildObjectListNode>& objects,
-  std::set<std::string> const& isolatedSources,
+  std::set<std::string> const& excludedSources,
   std::map<std::string, std::vector<std::string>> const& sourcesWithGroups)
 {
   int const unitySize = GetUnityBatchSize();
@@ -1656,14 +1656,14 @@
     // General unity batching of the remaining (non-grouped) sources.
     while (!obj.CompilerInputFiles.empty()) {
       FastbuildUnityNode node =
-        GetOneUnity(isolatedSources, obj.CompilerInputFiles, unitySize);
+        GetOneUnity(excludedSources, obj.CompilerInputFiles, unitySize);
       node.Name = cmStrCat(this->GetName(), "_Unity_", ++unityNumber);
       node.UnityOutputPath = obj.CompilerOutputPath;
       node.UnityOutputPattern = cmStrCat(node.Name, ext);
 
-      // Unity group of size 1 doesn't make sense - just isolate the source.
+      // Unity group of size 1 doesn't make sense - just exclude the source.
       if (groupedNode.UnityInputFiles.size() == 1) {
-        node.UnityInputIsolatedFiles.emplace_back(
+        node.UnityInputExcludedFiles.emplace_back(
           groupedNode.UnityInputFiles[0]);
         node.UnityInputFiles.emplace_back(
           std::move(groupedNode.UnityInputFiles[0]));
diff --git a/Source/cmFastbuildNormalTargetGenerator.h b/Source/cmFastbuildNormalTargetGenerator.h
index 8a01f77..bc630b4 100644
--- a/Source/cmFastbuildNormalTargetGenerator.h
+++ b/Source/cmFastbuildNormalTargetGenerator.h
@@ -76,14 +76,14 @@
                                       std::string& args) const;
   void GenerateCudaDeviceLink(FastbuildTarget& target) const;
   void GenerateObjects(FastbuildTarget& target);
-  FastbuildUnityNode GetOneUnity(std::set<std::string> const& isolatedFiles,
+  FastbuildUnityNode GetOneUnity(std::set<std::string> const& excludedFiles,
                                  std::vector<std::string>& files,
                                  int unitySize) const;
 
   int GetUnityBatchSize() const;
   std::vector<FastbuildUnityNode> GenerateUnity(
     std::vector<FastbuildObjectListNode>& objects,
-    std::set<std::string> const& isolatedSources,
+    std::set<std::string> const& excludedSources,
     std::map<std::string, std::vector<std::string>> const& sourcesWithGroups);
   FastbuildUnityNode GenerateGroupedUnityNode(
     std::vector<std::string>& inputFiles,
diff --git a/Source/cmFileAPICodemodel.cxx b/Source/cmFileAPICodemodel.cxx
index 3d398b2..8b214b6 100644
--- a/Source/cmFileAPICodemodel.cxx
+++ b/Source/cmFileAPICodemodel.cxx
@@ -486,7 +486,7 @@
   void ProcessLanguages();
   void ProcessLanguage(std::string const& lang);
 
-  Json::ArrayIndex AddSourceGroup(cmSourceGroup* sg);
+  Json::ArrayIndex AddSourceGroup(cmSourceGroup const* sg);
   CompileData BuildCompileData(cmSourceFile* sf);
   CompileData MergeCompileData(CompileData const& fd);
   Json::ArrayIndex AddSourceCompileGroup(cmSourceFile* sf,
@@ -1469,7 +1469,7 @@
   }
 }
 
-Json::ArrayIndex Target::AddSourceGroup(cmSourceGroup* sg)
+Json::ArrayIndex Target::AddSourceGroup(cmSourceGroup const* sg)
 {
   auto i = this->SourceGroupsMap.find(sg);
   if (i == this->SourceGroupsMap.end()) {
@@ -1802,7 +1802,8 @@
     source["fileSetIndex"] = fsit->second;
   }
 
-  if (cmSourceGroup* sg = this->GT->LocalGenerator->FindSourceGroup(path)) {
+  if (cmSourceGroup const* sg =
+        this->GT->LocalGenerator->FindSourceGroup(path)) {
     Json::ArrayIndex const groupIndex = this->AddSourceGroup(sg);
     source["sourceGroupIndex"] = groupIndex;
     this->SourceGroups[groupIndex].SourceIndexes.append(si);
@@ -1888,7 +1889,8 @@
     source["fileSetIndex"] = fsit->second;
   }
 
-  if (cmSourceGroup* sg = this->GT->LocalGenerator->FindSourceGroup(path)) {
+  if (cmSourceGroup const* sg =
+        this->GT->LocalGenerator->FindSourceGroup(path)) {
     Json::ArrayIndex const groupIndex = this->AddSourceGroup(sg);
     source["sourceGroupIndex"] = groupIndex;
     this->SourceGroups[groupIndex].InterfaceSourceIndexes.append(si);
diff --git a/Source/cmGhsMultiTargetGenerator.cxx b/Source/cmGhsMultiTargetGenerator.cxx
index 9c08298..5c1d1c4 100644
--- a/Source/cmGhsMultiTargetGenerator.cxx
+++ b/Source/cmGhsMultiTargetGenerator.cxx
@@ -545,7 +545,7 @@
   std::map<std::string, std::vector<cmSourceFile*>> groupFiles;
   std::set<std::string> groupNames;
   for (cmSourceFile* sf : sources) {
-    cmSourceGroup* sourceGroup =
+    cmSourceGroup const* sourceGroup =
       this->LocalGenerator->FindSourceGroup(sf->ResolveFullPath());
     std::string gn = sourceGroup->GetFullName();
     groupFiles[gn].push_back(sf);
diff --git a/Source/cmGlobalFastbuildGenerator.cxx b/Source/cmGlobalFastbuildGenerator.cxx
index 9013c5e..e906e6f 100644
--- a/Source/cmGlobalFastbuildGenerator.cxx
+++ b/Source/cmGlobalFastbuildGenerator.cxx
@@ -1201,9 +1201,9 @@
     WriteVariable("UnityOutputPath", Quote(Unity.UnityOutputPath), 2);
     WriteVariable("UnityOutputPattern", Quote(Unity.UnityOutputPattern), 2);
     WriteArray("UnityInputFiles", Wrap(Unity.UnityInputFiles), 2);
-    if (!Unity.UnityInputIsolatedFiles.empty()) {
-      WriteArray("UnityInputIsolatedFiles",
-                 Wrap(Unity.UnityInputIsolatedFiles), 2);
+    if (!Unity.UnityInputExcludedFiles.empty()) {
+      WriteArray("UnityInputExcludedFiles",
+                 Wrap(Unity.UnityInputExcludedFiles), 2);
     }
     if (UsingRelativePaths) {
       WriteVariable("UseRelativePaths_Experimental", "true", 2);
diff --git a/Source/cmGlobalFastbuildGenerator.h b/Source/cmGlobalFastbuildGenerator.h
index f2aa938..07e8772 100644
--- a/Source/cmGlobalFastbuildGenerator.h
+++ b/Source/cmGlobalFastbuildGenerator.h
@@ -233,7 +233,7 @@
   std::string UnityOutputPath;
   std::vector<std::string> UnityInputFiles;
   std::string UnityOutputPattern;
-  std::vector<std::string> UnityInputIsolatedFiles;
+  std::vector<std::string> UnityInputExcludedFiles;
   FastbuildUnityNode()
     : FastbuildTargetBase(FastbuildTargetType::UNITY)
   {
diff --git a/Source/cmGlobalVisualStudioGenerator.cxx b/Source/cmGlobalVisualStudioGenerator.cxx
index c273c87..bfbb24f 100644
--- a/Source/cmGlobalVisualStudioGenerator.cxx
+++ b/Source/cmGlobalVisualStudioGenerator.cxx
@@ -1063,7 +1063,7 @@
       item =
         cmSystemTools::CollapseFullPath(item, mf->GetCurrentSourceDirectory());
     }
-    cmSourceGroup* sg =
+    cmSourceGroup const* sg =
       cmSourceGroup::FindSourceGroup(item, mf->GetSourceGroups());
     std::string folderName = sg->GetFullName();
     if (folderName.empty()) {
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index 1fedd91..1e467e7 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -4563,7 +4563,7 @@
 
       auto addSourceToGroup = [this, &gtgt,
                                &generator](std::string const& source) {
-        cmSourceGroup* sourceGroup = generator->FindSourceGroup(source);
+        cmSourceGroup const* sourceGroup = generator->FindSourceGroup(source);
         cmXCodeObject* pbxgroup =
           this->CreateOrGetPBXGroup(gtgt.get(), sourceGroup);
         std::string key = GetGroupMapKeyFromPath(gtgt.get(), source);
@@ -4639,7 +4639,7 @@
 }
 
 cmXCodeObject* cmGlobalXCodeGenerator::CreateOrGetPBXGroup(
-  cmGeneratorTarget* gtgt, cmSourceGroup* sg)
+  cmGeneratorTarget* gtgt, cmSourceGroup const* sg)
 {
   std::string s;
   std::string target;
diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h
index 82bb9d5..114caec 100644
--- a/Source/cmGlobalXCodeGenerator.h
+++ b/Source/cmGlobalXCodeGenerator.h
@@ -161,7 +161,7 @@
                             cm::string_view attributeValue);
 
   cmXCodeObject* CreateOrGetPBXGroup(cmGeneratorTarget* gtgt,
-                                     cmSourceGroup* sg);
+                                     cmSourceGroup const* sg);
   cmXCodeObject* CreatePBXGroup(cmXCodeObject* parent,
                                 std::string const& name);
   bool CreateGroups(std::vector<cmLocalGenerator*>& generators);
diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx
index 6de9c50..fa14c0a 100644
--- a/Source/cmLocalVisualStudio7Generator.cxx
+++ b/Source/cmLocalVisualStudio7Generator.cxx
@@ -1388,6 +1388,8 @@
   AllConfigSources sources;
   sources.Sources = target->GetAllConfigSources();
 
+  cmSourceGroupFiles sourceGroupFiles;
+
   // Add CMakeLists.txt file with rule to re-run CMake for user convenience.
   if (target->GetType() != cmStateEnums::GLOBAL_TARGET &&
       target->GetName() != CMAKE_CHECK_BUILD_SYSTEM_TARGET) {
@@ -1425,9 +1427,7 @@
       }
     }
     // Add the file to the list of sources.
-    std::string const source = sf->GetFullPath();
-    cmSourceGroup* sourceGroup = this->FindSourceGroup(source);
-    sourceGroup->AssignSource(sf);
+    sourceGroupFiles.Add(this->FindSourceGroup(sf->GetFullPath()), sf);
   }
 
   // open the project
@@ -1440,7 +1440,8 @@
   // Loop through every source group.
   SourceGroupVector const& sourceGroups = this->Makefile->GetSourceGroups();
   for (auto const& sg : sourceGroups) {
-    this->WriteGroup(sg.get(), target, fout, libName, configs, sources);
+    this->WriteGroup(sg.get(), target, fout, libName, configs, sources,
+                     sourceGroupFiles);
   }
 
   fout << "\t</Files>\n";
@@ -1688,11 +1689,12 @@
 bool cmLocalVisualStudio7Generator::WriteGroup(
   cmSourceGroup const* sg, cmGeneratorTarget* target, std::ostream& fout,
   std::string const& libName, std::vector<std::string> const& configs,
-  AllConfigSources const& sources)
+  AllConfigSources const& sources, cmSourceGroupFiles const& sourceGroupFiles)
 {
   cmGlobalVisualStudio7Generator* gg =
     static_cast<cmGlobalVisualStudio7Generator*>(this->GlobalGenerator);
-  std::vector<cmSourceFile const*> const& sourceFiles = sg->GetSourceFiles();
+  std::vector<cmSourceFile const*> const& sourceFiles =
+    sourceGroupFiles.GetSourceFiles(sg);
   SourceGroupVector const& children = sg->GetGroupChildren();
 
   // Write the children to temporary output.
@@ -1700,7 +1702,7 @@
   std::ostringstream tmpOut;
   for (auto const& child : children) {
     if (this->WriteGroup(child.get(), target, tmpOut, libName, configs,
-                         sources)) {
+                         sources, sourceGroupFiles)) {
       hasChildrenWithSources = true;
     }
   }
diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h
index 38df53b..885d8ca 100644
--- a/Source/cmLocalVisualStudio7Generator.h
+++ b/Source/cmLocalVisualStudio7Generator.h
@@ -23,6 +23,7 @@
 class cmMakefile;
 class cmSourceFile;
 class cmSourceGroup;
+class cmSourceGroupFiles;
 
 class cmVS7GeneratorOptions : public cmVisualStudioGeneratorOptions
 {
@@ -147,7 +148,8 @@
   bool WriteGroup(cmSourceGroup const* sg, cmGeneratorTarget* target,
                   std::ostream& fout, std::string const& libName,
                   std::vector<std::string> const& configs,
-                  AllConfigSources const& sources);
+                  AllConfigSources const& sources,
+                  cmSourceGroupFiles const& sourceGroupFiles);
 
   friend class cmLocalVisualStudio7GeneratorFCInfo;
   friend class cmLocalVisualStudio7GeneratorInternals;
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index d755360..11b5446 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -3870,11 +3870,11 @@
                                         bool global)
 {
   // Create the target.
-  std::unique_ptr<cmTarget> target(
-    new cmTarget(name, type,
-                 global ? cmTarget::Visibility::ImportedGlobally
-                        : cmTarget::Visibility::Imported,
-                 this, cmTarget::PerConfig::Yes));
+  auto target =
+    cm::make_unique<cmTarget>(name, type,
+                              global ? cmTarget::Visibility::ImportedGlobally
+                                     : cmTarget::Visibility::Imported,
+                              this, cmTarget::PerConfig::Yes);
 
   // Add to the set of available imported targets.
   this->ImportedTargets[name] = target.get();
@@ -3890,9 +3890,9 @@
                                        std::string const& name)
 {
   auto foreign_name = cmStrCat("@foreign_", origin, "::", name);
-  std::unique_ptr<cmTarget> target(new cmTarget(
+  auto target = cm::make_unique<cmTarget>(
     foreign_name, cmStateEnums::TargetType::INTERFACE_LIBRARY,
-    cmTarget::Visibility::Foreign, this, cmTarget::PerConfig::Yes));
+    cmTarget::Visibility::Foreign, this, cmTarget::PerConfig::Yes);
 
   this->ImportedTargets[foreign_name] = target.get();
   this->GetGlobalGenerator()->IndexTarget(target.get());
diff --git a/Source/cmRST.cxx b/Source/cmRST.cxx
index e490370..0d3f3bc 100644
--- a/Source/cmRST.cxx
+++ b/Source/cmRST.cxx
@@ -20,7 +20,7 @@
   : OS(os)
   , DocRoot(std::move(docroot))
   , CMakeDirective("^.. (cmake:)?("
-                   "command|envvar|genex|signature|variable"
+                   "command|diagnostic|envvar|genex|signature|variable"
                    ")::")
   , CMakeModuleDirective("^.. cmake-module::[ \t]+([^ \t\n]+)$")
   , ParsedLiteralDirective("^.. parsed-literal::[ \t]*(.*)$")
@@ -34,7 +34,7 @@
   , ModuleRST(R"(^#\[(=*)\[\.rst:$)")
   , CMakeRole("(:cmake)?:("
               "cref|"
-              "command|cpack_gen|generator|genex|"
+              "command|cpack_gen|diagnostic|generator|genex|"
               "variable|envvar|module|policy|"
               "prop_cache|prop_dir|prop_gbl|prop_inst|prop_sf|"
               "prop_test|prop_tgt|"
diff --git a/Source/cmSourceGroup.cxx b/Source/cmSourceGroup.cxx
index 7251810..3b5feea 100644
--- a/Source/cmSourceGroup.cxx
+++ b/Source/cmSourceGroup.cxx
@@ -7,7 +7,6 @@
 #include <cm/memory>
 
 #include "cmGeneratorExpression.h"
-#include "cmSourceFile.h"
 #include "cmStringAlgorithms.h"
 
 class cmSourceGroupInternals
@@ -85,21 +84,11 @@
   return this->GroupFiles.find(name) != this->GroupFiles.cend();
 }
 
-void cmSourceGroup::AssignSource(cmSourceFile const* sf)
-{
-  this->SourceFiles.push_back(sf);
-}
-
 std::set<std::string> const& cmSourceGroup::GetGroupFiles() const
 {
   return this->GroupFiles;
 }
 
-std::vector<cmSourceFile const*> const& cmSourceGroup::GetSourceFiles() const
-{
-  return this->SourceFiles;
-}
-
 void cmSourceGroup::AddChild(std::unique_ptr<cmSourceGroup> child)
 {
   this->Internal->GroupChildren.push_back(std::move(child));
@@ -196,3 +185,19 @@
   // Shouldn't get here, but just in case, return the default group.
   return groups.data()->get();
 }
+
+void cmSourceGroupFiles::Add(cmSourceGroup const* sg, cmSourceFile const* sf)
+{
+  this->SourceFiles[sg].push_back(sf);
+}
+
+std::vector<cmSourceFile const*> const& cmSourceGroupFiles::GetSourceFiles(
+  cmSourceGroup const* sg) const
+{
+  auto i = this->SourceFiles.find(sg);
+  if (i != this->SourceFiles.end()) {
+    return i->second;
+  }
+  static std::vector<cmSourceFile const*> const empty;
+  return empty;
+}
diff --git a/Source/cmSourceGroup.h b/Source/cmSourceGroup.h
index 4ce79ed..ff7d23f 100644
--- a/Source/cmSourceGroup.h
+++ b/Source/cmSourceGroup.h
@@ -4,6 +4,7 @@
 
 #include "cmConfigure.h" // IWYU pragma: keep
 
+#include <map>
 #include <memory>
 #include <set>
 #include <string>
@@ -100,22 +101,10 @@
   cmSourceGroup* MatchChildrenRegex(std::string const& name) const;
 
   /**
-   * Assign the given source file to this group.  Used only by
-   * generators.
-   */
-  void AssignSource(cmSourceFile const* sf);
-
-  /**
    * Get the set of file names explicitly added to this source group.
    */
   std::set<std::string> const& GetGroupFiles() const;
 
-  /**
-   * Get the list of the source files that have been assigned to this
-   * source group.
-   */
-  std::vector<cmSourceFile const*> const& GetSourceFiles() const;
-
   SourceGroupVector const& GetGroupChildren() const;
 
   /**
@@ -142,11 +131,18 @@
    */
   std::set<std::string> GroupFiles;
 
-  /**
-   * Vector of all source files that have been assigned to
-   * this group.
-   */
-  std::vector<cmSourceFile const*> SourceFiles;
-
   std::unique_ptr<cmSourceGroupInternals> Internal;
 };
+
+/** \class cmSourceGroup
+ * \brief Used by generators to organize a target's sources into groups.
+ */
+class cmSourceGroupFiles
+{
+  std::map<cmSourceGroup const*, std::vector<cmSourceFile const*>> SourceFiles;
+
+public:
+  void Add(cmSourceGroup const* sg, cmSourceFile const* sf);
+  std::vector<cmSourceFile const*> const& GetSourceFiles(
+    cmSourceGroup const* sg) const;
+};
diff --git a/Source/cmStringAlgorithms.h b/Source/cmStringAlgorithms.h
index 966091a..9e846d5 100644
--- a/Source/cmStringAlgorithms.h
+++ b/Source/cmStringAlgorithms.h
@@ -226,9 +226,9 @@
   {
   }
   cmAlphaNum(char ch)
-    : View_(this->Digits_, 1)
   {
     this->Digits_[0] = ch;
+    this->View_ = cm::string_view(this->Digits_, 1);
   }
   cmAlphaNum(int val);
   cmAlphaNum(unsigned int val);
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 8ec4cb0..6bb6935 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -2084,6 +2084,9 @@
   static Resolver<Policies::LogicalPath> const resolver(RealOS);
 #endif
   resolver.Resolve(std::move(p), p);
+#ifdef __clang_analyzer__ /* cplusplus.Move */
+  p.clear();
+#endif
   return p;
 }
 
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 6622957..71da193 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -2007,14 +2007,16 @@
   std::set<cmSourceGroup const*> groupsUsed;
   for (cmGeneratorTarget::AllConfigSource const& si : sources) {
     std::string const& source = si.Source->GetFullPath();
-    cmSourceGroup* sourceGroup = this->LocalGenerator->FindSourceGroup(source);
+    cmSourceGroup const* sourceGroup =
+      this->LocalGenerator->FindSourceGroup(source);
     groupsUsed.insert(sourceGroup);
   }
 
   if (cmSourceFile const* srcCMakeLists =
         this->LocalGenerator->CreateVCProjBuildRule()) {
     std::string const& source = srcCMakeLists->GetFullPath();
-    cmSourceGroup* sourceGroup = this->LocalGenerator->FindSourceGroup(source);
+    cmSourceGroup const* sourceGroup =
+      this->LocalGenerator->FindSourceGroup(source);
     groupsUsed.insert(sourceGroup);
   }
 
@@ -2173,7 +2175,8 @@
   for (ToolSource const& s : sources) {
     cmSourceFile const* sf = s.SourceFile;
     std::string const& source = sf->GetFullPath();
-    cmSourceGroup* sourceGroup = this->LocalGenerator->FindSourceGroup(source);
+    cmSourceGroup const* sourceGroup =
+      this->LocalGenerator->FindSourceGroup(source);
     std::string const& filter = sourceGroup->GetFullName();
     std::string path = this->ConvertPath(source, s.RelativePath);
     ConvertToWindowsSlash(path);
@@ -6075,7 +6078,7 @@
   std::string const& fullFileName = source->GetFullPath();
   std::string const& srcDir = this->Makefile->GetCurrentSourceDirectory();
   std::string const& binDir = this->Makefile->GetCurrentBinaryDirectory();
-  cmSourceGroup* sourceGroup =
+  cmSourceGroup const* sourceGroup =
     this->LocalGenerator->FindSourceGroup(fullFileName);
   if (sourceGroup && !sourceGroup->GetFullName().empty()) {
     sourceGroupedFile =
diff --git a/Templates/CTestScript.cmake.in b/Templates/CTestScript.cmake.in
index 54bfda4..cd79a23 100644
--- a/Templates/CTestScript.cmake.in
+++ b/Templates/CTestScript.cmake.in
@@ -48,6 +48,7 @@
 set(CTEST_RESOURCE_SPEC_FILE "@CTEST_RESOURCE_SPEC_FILE@")
 set(CTEST_TEST_LOAD "@CTEST_TEST_LOAD@")
 set(CTEST_TEST_TIMEOUT "@DART_TESTING_TIMEOUT@")
+set(CTEST_TEST_COVERAGE_TOOL "@COVERAGE_TOOL@"
 
 # CTest Coverage Step
 set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@")
diff --git a/Tests/CMakeTests/ProcessorCountTest.cmake.in b/Tests/CMakeTests/ProcessorCountTest.cmake.in
index f92dcc4..a2595c7 100644
--- a/Tests/CMakeTests/ProcessorCountTest.cmake.in
+++ b/Tests/CMakeTests/ProcessorCountTest.cmake.in
@@ -1,5 +1,8 @@
 include(ProcessorCount)
 
+set(CMAKE_EXECUTE_PROCESS_COMMAND_ERROR_IS_FATAL ANY)
+# ProcessorCount() must tolerate execute_process() failures
+
 ProcessorCount(processor_count)
 
 message("### 1. This line should be the first line of text in the test output.")
diff --git a/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-result.txt b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-stderr.txt b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-stderr.txt
new file mode 100644
index 0000000..e8d349d
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey:
+Invalid build preset: "EmptyEnvKey": Empty environment variable names are not allowed$
diff --git a/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey.json.in b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey.json.in
new file mode 100644
index 0000000..7e9932b
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 2,
+  "buildPresets": [
+    {
+      "name": "EmptyEnvKey",
+      "environment": {
+        "": "value"
+      }
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-result.txt b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-stderr.txt b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-stderr.txt
new file mode 100644
index 0000000..e9ba8c2
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/BuildInvalidInheritance:
+Invalid build preset: "InvalidInheritance": Could not find inherited preset "NoExist"$
diff --git a/Tests/RunCMake/CMakePresets/BuildInvalidInheritance.json.in b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance.json.in
new file mode 100644
index 0000000..2dd5d81
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 2,
+  "buildPresets": [
+    {
+      "name": "InvalidInheritance",
+      "inherits": [
+        "NoExist"
+      ]
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/CyclicInheritance0-stderr.txt b/Tests/RunCMake/CMakePresets/CyclicInheritance0-stderr.txt
index 2d5b477..d7366f7 100644
--- a/Tests/RunCMake/CMakePresets/CyclicInheritance0-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/CyclicInheritance0-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/CyclicInheritance0:
-Cyclic preset inheritance for preset "CyclicInheritance0"$
+Cyclic preset inheritance for configure preset "CyclicInheritance0"$
diff --git a/Tests/RunCMake/CMakePresets/CyclicInheritance1-stderr.txt b/Tests/RunCMake/CMakePresets/CyclicInheritance1-stderr.txt
index 596fcf8..e2d9d11 100644
--- a/Tests/RunCMake/CMakePresets/CyclicInheritance1-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/CyclicInheritance1-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/CyclicInheritance1:
-Cyclic preset inheritance for preset "CyclicInheritance0"$
+Cyclic preset inheritance for configure preset "CyclicInheritance0"$
diff --git a/Tests/RunCMake/CMakePresets/CyclicInheritance2-stderr.txt b/Tests/RunCMake/CMakePresets/CyclicInheritance2-stderr.txt
index a6b83c8..99fe0bd 100644
--- a/Tests/RunCMake/CMakePresets/CyclicInheritance2-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/CyclicInheritance2-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/CyclicInheritance2:
-Cyclic preset inheritance for preset "CyclicInheritance0"$
+Cyclic preset inheritance for configure preset "CyclicInheritance0"$
diff --git a/Tests/RunCMake/CMakePresets/EmptyCacheKey-stderr.txt b/Tests/RunCMake/CMakePresets/EmptyCacheKey-stderr.txt
index cb9e545..d6f402f 100644
--- a/Tests/RunCMake/CMakePresets/EmptyCacheKey-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/EmptyCacheKey-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/EmptyCacheKey:
-Invalid preset: "EmptyCacheKey"$
+Invalid configure preset: "EmptyCacheKey": Empty cache variable names are not allowed$
diff --git a/Tests/RunCMake/CMakePresets/EmptyEnvKey-stderr.txt b/Tests/RunCMake/CMakePresets/EmptyEnvKey-stderr.txt
index bc0f866..a357267 100644
--- a/Tests/RunCMake/CMakePresets/EmptyEnvKey-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/EmptyEnvKey-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/EmptyEnvKey:
-Invalid preset: "EmptyEnvKey"$
+Invalid configure preset: "EmptyEnvKey": Empty environment variable names are not allowed$
diff --git a/Tests/RunCMake/CMakePresets/EnvCycle-stderr.txt b/Tests/RunCMake/CMakePresets/EnvCycle-stderr.txt
index 8e19c69..eb658ce 100644
--- a/Tests/RunCMake/CMakePresets/EnvCycle-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/EnvCycle-stderr.txt
@@ -1,4 +1,4 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/EnvCycle:
-Invalid preset: "EnvCycle"
+Invalid configure preset: "EnvCycle": Invalid macro expansion
 Invalid macro expansion in "EnvCycle"$
diff --git a/Tests/RunCMake/CMakePresets/ErrorNoWarningDeprecated-stderr.txt b/Tests/RunCMake/CMakePresets/ErrorNoWarningDeprecated-stderr.txt
index 5c02d5b..dd47dc7 100644
--- a/Tests/RunCMake/CMakePresets/ErrorNoWarningDeprecated-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/ErrorNoWarningDeprecated-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/ErrorNoWarningDeprecated:
-Invalid preset: "ErrorNoWarningDeprecated"$
+Invalid configure preset: "ErrorNoWarningDeprecated"$
diff --git a/Tests/RunCMake/CMakePresets/ErrorNoWarningDev-stderr.txt b/Tests/RunCMake/CMakePresets/ErrorNoWarningDev-stderr.txt
index 4640b1e..ca087b1 100644
--- a/Tests/RunCMake/CMakePresets/ErrorNoWarningDev-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/ErrorNoWarningDev-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/ErrorNoWarningDev:
-Invalid preset: "ErrorNoWarningDev"$
+Invalid configure preset: "ErrorNoWarningDev"$
diff --git a/Tests/RunCMake/CMakePresets/InvalidInheritance-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidInheritance-stderr.txt
index 216f308..a8eb597 100644
--- a/Tests/RunCMake/CMakePresets/InvalidInheritance-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidInheritance-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidInheritance:
-Invalid preset: "InvalidInheritance"$
+Invalid configure preset: "InvalidInheritance": Could not find inherited preset "NoExist"$
diff --git a/Tests/RunCMake/CMakePresets/InvalidRegex-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidRegex-stderr.txt
index 86cd861..b948676 100644
--- a/Tests/RunCMake/CMakePresets/InvalidRegex-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidRegex-stderr.txt
@@ -1,4 +1,4 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidRegex:
-Invalid preset: "InvalidRegex"
+Invalid configure preset: "InvalidRegex": Invalid condition
 Invalid macro expansion in "InvalidRegex"$
diff --git a/Tests/RunCMake/CMakePresets/NoPresetBinaryDir-stderr.txt b/Tests/RunCMake/CMakePresets/NoPresetBinaryDir-stderr.txt
index bae9794..ccd3d4c 100644
--- a/Tests/RunCMake/CMakePresets/NoPresetBinaryDir-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/NoPresetBinaryDir-stderr.txt
@@ -1,4 +1,4 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/NoPresetBinaryDir:
 Preset "NoPresetBinaryDir" missing field "binaryDir"
-Invalid preset: "NoPresetBinaryDir"$
+Invalid configure preset: "NoPresetBinaryDir"$
diff --git a/Tests/RunCMake/CMakePresets/NoPresetGenerator-stderr.txt b/Tests/RunCMake/CMakePresets/NoPresetGenerator-stderr.txt
index c7e5b5e..51558cd 100644
--- a/Tests/RunCMake/CMakePresets/NoPresetGenerator-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/NoPresetGenerator-stderr.txt
@@ -1,4 +1,4 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/NoPresetGenerator:
 Preset "NoPresetGenerator" missing field "generator"
-Invalid preset: "NoPresetGenerator"$
+Invalid configure preset: "NoPresetGenerator"$
diff --git a/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-result.txt b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-stderr.txt b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-stderr.txt
new file mode 100644
index 0000000..6d18c7a
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey:
+Invalid package preset: "EmptyEnvKey": Empty environment variable names are not allowed$
diff --git a/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey.json.in b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey.json.in
new file mode 100644
index 0000000..f181e45
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 6,
+  "packagePresets": [
+    {
+      "name": "EmptyEnvKey",
+      "environment": {
+        "": "value"
+      }
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-result.txt b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-stderr.txt b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-stderr.txt
new file mode 100644
index 0000000..ad32da4
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/PackageInvalidInheritance:
+Invalid package preset: "InvalidInheritance": Could not find inherited preset "NoExist"$
diff --git a/Tests/RunCMake/CMakePresets/PackageInvalidInheritance.json.in b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance.json.in
new file mode 100644
index 0000000..7076ecc
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 6,
+  "packagePresets": [
+    {
+      "name": "InvalidInheritance",
+      "inherits": [
+        "NoExist"
+      ]
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-result.txt b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-stderr.txt b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-stderr.txt
new file mode 100644
index 0000000..b29e953
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset:
+Invalid package preset: "noConfigurePreset": Package presets must either be hidden or have an associated configure preset$
diff --git a/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset.json.in b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset.json.in
new file mode 100644
index 0000000..03b09ed
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset.json.in
@@ -0,0 +1,8 @@
+{
+  "version": 6,
+  "packagePresets": [
+    {
+      "name": "noConfigurePreset"
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
index 8ca58a2..95acf52 100644
--- a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
@@ -181,6 +181,10 @@
 run_cmake_presets(CyclicInheritance1)
 run_cmake_presets(CyclicInheritance2)
 run_cmake_presets(InvalidInheritance)
+run_cmake_presets(BuildInvalidInheritance)
+run_cmake_presets(PackageInvalidInheritance)
+run_cmake_presets(TestInvalidInheritance)
+run_cmake_presets(PackageNoConfigurePreset)
 run_cmake_presets(ErrorNoWarningDev)
 run_cmake_presets(ErrorNoWarningDeprecated)
 set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
@@ -190,6 +194,9 @@
 run_cmake_presets(UnknownToolsetStrategy)
 run_cmake_presets(EmptyCacheKey)
 run_cmake_presets(EmptyEnvKey)
+run_cmake_presets(BuildEmptyEnvKey)
+run_cmake_presets(PackageEmptyEnvKey)
+run_cmake_presets(TestEmptyEnvKey)
 set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
 run_cmake_presets(UnclosedMacro)
 run_cmake_presets(NoSuchMacro)
diff --git a/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-result.txt b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-stderr.txt b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-stderr.txt
new file mode 100644
index 0000000..df00af9
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/TestEmptyEnvKey:
+Invalid test preset: "EmptyEnvKey": Empty environment variable names are not allowed$
diff --git a/Tests/RunCMake/CMakePresets/TestEmptyEnvKey.json.in b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey.json.in
new file mode 100644
index 0000000..50741d1
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 2,
+  "testPresets": [
+    {
+      "name": "EmptyEnvKey",
+      "environment": {
+        "": "value"
+      }
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/TestInvalidInheritance-result.txt b/Tests/RunCMake/CMakePresets/TestInvalidInheritance-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestInvalidInheritance-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/TestInvalidInheritance-stderr.txt b/Tests/RunCMake/CMakePresets/TestInvalidInheritance-stderr.txt
new file mode 100644
index 0000000..a72e498
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestInvalidInheritance-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/TestInvalidInheritance:
+Invalid test preset: "InvalidInheritance": Could not find inherited preset "NoExist"$
diff --git a/Tests/RunCMake/CMakePresets/TestInvalidInheritance.json.in b/Tests/RunCMake/CMakePresets/TestInvalidInheritance.json.in
new file mode 100644
index 0000000..e137f52
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestInvalidInheritance.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 2,
+  "testPresets": [
+    {
+      "name": "InvalidInheritance",
+      "inherits": [
+        "NoExist"
+      ]
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/UserInheritance-stderr.txt b/Tests/RunCMake/CMakePresets/UserInheritance-stderr.txt
index 2ce1316..65d1a5f 100644
--- a/Tests/RunCMake/CMakePresets/UserInheritance-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/UserInheritance-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/UserInheritance:
-Inherited preset "UserInheritance" is unreachable from preset's file$
+Inherited configure preset "UserInheritance" is unreachable from preset's file$
diff --git a/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt
index 9ce6ea5..4749340 100644
--- a/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt
+++ b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt
@@ -1,3 +1,3 @@
 CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset:
-Invalid preset: "noConfigurePreset"$
+Invalid build preset: "noConfigurePreset": Build presets must either be hidden or have an associated configure preset$
diff --git a/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-stderr.txt b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-stderr.txt
index a70497f..d414ed8 100644
--- a/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-stderr.txt
+++ b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-stderr.txt
@@ -1,3 +1,3 @@
 CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset:
-Invalid preset: "noConfigurePreset"$
+Invalid test preset: "noConfigurePreset": Test presets must either be hidden or have an associated configure preset$
diff --git a/Tests/RunCMake/FASTBuild/UnityIsolate-check.cmake b/Tests/RunCMake/FASTBuild/UnityIsolate-check.cmake
index f42bb1b..94ead02 100644
--- a/Tests/RunCMake/FASTBuild/UnityIsolate-check.cmake
+++ b/Tests/RunCMake/FASTBuild/UnityIsolate-check.cmake
@@ -10,7 +10,7 @@
       '.*some_source_file_3.cpp',
       '.*some_source_file_4.cpp'
     }
-    .UnityInputIsolatedFiles =
+    .UnityInputExcludedFiles =
     {
       '.*some_source_file_1.cpp',
       '.*some_source_file_4.cpp'
diff --git a/Tests/RunCMake/ctest_test/RunCMakeTest.cmake b/Tests/RunCMake/ctest_test/RunCMakeTest.cmake
index 730efa8..9f014d0 100644
--- a/Tests/RunCMake/ctest_test/RunCMakeTest.cmake
+++ b/Tests/RunCMake/ctest_test/RunCMakeTest.cmake
@@ -260,6 +260,15 @@
 endfunction()
 run_environment()
 
+# Test setting of CTEST_TEST_COVERAGE_TOOL
+function(run_CTestTestCoverageTool)
+  set(CASE_CTEST_TEST_ARGS "COVERAGE_TOOL" "LLVM-COV")
+  set(CASE_TEST_PREFIX_CODE [[ unset(ENV{LLVM_PROFILE_FILE})]])
+
+  run_ctest(TestCTestTestCoverageTool -VV)
+endfunction()
+run_CTestTestCoverageTool()
+
 # test for OUTPUT_JUNIT
 run_ctest_test(OutputJUnit OUTPUT_JUNIT junit.xml REPEAT UNTIL_FAIL:2)
 
diff --git a/Tests/RunCMake/ctest_test/TestCTestTestCoverageTool-stdout.txt b/Tests/RunCMake/ctest_test/TestCTestTestCoverageTool-stdout.txt
new file mode 100644
index 0000000..768bb03
--- /dev/null
+++ b/Tests/RunCMake/ctest_test/TestCTestTestCoverageTool-stdout.txt
@@ -0,0 +1,3 @@
+1: Using environment variable LLVM_PROFILE_FILE=[^
+]*/Tests/RunCMake/ctest_test/[^
+]*_%p.profraw
diff --git a/Utilities/ClangTidyModule/OstringstreamUseCmstrcatCheck.cxx b/Utilities/ClangTidyModule/OstringstreamUseCmstrcatCheck.cxx
index 8265e32..801c9f6 100644
--- a/Utilities/ClangTidyModule/OstringstreamUseCmstrcatCheck.cxx
+++ b/Utilities/ClangTidyModule/OstringstreamUseCmstrcatCheck.cxx
@@ -18,13 +18,10 @@
 
 void OstringstreamUseCmstrcatCheck::registerMatchers(MatchFinder* Finder)
 {
-  Finder->addMatcher(
-    typeLoc(unless(elaboratedTypeLoc()),
-            optionally(hasParent(elaboratedTypeLoc().bind("parentType"))),
-            loc(qualType(
-              hasDeclaration(namedDecl(hasName("::std::ostringstream"))))))
-      .bind("ostringstream"),
-    this);
+  Finder->addMatcher(typeLoc(loc(qualType(hasDeclaration(
+                               namedDecl(hasName("::std::ostringstream"))))))
+                       .bind("ostringstream"),
+                     this);
 }
 
 void OstringstreamUseCmstrcatCheck::check(
diff --git a/Utilities/ClangTidyModule/UseCmsysFstreamCheck.cxx b/Utilities/ClangTidyModule/UseCmsysFstreamCheck.cxx
index 5f28054..cf75bfc 100644
--- a/Utilities/ClangTidyModule/UseCmsysFstreamCheck.cxx
+++ b/Utilities/ClangTidyModule/UseCmsysFstreamCheck.cxx
@@ -90,8 +90,7 @@
     loc(usingType(throughUsingDecl(namedDecl(hasName(CmsysName)))));
 
   Finder->addMatcher(
-    typeLoc(IsStd, unless(IsCmsys), unless(elaboratedTypeLoc()),
-            optionally(hasParent(elaboratedTypeLoc().bind("parentType"))),
+    typeLoc(IsStd, unless(IsCmsys),
             optionally(hasParent(nestedNameSpecifierLoc().bind("parentName"))))
       .bind(Bind),
     this);
diff --git a/Utilities/Sphinx/cmake.py b/Utilities/Sphinx/cmake.py
index 39b2d24..27049c7 100644
--- a/Utilities/Sphinx/cmake.py
+++ b/Utilities/Sphinx/cmake.py
@@ -234,6 +234,7 @@
 _cmake_index_objs = {
     'command':    _cmake_index_entry('command'),
     'cpack_gen':  _cmake_index_entry('cpack generator'),
+    'diagnostic': _cmake_index_entry('diagnostic'),
     'envvar':     _cmake_index_entry('envvar'),
     'generator':  _cmake_index_entry('generator'),
     'genex':      _cmake_index_entry('genex'),
@@ -523,6 +524,79 @@
         return super().run()
 
 
+class CMakeDiagnosticObject(CMakeObject):
+    object_type = 'diagnostic'
+    required_arguments = 0
+    optional_arguments = 0
+
+    DEFAULT_CHOICES = {'ignore', 'warn', 'error'}
+
+    def default_option(argument):
+        return directives.choice(
+            argument, CMakeDiagnosticObject.DEFAULT_CHOICES)
+
+    option_spec = {
+        'default': default_option,
+        'parent': directives.unchanged,
+    }
+
+    def __init__(self, *args, **kwargs):
+        self.targetname = None
+        super().__init__(*args, **kwargs)
+
+    def _preset_name(self) -> str:
+        sep = False
+        out = ''
+        for c in self.targetname[4:]:
+            if c == '_':
+                sep = True
+            elif sep:
+                out += c
+                sep = False
+            else:
+                out += c.lower()
+        return out
+
+    def _build_field(self, name: str, content: str | list[Node]) -> Node:
+        if type(content) is not list:
+            content = self.parse_text_to_nodes(content)
+
+        name_node = nodes.field_name(text=name)
+        body_node = nodes.field_body('', *content)
+        return nodes.field('', name_node, body_node)
+
+    def _build_cli(self) -> list[Node]:
+        cname = self.targetname[4:].lower().replace('_', '-')
+        ctext = f'-W[no-][error=]{cname}'
+        return self.parse_text_to_nodes(f':option:`{ctext} <cmake -W>`')
+
+    def _build_preset_refs(self) -> list[Node]:
+        p = self._preset_name()
+        w = f':preset:`warnings.{p} <configurePresets.warnings.{p}>`'
+        e = f':preset:`errors.{p} <configurePresets.errors.{p}>`'
+        return self.parse_text_to_nodes(f'{w}, {e}')
+
+    def run(self) -> list[Node]:
+        self.domain, self.objtype = self.name.split(':', 1)
+        doc = self.state.document
+        self.targetname = doc.next_node(nodes.title).astext()
+
+        default = self.options['default'].capitalize()
+        parent = self.options.get('parent')
+
+        headers = nodes.field_list()
+        headers += self._build_field('Command Line', self._build_cli())
+        headers += self._build_field('Presets', self._build_preset_refs())
+        headers += self._build_field('Default', default)
+
+        if parent:
+            parentRef = self.parse_text_to_nodes(f':diagnostic:`{parent}`')
+            headers += self._build_field('Parent', parentRef)
+
+        content = self.parse_content_to_nodes()
+        return [headers] + content
+
+
 class CMakeReferenceRole:
     # See sphinx.util.nodes.explicit_title_re; \x00 escapes '<'.
     _re = re.compile(r'^(.+?)(\s*)(?<!\x00)<(.*?)>$', re.DOTALL)
@@ -680,6 +754,7 @@
     object_types = {
         'command':    ObjType('command',    'command'),
         'cpack_gen':  ObjType('cpack_gen',  'cpack_gen'),
+        'diagnostic': ObjType('diagnostic', 'diagnostic'),
         'envvar':     ObjType('envvar',     'envvar'),
         'generator':  ObjType('generator',  'generator'),
         'genex':      ObjType('genex',      'genex'),
@@ -700,6 +775,7 @@
     directives = {
         'command':    CMakeObject,
         'envvar':     CMakeObject,
+        'diagnostic': CMakeDiagnosticObject,
         'genex':      CMakeGenexObject,
         'signature':  CMakeSignatureObject,
         'variable':   CMakeObject,
@@ -710,6 +786,7 @@
         'cref':       CMakeCRefRole(),
         'command':    CMakeXRefRole(fix_parens=True, lowercase=True),
         'cpack_gen':  CMakeXRefRole(),
+        'diagnostic': CMakeXRefRole(),
         'envvar':     CMakeXRefRole(),
         'generator':  CMakeXRefRole(),
         'genex':      CMakeXRefRole(),