Index: CMakeLists.txt =================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -61,12 +61,8 @@ # Windows where we need to use clang-cl instead. if(NOT MSVC) set(COMPILER_RT_TEST_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang) - set(COMPILER_RT_TEST_COMPILER_EXE "-o") - set(COMPILER_RT_TEST_COMPILER_OBJ "-o") else() - set(COMPILER_RT_TEST_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl.exe) - set(COMPILER_RT_TEST_COMPILER_EXE "-Fe") - set(COMPILER_RT_TEST_COMPILER_OBJ "-Fo") + set(COMPILER_RT_TEST_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe) endif() else() # Take output dir and install path from the user. @@ -80,8 +76,6 @@ option(COMPILER_RT_ENABLE_WERROR "Fail and stop if warning is triggered" OFF) # Use a host compiler to compile/link tests. set(COMPILER_RT_TEST_COMPILER ${CMAKE_C_COMPILER} CACHE PATH "Compiler to use for testing") - set(COMPILER_RT_TEST_COMPILER_EXE "-o") - set(COMPILER_RT_TEST_COMPILER_OBJ "-o") if (NOT LLVM_CONFIG_PATH) find_program(LLVM_CONFIG_PATH "llvm-config" @@ -131,7 +125,7 @@ if("${COMPILER_RT_TEST_COMPILER}" MATCHES "clang[+]*$") set(COMPILER_RT_TEST_COMPILER_ID Clang) -elseif("${COMPILER_RT_TEST_COMPILER}" MATCHES "clang-cl.exe$") +elseif("${COMPILER_RT_TEST_COMPILER}" MATCHES "clang.*.exe$") set(COMPILER_RT_TEST_COMPILER_ID Clang) else() set(COMPILER_RT_TEST_COMPILER_ID GNU) Index: cmake/Modules/AddCompilerRT.cmake =================================================================== --- cmake/Modules/AddCompilerRT.cmake +++ cmake/Modules/AddCompilerRT.cmake @@ -118,10 +118,16 @@ set(COMPILER_RT_GTEST_SOURCE ${COMPILER_RT_GTEST_PATH}/src/gtest-all.cc) set(COMPILER_RT_GTEST_CFLAGS -DGTEST_NO_LLVM_RAW_OSTREAM=1 + -DGTEST_HAS_RTTI=0 -I${COMPILER_RT_GTEST_PATH}/include -I${COMPILER_RT_GTEST_PATH} ) +if(MSVC) + # Clang doesn't support SEH on Windows yet. + list(APPEND COMPILER_RT_GTEST_CFLAGS -DGTEST_HAS_SEH=0) +endif() + # Link objects into a single executable with COMPILER_RT_TEST_COMPILER, # using specified link flags. Make executable a part of provided # test_suite. @@ -147,9 +153,8 @@ separate_arguments(TEST_LINK_FLAGS) endif() add_custom_target(${test_name} - # MSVS CL doesn't allow a space between -Fe and the output file name. COMMAND ${COMPILER_RT_TEST_COMPILER} ${TEST_OBJECTS} - ${COMPILER_RT_TEST_COMPILER_EXE}"${output_bin}" + -o "${output_bin}" ${TEST_LINK_FLAGS} DEPENDS ${TEST_DEPS}) # Make the test suite depend on the binary. Index: cmake/Modules/CompilerRTCompile.cmake =================================================================== --- cmake/Modules/CompilerRTCompile.cmake +++ cmake/Modules/CompilerRTCompile.cmake @@ -17,15 +17,21 @@ else() string(REPLACE " " ";" global_flags "${CMAKE_C_FLAGS}") endif() + # On Windows, CMAKE_*_FLAGS are built for MSVC but we use the GCC clang.exe + # which doesn't support flags starting with "/smth". Replace those with + # "-smth" equivalents. + if(MSVC) + string(REGEX REPLACE "^/" "-" global_flags "${global_flags}") + string(REPLACE ";/" ";-" global_flags "${global_flags}") + endif() # Ignore unknown warnings. CMAKE_CXX_FLAGS may contain GCC-specific options # which are not supported by Clang. list(APPEND global_flags -Wno-unknown-warning-option) set(compile_flags ${global_flags} ${SOURCE_CFLAGS}) add_custom_command( OUTPUT ${object_file} - # MSVS CL doesn't allow a space between -Fo and the object file name. COMMAND ${COMPILER_RT_TEST_COMPILER} ${compile_flags} -c - ${COMPILER_RT_TEST_COMPILER_OBJ}"${object_file}" + -o "${object_file}" ${source_rpath} MAIN_DEPENDENCY ${source} DEPENDS ${SOURCE_DEPS}) Index: lib/asan/tests/CMakeLists.txt =================================================================== --- lib/asan/tests/CMakeLists.txt +++ lib/asan/tests/CMakeLists.txt @@ -26,24 +26,29 @@ -I${COMPILER_RT_SOURCE_DIR}/lib -I${COMPILER_RT_SOURCE_DIR}/lib/asan -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common/tests + -fno-rtti + -O2 -Wno-format - -Werror=sign-compare - -O2) -append_if(COMPILER_RT_HAS_G_FLAG -g ASAN_UNITTEST_COMMON_CFLAGS) -append_if(COMPILER_RT_HAS_Zi_FLAG -Zi ASAN_UNITTEST_COMMON_CFLAGS) + -Werror=sign-compare) append_if(COMPILER_RT_HAS_WNO_VARIADIC_MACROS_FLAG -Wno-variadic-macros ASAN_UNITTEST_COMMON_CFLAGS) +# -gline-tables-only must be enough for ASan, so use it if possible. +if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang") + list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -gline-tables-only) +else() + list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -g) +endif() + if(MSVC) # MSVC system headers and gtest use a lot of deprecated stuff. list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -Wno-deprecated-declarations) - # clang-cl doesn't support exceptions yet. + # clang doesn't support exceptions on Windows yet. list(APPEND ASAN_UNITTEST_COMMON_CFLAGS - /fallback -D_HAS_EXCEPTIONS=0) - # We should teach clang-cl to understand more pragmas. + # We should teach clang to understand more pragmas. list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -Wno-unknown-pragmas -Wno-undefined-inline) Index: lib/sanitizer_common/tests/CMakeLists.txt =================================================================== --- lib/sanitizer_common/tests/CMakeLists.txt +++ lib/sanitizer_common/tests/CMakeLists.txt @@ -38,28 +38,29 @@ -I${COMPILER_RT_SOURCE_DIR}/include -I${COMPILER_RT_SOURCE_DIR}/lib -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common - -DGTEST_HAS_RTTI=0 + -fno-rtti -O2 -Werror=sign-compare -Wno-non-virtual-dtor) -append_if(COMPILER_RT_HAS_G_FLAG -g SANITIZER_TEST_CFLAGS_COMMON) -append_if(COMPILER_RT_HAS_Zi_FLAG -Zi SANITIZER_TEST_CFLAGS_COMMON) - -append_if(COMPILER_RT_HAS_FNO_RTTI_FLAG -fno-rtti SANITIZER_TEST_CFLAGS_COMMON) -append_if(COMPILER_RT_HAS_GR_FLAG -GR- SANITIZER_TEST_CFLAGS_COMMON) +# -gline-tables-only must be enough for these tests, so use it if possible. +if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang") + list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -gline-tables-only) +else() + list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -g) +endif() if(MSVC) - # System headers and gtest use a lot of deprecated stuff. + # MSVC system headers and gtest use a lot of deprecated stuff. list(APPEND SANITIZER_TEST_CFLAGS_COMMON -Wno-deprecated-declarations) - # clang-cl doesn't support exceptions yet. + # clang doesn't support exceptions on Windows yet. list(APPEND SANITIZER_TEST_CFLAGS_COMMON - /fallback + -DGTEST_HAS_SEH=0 -D_HAS_EXCEPTIONS=0) - # We should teach clang-cl to understand more pragmas. + # We should teach clang to understand more pragmas. list(APPEND SANITIZER_TEST_CFLAGS_COMMON -Wno-unknown-pragmas -Wno-undefined-inline) Index: test/asan/TestCases/Windows/aligned_mallocs.cc =================================================================== --- test/asan/TestCases/Windows/aligned_mallocs.cc +++ test/asan/TestCases/Windows/aligned_mallocs.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t #include Index: test/asan/TestCases/Windows/allocators_sanity.cc =================================================================== --- test/asan/TestCases/Windows/allocators_sanity.cc +++ test/asan/TestCases/Windows/allocators_sanity.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t | FileCheck %s #include Index: test/asan/TestCases/Windows/beginthreadex.cc =================================================================== --- test/asan/TestCases/Windows/beginthreadex.cc +++ test/asan/TestCases/Windows/beginthreadex.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t #include Index: test/asan/TestCases/Windows/bitfield.cc =================================================================== --- test/asan/TestCases/Windows/bitfield.cc +++ test/asan/TestCases/Windows/bitfield.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t #include Index: test/asan/TestCases/Windows/bitfield_uaf.cc =================================================================== --- test/asan/TestCases/Windows/bitfield_uaf.cc +++ test/asan/TestCases/Windows/bitfield_uaf.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/calloc_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/calloc_left_oob.cc +++ test/asan/TestCases/Windows/calloc_left_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/calloc_right_oob.cc =================================================================== --- test/asan/TestCases/Windows/calloc_right_oob.cc +++ test/asan/TestCases/Windows/calloc_right_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/calloc_uaf.cc =================================================================== --- test/asan/TestCases/Windows/calloc_uaf.cc +++ test/asan/TestCases/Windows/calloc_uaf.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/crt_initializers.cc =================================================================== --- test/asan/TestCases/Windows/crt_initializers.cc +++ test/asan/TestCases/Windows/crt_initializers.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t | FileCheck %s // This is a test for http://code.google.com/p/address-sanitizer/issues/detail?id=305 Index: test/asan/TestCases/Windows/dll_aligned_mallocs.cc =================================================================== --- test/asan/TestCases/Windows/dll_aligned_mallocs.cc +++ test/asan/TestCases/Windows/dll_aligned_mallocs.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: %run %t %t.dll | FileCheck %s #include Index: test/asan/TestCases/Windows/dll_allocators_sanity.cc =================================================================== --- test/asan/TestCases/Windows/dll_allocators_sanity.cc +++ test/asan/TestCases/Windows/dll_allocators_sanity.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: %run %t %t.dll | FileCheck %s #include Index: test/asan/TestCases/Windows/dll_host.cc =================================================================== --- test/asan/TestCases/Windows/dll_host.cc +++ test/asan/TestCases/Windows/dll_host.cc @@ -2,7 +2,7 @@ // // Just make sure we can compile this. // The actual compile&run sequence is to be done by the DLL tests. -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // // Get the list of ASan wrappers exported by the main module RTL: // RUN: dumpbin /EXPORTS %t | grep -o "__asan_wrap[^ ]*" | grep -v @ | sort | uniq > %t.exported_wrappers Index: test/asan/TestCases/Windows/dll_intercept_memcpy.cc =================================================================== --- test/asan/TestCases/Windows/dll_intercept_memcpy.cc +++ test/asan/TestCases/Windows/dll_intercept_memcpy.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/dll_intercept_strlen.cc =================================================================== --- test/asan/TestCases/Windows/dll_intercept_strlen.cc +++ test/asan/TestCases/Windows/dll_intercept_strlen.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/dll_malloc_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/dll_malloc_left_oob.cc +++ test/asan/TestCases/Windows/dll_malloc_left_oob.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/dll_malloc_uaf.cc =================================================================== --- test/asan/TestCases/Windows/dll_malloc_uaf.cc +++ test/asan/TestCases/Windows/dll_malloc_uaf.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/dll_noreturn.cc =================================================================== --- test/asan/TestCases/Windows/dll_noreturn.cc +++ test/asan/TestCases/Windows/dll_noreturn.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/dll_operator_array_new_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/dll_operator_array_new_left_oob.cc +++ test/asan/TestCases/Windows/dll_operator_array_new_left_oob.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s extern "C" __declspec(dllexport) Index: test/asan/TestCases/Windows/dll_operator_array_new_with_dtor_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/dll_operator_array_new_with_dtor_left_oob.cc +++ test/asan/TestCases/Windows/dll_operator_array_new_with_dtor_left_oob.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s struct C { Index: test/asan/TestCases/Windows/dll_poison_unpoison.cc =================================================================== --- test/asan/TestCases/Windows/dll_poison_unpoison.cc +++ test/asan/TestCases/Windows/dll_poison_unpoison.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/dll_stack_use_after_return.cc =================================================================== --- test/asan/TestCases/Windows/dll_stack_use_after_return.cc +++ test/asan/TestCases/Windows/dll_stack_use_after_return.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: env ASAN_OPTIONS=detect_stack_use_after_return=1 not %run %t %t.dll 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/dll_thread_stack_array_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/dll_thread_stack_array_left_oob.cc +++ test/asan/TestCases/Windows/dll_thread_stack_array_left_oob.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clangxx_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t +// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/double_free.cc =================================================================== --- test/asan/TestCases/Windows/double_free.cc +++ test/asan/TestCases/Windows/double_free.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/double_operator_delete.cc =================================================================== --- test/asan/TestCases/Windows/double_operator_delete.cc +++ test/asan/TestCases/Windows/double_operator_delete.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/global_const_string.cc =================================================================== --- test/asan/TestCases/Windows/global_const_string.cc +++ test/asan/TestCases/Windows/global_const_string.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t | FileCheck %s #include Index: test/asan/TestCases/Windows/global_const_string_oob.cc =================================================================== --- test/asan/TestCases/Windows/global_const_string_oob.cc +++ test/asan/TestCases/Windows/global_const_string_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/hello_world.cc =================================================================== --- test/asan/TestCases/Windows/hello_world.cc +++ test/asan/TestCases/Windows/hello_world.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t | FileCheck %s #include Index: test/asan/TestCases/Windows/intercept_memcpy.cc =================================================================== --- test/asan/TestCases/Windows/intercept_memcpy.cc +++ test/asan/TestCases/Windows/intercept_memcpy.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/intercept_strdup.cc =================================================================== --- test/asan/TestCases/Windows/intercept_strdup.cc +++ test/asan/TestCases/Windows/intercept_strdup.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/intercept_strlen.cc =================================================================== --- test/asan/TestCases/Windows/intercept_strlen.cc +++ test/asan/TestCases/Windows/intercept_strlen.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/malloc_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/malloc_left_oob.cc +++ test/asan/TestCases/Windows/malloc_left_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/malloc_right_oob.cc =================================================================== --- test/asan/TestCases/Windows/malloc_right_oob.cc +++ test/asan/TestCases/Windows/malloc_right_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/malloc_uaf.cc =================================================================== --- test/asan/TestCases/Windows/malloc_uaf.cc +++ test/asan/TestCases/Windows/malloc_uaf.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/operator_array_new_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/operator_array_new_left_oob.cc +++ test/asan/TestCases/Windows/operator_array_new_left_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s int main() { Index: test/asan/TestCases/Windows/operator_array_new_right_oob.cc =================================================================== --- test/asan/TestCases/Windows/operator_array_new_right_oob.cc +++ test/asan/TestCases/Windows/operator_array_new_right_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/operator_array_new_uaf.cc =================================================================== --- test/asan/TestCases/Windows/operator_array_new_uaf.cc +++ test/asan/TestCases/Windows/operator_array_new_uaf.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cc +++ test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s struct C { Index: test/asan/TestCases/Windows/operator_delete_wrong_argument.cc =================================================================== --- test/asan/TestCases/Windows/operator_delete_wrong_argument.cc +++ test/asan/TestCases/Windows/operator_delete_wrong_argument.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/operator_new_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/operator_new_left_oob.cc +++ test/asan/TestCases/Windows/operator_new_left_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/operator_new_right_oob.cc =================================================================== --- test/asan/TestCases/Windows/operator_new_right_oob.cc +++ test/asan/TestCases/Windows/operator_new_right_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/operator_new_uaf.cc =================================================================== --- test/asan/TestCases/Windows/operator_new_uaf.cc +++ test/asan/TestCases/Windows/operator_new_uaf.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/realloc_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/realloc_left_oob.cc +++ test/asan/TestCases/Windows/realloc_left_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/realloc_right_oob.cc =================================================================== --- test/asan/TestCases/Windows/realloc_right_oob.cc +++ test/asan/TestCases/Windows/realloc_right_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/realloc_uaf.cc =================================================================== --- test/asan/TestCases/Windows/realloc_uaf.cc +++ test/asan/TestCases/Windows/realloc_uaf.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/stack_array_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/stack_array_left_oob.cc +++ test/asan/TestCases/Windows/stack_array_left_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/stack_array_right_oob.cc =================================================================== --- test/asan/TestCases/Windows/stack_array_right_oob.cc +++ test/asan/TestCases/Windows/stack_array_right_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/stack_array_sanity.cc =================================================================== --- test/asan/TestCases/Windows/stack_array_sanity.cc +++ test/asan/TestCases/Windows/stack_array_sanity.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t | FileCheck %s #include Index: test/asan/TestCases/Windows/stack_use_after_return.cc =================================================================== --- test/asan/TestCases/Windows/stack_use_after_return.cc +++ test/asan/TestCases/Windows/stack_use_after_return.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: env ASAN_OPTIONS=detect_stack_use_after_return=1 not %run %t 2>&1 | FileCheck %s char *x; Index: test/asan/TestCases/Windows/thread_simple.cc =================================================================== --- test/asan/TestCases/Windows/thread_simple.cc +++ test/asan/TestCases/Windows/thread_simple.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t #include Index: test/asan/TestCases/Windows/thread_stack_array_left_oob.cc =================================================================== --- test/asan/TestCases/Windows/thread_stack_array_left_oob.cc +++ test/asan/TestCases/Windows/thread_stack_array_left_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/thread_stack_array_right_oob.cc =================================================================== --- test/asan/TestCases/Windows/thread_stack_array_right_oob.cc +++ test/asan/TestCases/Windows/thread_stack_array_right_oob.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/thread_stack_reuse.cc =================================================================== --- test/asan/TestCases/Windows/thread_stack_reuse.cc +++ test/asan/TestCases/Windows/thread_stack_reuse.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t #include Index: test/asan/TestCases/Windows/thread_stress.cc =================================================================== --- test/asan/TestCases/Windows/thread_stress.cc +++ test/asan/TestCases/Windows/thread_stress.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t #include Index: test/asan/TestCases/Windows/use_after_realloc.cc =================================================================== --- test/asan/TestCases/Windows/use_after_realloc.cc +++ test/asan/TestCases/Windows/use_after_realloc.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s #include Index: test/asan/TestCases/Windows/windows_h.cc =================================================================== --- test/asan/TestCases/Windows/windows_h.cc +++ test/asan/TestCases/Windows/windows_h.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: %run %t // Just make sure we can parse Index: test/asan/TestCases/Windows/wrong_downcast_on_heap.cc =================================================================== --- test/asan/TestCases/Windows/wrong_downcast_on_heap.cc +++ test/asan/TestCases/Windows/wrong_downcast_on_heap.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s class Parent { Index: test/asan/TestCases/Windows/wrong_downcast_on_stack.cc =================================================================== --- test/asan/TestCases/Windows/wrong_downcast_on_stack.cc +++ test/asan/TestCases/Windows/wrong_downcast_on_stack.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O0 %s -Fe%t +// RUN: %clang_cl_asan -O0 %s -Fe%t // RUN: not %run %t 2>&1 | FileCheck %s class Parent { Index: test/asan/lit.cfg =================================================================== --- test/asan/lit.cfg +++ test/asan/lit.cfg @@ -1,6 +1,7 @@ # -*- Python -*- import os +import platform def get_required_attr(config, attr_name): attr_value = getattr(config, attr_name, None) @@ -32,19 +33,11 @@ # FIXME: Review the set of required flags and check if it can be reduced. target_cflags = [get_required_attr(config, "target_cflags")] + extra_linkflags target_cxxflags = config.cxx_mode_flags + target_cflags -clang_asan_static_cflags = ["-fsanitize=address"] + target_cflags - -clang_path = getattr(config, 'clang', None) -if clang_path.find("clang-cl") == -1: - clang_asan_static_cflags += ["-g", - "-mno-omit-leaf-frame-pointer", - "-fno-omit-frame-pointer", - "-fno-optimize-sibling-calls"] -else: - clang_asan_static_cflags += ["-Zi", - "-Wno-deprecated-declarations", - "-D_HAS_EXCEPTIONS=0"] - +clang_asan_static_cflags = ["-fsanitize=address", + "-mno-omit-leaf-frame-pointer", + "-fno-omit-frame-pointer", + "-fno-optimize-sibling-calls", + "-g"] + target_cflags clang_asan_static_cxxflags = config.cxx_mode_flags + clang_asan_static_cflags if config.asan_dynamic: @@ -76,6 +69,16 @@ config.substitutions.append( ("%clang_asan_static ", build_invocation(clang_asan_static_cflags)) ) config.substitutions.append( ("%clangxx_asan_static ", build_invocation(clang_asan_static_cxxflags)) ) +# Windows-specific tests might also use the clang-cl.exe driver. +if platform.system() == 'Windows': + clang_cl_asan_cxxflags = ["-fsanitize=address", + "-Wno-deprecated-declarations", + "-D_HAS_EXCEPTIONS=0", + "-Zi"] + target_cflags + clang_invocation = build_invocation(clang_cl_asan_cxxflags) + clang_cl_invocation = clang_invocation.replace("clang.exe","clang-cl.exe") + config.substitutions.append( ("%clang_cl_asan ", clang_cl_invocation) ) + # FIXME: De-hardcode this path. asan_source_dir = os.path.join( get_required_attr(config, "compiler_rt_src_root"), "lib", "asan")