From 0d758be22283a857a0309f0068d6054481ac3635 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 15 Jul 2025 15:56:00 -0400 Subject: [PATCH] MSVC: Enable C23 language support Introduced support via `-std:clatest` in cl 19.39. --- .gitlab/ci/configure_windows_vs2022_x64_ninja.cmake | 2 +- Modules/Compiler/MSVC-C.cmake | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.gitlab/ci/configure_windows_vs2022_x64_ninja.cmake b/.gitlab/ci/configure_windows_vs2022_x64_ninja.cmake index 3fb894cca7..2771e3fb52 100644 --- a/.gitlab/ci/configure_windows_vs2022_x64_ninja.cmake +++ b/.gitlab/ci/configure_windows_vs2022_x64_ninja.cmake @@ -1,4 +1,4 @@ -set(CMake_TEST_C_STANDARDS "90;99;11;17" CACHE STRING "") +set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "") set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "") if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "") diff --git a/Modules/Compiler/MSVC-C.cmake b/Modules/Compiler/MSVC-C.cmake index 7de6039717..85ceae804a 100644 --- a/Modules/Compiler/MSVC-C.cmake +++ b/Modules/Compiler/MSVC-C.cmake @@ -33,6 +33,16 @@ if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27) endmacro() endif() + if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.39) + # VS 17.10 did not have a "stdclatest" value for LanguageStandard_C. + if(NOT CMAKE_GENERATOR MATCHES "Visual Studio" + OR CMAKE_VS_VERSION_BUILD_NUMBER VERSION_GREATER_EQUAL 17.11) + set(CMAKE_C23_STANDARD_COMPILE_OPTION "-std:clatest") + set(CMAKE_C23_EXTENSION_COMPILE_OPTION "-std:clatest") + set(CMAKE_C_STANDARD_LATEST 23) + endif() + endif() + __compiler_check_default_language_standard(C 19.27 99) else() # MSVC has no specific options to set C language standards, but set them as