@@ -823,7 +823,7 @@ if (MSVC)
823823 set_property (GLOBAL PROPERTY MSVC_WARNING_LEVEL 4)
824824 add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/W$<TARGET_PROPERTY:MSVC_WARNING_LEVEL>>)
825825 add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/WX>) # treat warnings as errors
826- add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/sdl>) # enable additional security checks
826+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/sdl>) # enable additional security checks (such as /GS)
827827 add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/Oi>) # enable intrinsics
828828 add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/Oy->) # disable suppressing of the creation of frame pointers on the call stack for quicker function calls
829829 add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/Gm->) # disable minimal rebuild
@@ -882,6 +882,23 @@ if (MSVC)
882882 add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4640>) # 'instance' : construction of local static object is not thread-safe
883883 add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4806>) # Unsafe operation involving type 'bool'.
884884
885+ # Microsoft's SDL requires certain compiler warnings to be enabled as error.
886+ # Full list: https://liquid.microsoft.com/Web/Object/Read/ms.security/Requirements/Microsoft.Security.SystemsADM.10086
887+ # (Access to that URL restricted to Microsoft employees.)
888+ # Some of these are implied by the /sdl switch set above (see https://learn.microsoft.com/cpp/build/reference/sdl-enable-additional-security-checks),
889+ # so the list below is just the delta between Microsoft's own requirements and those implied by the /sdl switch.
890+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4018>) # 'token' : signed/unsigned mismatch
891+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4055>) # 'conversion' : from data pointer 'type1' to function pointer 'type2'
892+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4242>) # 'identifier' : conversion from 'type1' to 'type2', possible loss of data
893+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4244>) # 'conversion' conversion from 'type1' to 'type2', possible loss of data
894+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4267>) # 'var' : conversion from 'size_t' to 'type', possible loss of data
895+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4302>) # 'conversion' : truncation from 'type 1' to 'type 2'
896+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4509>) # nonstandard extension used: 'function' uses SEH and 'object' has destructor
897+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4510>) # 'class' : default constructor could not be generated
898+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4610>) # object 'class' can never be instantiated - user-defined constructor required
899+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4611>) # interaction between 'function' and C++ object destruction is non-portable
900+ add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/we4701>) # Potentially uninitialized local variable 'name' used
901+
885902 # Set Warning Level 3:
886903 add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/w34092>) # Sizeof returns 'unsigned long'.
887904 add_compile_options ($<$<COMPILE_LANGUAGE:C,CXX>:/w34121>) # Structure is sensitive to alignment.
0 commit comments