diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index d53987bff4..dcca3c4072 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -3664,6 +3664,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..deeafe493c 100644 --- a/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake +++ b/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake @@ -5,12 +5,24 @@ macro(VsDefaultCompilerFlags_check tgt) return() endif() + set(HAVE_BufferSecurityCheck 0) + set(HAVE_CallingConvention 0) + set(HAVE_FloatingPointModel 0) set(HAVE_ForceConformanceInForLoopScope 0) set(HAVE_RemoveUnreferencedCodeData 0) set(HAVE_TreatWChar_tAsBuiltInType 0) file(STRINGS "${vcProjectFile}" lines) foreach(line IN LISTS lines) + 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() @@ -22,6 +34,21 @@ macro(VsDefaultCompilerFlags_check tgt) endif() endforeach() + 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()