From a751d95bf159eccaeb707a4c4567c49c2971c332 Mon Sep 17 00:00:00 2001 From: Levi Broderick Date: Wed, 19 Nov 2025 14:47:45 -0800 Subject: [PATCH] Update MSVC flags to meet SDL requirements --- eng/native/configurecompiler.cmake | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 2dc0e092dde66d..9caf3a14828599 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -823,7 +823,7 @@ if (MSVC) set_property(GLOBAL PROPERTY MSVC_WARNING_LEVEL 4) add_compile_options($<$:/W$>) add_compile_options($<$:/WX>) # treat warnings as errors - add_compile_options($<$:/sdl>) # enable additional security checks + add_compile_options($<$:/sdl>) # enable additional security checks (such as /GS) add_compile_options($<$:/Oi>) # enable intrinsics add_compile_options($<$:/Oy->) # disable suppressing of the creation of frame pointers on the call stack for quicker function calls add_compile_options($<$:/Gm->) # disable minimal rebuild @@ -882,6 +882,23 @@ if (MSVC) add_compile_options($<$:/we4640>) # 'instance' : construction of local static object is not thread-safe add_compile_options($<$:/we4806>) # Unsafe operation involving type 'bool'. + # Microsoft's SDL requires certain compiler warnings to be enabled as error. + # Full list: https://liquid.microsoft.com/Web/Object/Read/ms.security/Requirements/Microsoft.Security.SystemsADM.10086 + # (Access to that URL restricted to Microsoft employees.) + # Some of these are implied by the /sdl switch set above (see https://learn.microsoft.com/cpp/build/reference/sdl-enable-additional-security-checks), + # so the list below is just the delta between Microsoft's own requirements and those implied by the /sdl switch. + add_compile_options($<$:/we4018>) # 'token' : signed/unsigned mismatch + add_compile_options($<$:/we4055>) # 'conversion' : from data pointer 'type1' to function pointer 'type2' + add_compile_options($<$:/we4242>) # 'identifier' : conversion from 'type1' to 'type2', possible loss of data + add_compile_options($<$:/we4244>) # 'conversion' conversion from 'type1' to 'type2', possible loss of data + add_compile_options($<$:/we4267>) # 'var' : conversion from 'size_t' to 'type', possible loss of data + add_compile_options($<$:/we4302>) # 'conversion' : truncation from 'type 1' to 'type 2' + add_compile_options($<$:/we4509>) # nonstandard extension used: 'function' uses SEH and 'object' has destructor + add_compile_options($<$:/we4510>) # 'class' : default constructor could not be generated + add_compile_options($<$:/we4610>) # object 'class' can never be instantiated - user-defined constructor required + add_compile_options($<$:/we4611>) # interaction between 'function' and C++ object destruction is non-portable + add_compile_options($<$:/we4701>) # Potentially uninitialized local variable 'name' used + # Set Warning Level 3: add_compile_options($<$:/w34092>) # Sizeof returns 'unsigned long'. add_compile_options($<$:/w34121>) # Structure is sensitive to alignment.