diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 8630455f85..98c28d4002 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -3669,6 +3669,17 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
if (!clOptions.HasFlag("BasicRuntimeChecks")) {
clOptions.AddFlag("BasicRuntimeChecks", "Default");
}
+ if (!clOptions.HasFlag("BufferSecurityCheck")) {
+ clOptions.AddFlag("BufferSecurityCheck", "");
+ }
+ if (!clOptions.HasFlag("CallingConvention")) {
+ clOptions.AddFlag("CallingConvention", "");
+ }
+ // We cannot use the `Default` value, because it is incompatible with
+ // VS2019 & first releases of VS2022
+ if (!clOptions.HasFlag("FloatingPointModel")) {
+ clOptions.AddFlag("FloatingPointModel", "");
+ }
if (!clOptions.HasFlag("ForceConformanceInForLoopScope")) {
clOptions.AddFlag("ForceConformanceInForLoopScope", "");
}
diff --git a/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake b/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake
index afecdf3535..5a71b3055a 100644
--- a/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake
+++ b/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake
@@ -5,33 +5,105 @@ macro(VsDefaultCompilerFlags_check tgt)
return()
endif()
+ set(HAVE_BasicRuntimeChecks 0)
+ set(HAVE_BufferSecurityCheck 0)
+ set(HAVE_CallingConvention 0)
+ set(HAVE_FloatingPointModel 0)
set(HAVE_ForceConformanceInForLoopScope 0)
+ set(HAVE_MinimalRebuild 0)
+ set(HAVE_Optimization 0)
set(HAVE_RemoveUnreferencedCodeData 0)
+ set(HAVE_RuntimeLibrary 0)
+ set(HAVE_SupportJustMyCode 0)
set(HAVE_TreatWChar_tAsBuiltInType 0)
file(STRINGS "${vcProjectFile}" lines)
foreach(line IN LISTS lines)
+ if(line MATCHES "^ *Default")
+ set(HAVE_BasicRuntimeChecks 1)
+ endif()
+ if(line MATCHES "^ *")
+ set(HAVE_BufferSecurityCheck 1)
+ endif()
+ if(line MATCHES "^ *")
+ set(HAVE_CallingConvention 1)
+ endif()
+ if(line MATCHES "^ *")
+ set(HAVE_FloatingPointModel 1)
+ endif()
if(line MATCHES "^ *")
set(HAVE_ForceConformanceInForLoopScope 1)
endif()
+ if(line MATCHES "^ *")
+ set(HAVE_MinimalRebuild 1)
+ endif()
+ if(line MATCHES "^ *[^\\n<]*")
+ set(HAVE_Optimization 1)
+ endif()
if(line MATCHES "^ *")
set(HAVE_RemoveUnreferencedCodeData 1)
endif()
+ if(line MATCHES "^ *[^\\n<]*")
+ set(HAVE_RuntimeLibrary 1)
+ endif()
+ if(line MATCHES "^ *")
+ set(HAVE_SupportJustMyCode 1)
+ endif()
if(line MATCHES "^ *")
set(HAVE_TreatWChar_tAsBuiltInType 1)
endif()
endforeach()
+ if(NOT HAVE_BasicRuntimeChecks)
+ set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.")
+ return()
+ endif()
+
+ if(NOT HAVE_BufferSecurityCheck)
+ set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.")
+ return()
+ endif()
+
+ if(NOT HAVE_CallingConvention)
+ set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.")
+ return()
+ endif()
+
+ if(NOT HAVE_FloatingPointModel)
+ set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.")
+ return()
+ endif()
+
if(NOT HAVE_ForceConformanceInForLoopScope)
set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.")
return()
endif()
+ if(NOT HAVE_MinimalRebuild)
+ set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.")
+ return()
+ endif()
+
+ if(NOT HAVE_Optimization)
+ set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.")
+ return()
+ endif()
+
if(NOT HAVE_RemoveUnreferencedCodeData)
set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.")
return()
endif()
+ if(NOT HAVE_RuntimeLibrary)
+ set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.")
+ return()
+ endif()
+
+ if(NOT HAVE_SupportJustMyCode)
+ set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.")
+ return()
+ endif()
+
if(NOT HAVE_TreatWChar_tAsBuiltInType)
set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.")
return()