if(MSVC)
# Disable exceptions on Windows until they work reliably.
list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -fno-exceptions -DGTEST_HAS_SEH=0)
+ # Extract the major version from CMake's MSVC_VERSION variable and pass it to
+ # -fms-compatibility-version. The major version controls the most important
+ # parts of clang's compatibility.
+ string(SUBSTRING "${MSVC_VERSION}" 0 2 MSVC_MAJOR_VERSION)
+ list(APPEND ASAN_UNITTEST_COMMON_CFLAGS "-fms-compatibility-version=${MSVC_MAJOR_VERSION}")
endif()
set(ASAN_BLACKLIST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/asan_test.ignore")
darwin_filter_host_archs(ASAN_SUPPORTED_ARCH ASAN_TEST_ARCH)
endif()
+# Extract the major version from CMake's MSVC_VERSION variable and pass it into
+# the lit configuration.
+set(MSVC_MAJOR_VERSION "")
+if (MSVC)
+ string(SUBSTRING "${MSVC_VERSION}" 0 2 MSVC_MAJOR_VERSION)
+endif()
+
foreach(arch ${ASAN_TEST_ARCH})
if(ANDROID)
set(ASAN_TEST_TARGET_ARCH ${arch}-android)
if config.android:
extra_linkflags += ["-lm"]
+msvc_major_version = get_required_attr(config, "msvc_major_version")
+
# Setup default compiler flags used with -fsanitize=address option.
# FIXME: Review the set of required flags and check if it can be reduced.
target_cflags = [get_required_attr(config, "target_cflags")] + extra_linkflags
+if msvc_major_version:
+ target_cflags.append("-fms-compatibility-version=" + msvc_major_version)
target_cxxflags = config.cxx_mode_flags + target_cflags
clang_asan_static_cflags = (["-fsanitize=address",
"-mno-omit-leaf-frame-pointer",
clang_cl_asan_cxxflags = ["-fsanitize=address",
"-Wno-deprecated-declarations",
"-WX",
+ "-fms-compatibility-version=" + msvc_major_version,
"-D_HAS_EXCEPTIONS=0",
"-Zi"] + target_cflags
if config.asan_dynamic:
config.name_suffix = "@ASAN_TEST_CONFIG_SUFFIX@"
config.asan_lit_source_dir = "@ASAN_LIT_SOURCE_DIR@"
config.target_cflags = "@ASAN_TEST_TARGET_CFLAGS@"
+config.msvc_major_version = "@MSVC_MAJOR_VERSION@"
config.clang = "@ASAN_TEST_TARGET_CC@"
config.bits = "@ASAN_TEST_BITS@"
config.android = "@ANDROID@"