[ASan/Win] Use clang rather than clang-cl by default for lit tests. Make Windows...
authorTimur Iskhodzhanov <timurrrr@google.com>
Wed, 28 May 2014 08:38:13 +0000 (08:38 +0000)
committerTimur Iskhodzhanov <timurrrr@google.com>
Wed, 28 May 2014 08:38:13 +0000 (08:38 +0000)
Reviewed at http://reviews.llvm.org/D3893

llvm-svn: 209719

63 files changed:
compiler-rt/CMakeLists.txt
compiler-rt/cmake/Modules/AddCompilerRT.cmake
compiler-rt/cmake/Modules/CompilerRTCompile.cmake
compiler-rt/lib/asan/tests/CMakeLists.txt
compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt
compiler-rt/test/asan/TestCases/Windows/aligned_mallocs.cc
compiler-rt/test/asan/TestCases/Windows/allocators_sanity.cc
compiler-rt/test/asan/TestCases/Windows/beginthreadex.cc
compiler-rt/test/asan/TestCases/Windows/bitfield.cc
compiler-rt/test/asan/TestCases/Windows/bitfield_uaf.cc
compiler-rt/test/asan/TestCases/Windows/calloc_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/calloc_right_oob.cc
compiler-rt/test/asan/TestCases/Windows/calloc_uaf.cc
compiler-rt/test/asan/TestCases/Windows/crt_initializers.cc
compiler-rt/test/asan/TestCases/Windows/dll_aligned_mallocs.cc
compiler-rt/test/asan/TestCases/Windows/dll_allocators_sanity.cc
compiler-rt/test/asan/TestCases/Windows/dll_host.cc
compiler-rt/test/asan/TestCases/Windows/dll_intercept_memcpy.cc
compiler-rt/test/asan/TestCases/Windows/dll_intercept_strlen.cc
compiler-rt/test/asan/TestCases/Windows/dll_malloc_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/dll_malloc_uaf.cc
compiler-rt/test/asan/TestCases/Windows/dll_noreturn.cc
compiler-rt/test/asan/TestCases/Windows/dll_operator_array_new_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/dll_operator_array_new_with_dtor_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/dll_poison_unpoison.cc
compiler-rt/test/asan/TestCases/Windows/dll_stack_use_after_return.cc
compiler-rt/test/asan/TestCases/Windows/dll_thread_stack_array_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/double_free.cc
compiler-rt/test/asan/TestCases/Windows/double_operator_delete.cc
compiler-rt/test/asan/TestCases/Windows/global_const_string.cc
compiler-rt/test/asan/TestCases/Windows/global_const_string_oob.cc
compiler-rt/test/asan/TestCases/Windows/hello_world.cc
compiler-rt/test/asan/TestCases/Windows/intercept_memcpy.cc
compiler-rt/test/asan/TestCases/Windows/intercept_strdup.cc
compiler-rt/test/asan/TestCases/Windows/intercept_strlen.cc
compiler-rt/test/asan/TestCases/Windows/malloc_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/malloc_right_oob.cc
compiler-rt/test/asan/TestCases/Windows/malloc_uaf.cc
compiler-rt/test/asan/TestCases/Windows/operator_array_new_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/operator_array_new_right_oob.cc
compiler-rt/test/asan/TestCases/Windows/operator_array_new_uaf.cc
compiler-rt/test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/operator_delete_wrong_argument.cc
compiler-rt/test/asan/TestCases/Windows/operator_new_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/operator_new_right_oob.cc
compiler-rt/test/asan/TestCases/Windows/operator_new_uaf.cc
compiler-rt/test/asan/TestCases/Windows/realloc_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/realloc_right_oob.cc
compiler-rt/test/asan/TestCases/Windows/realloc_uaf.cc
compiler-rt/test/asan/TestCases/Windows/stack_array_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/stack_array_right_oob.cc
compiler-rt/test/asan/TestCases/Windows/stack_array_sanity.cc
compiler-rt/test/asan/TestCases/Windows/stack_use_after_return.cc
compiler-rt/test/asan/TestCases/Windows/thread_simple.cc
compiler-rt/test/asan/TestCases/Windows/thread_stack_array_left_oob.cc
compiler-rt/test/asan/TestCases/Windows/thread_stack_array_right_oob.cc
compiler-rt/test/asan/TestCases/Windows/thread_stack_reuse.cc
compiler-rt/test/asan/TestCases/Windows/thread_stress.cc
compiler-rt/test/asan/TestCases/Windows/use_after_realloc.cc
compiler-rt/test/asan/TestCases/Windows/windows_h.cc
compiler-rt/test/asan/TestCases/Windows/wrong_downcast_on_heap.cc
compiler-rt/test/asan/TestCases/Windows/wrong_downcast_on_stack.cc
compiler-rt/test/asan/lit.cfg

index da49e5e..b64893d 100644 (file)
@@ -61,12 +61,8 @@ if (NOT COMPILER_RT_STANDALONE_BUILD)
   # 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 @@ else()
   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 @@ endif()
 
 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 69c30e3..78d2492 100644 (file)
@@ -118,10 +118,16 @@ set(COMPILER_RT_GTEST_PATH ${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest)
 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 @@ macro(add_compiler_rt_test test_suite test_name)
     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 4885c82..2d1dd22 100644 (file)
@@ -17,15 +17,21 @@ macro(clang_compile object_file source)
   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 470543f..9a34cb0 100644 (file)
@@ -26,24 +26,29 @@ set(ASAN_UNITTEST_COMMON_CFLAGS
   -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 331117b..a374adb 100644 (file)
@@ -38,28 +38,28 @@ set(SANITIZER_TEST_CFLAGS_COMMON
   -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
        -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 bbbc423..df740b6 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clangxx_asan -O0 %s -Fe%t
+// RUN: %clang_cl_asan -O0 %s -Fe%t
 // RUN: %run %t
 
 #include <windows.h>
index 55cfdff..66a862d 100644 (file)
@@ -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 <malloc.h>
index 12e2b1f..f2b2b45 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clangxx_asan -O0 %s -Fe%t
+// RUN: %clang_cl_asan -O0 %s -Fe%t
 // RUN: %run %t
 
 #include <windows.h>
index e1a3fc8..253a759 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clangxx_asan -O0 %s -Fe%t
+// RUN: %clang_cl_asan -O0 %s -Fe%t
 // RUN: %run %t
 
 #include <windows.h>
index 63f3941..f49d671 100644 (file)
@@ -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 <windows.h>
index 71399a7..459025b 100644 (file)
@@ -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 <malloc.h>
index fcf3138..c976b87 100644 (file)
@@ -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 <malloc.h>
index 5a1d936..db5e707 100644 (file)
@@ -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 <malloc.h>
index 5544912..084f8a4 100644 (file)
@@ -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 db2b9d1..8b2c4d6 100644 (file)
@@ -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 <malloc.h>
index 2f3f78f..1d31f37 100644 (file)
@@ -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 <malloc.h>
index 470d3fa..5eb710e 100644 (file)
@@ -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 8a69e7d..9541135 100644 (file)
@@ -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 <stdio.h>
index caac426..f41d478 100644 (file)
@@ -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 <stdio.h>
index 8064b83..0653ea4 100644 (file)
@@ -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 <malloc.h>
index 5842999..b286380 100644 (file)
@@ -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 <malloc.h>
index 4b5bf33..6ec9072 100644 (file)
@@ -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 <process.h>
index 509e0af..e52345e 100644 (file)
@@ -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 09302c3..c61d4eb 100644 (file)
@@ -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 24f98dd..d486cb1 100644 (file)
@@ -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 <sanitizer/asan_interface.h>
index 22d9970..6cd74c2 100644 (file)
@@ -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 <malloc.h>
index a84eeb9..8f53623 100644 (file)
@@ -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 <windows.h>
index 6745c59..18a9fcb 100644 (file)
@@ -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 <malloc.h>
index 1cd7080..55a6d09 100644 (file)
@@ -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 <malloc.h>
index 6d17b24..8c147c9 100644 (file)
@@ -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 <windows.h>
index b54a2bb..3b66b8f 100644 (file)
@@ -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 <windows.h>
index 2ef37d0..400ca1b 100644 (file)
@@ -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 <stdio.h>
index 73ce951..89eb175 100644 (file)
@@ -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 <stdio.h>
index 1bc235f..0a40d86 100644 (file)
@@ -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 <stdio.h>
index 62a5be8..928a286 100644 (file)
@@ -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 <stdio.h>
index 2f6516e..ec133c3 100644 (file)
@@ -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 <malloc.h>
index ba1bf93..9975316 100644 (file)
@@ -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 <malloc.h>
index 3f873cc..f584789 100644 (file)
@@ -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 <malloc.h>
index 082cf4c..81b709f 100644 (file)
@@ -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 1465fa0..079c78e 100644 (file)
@@ -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 <windows.h>
index f48d7a6..1817996 100644 (file)
@@ -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 <windows.h>
index 7358cba..c3e7dac 100644 (file)
@@ -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 <windows.h>
index 77454fa..c077f11 100644 (file)
@@ -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 <windows.h>
index e6df9c9..7a66d17 100644 (file)
@@ -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 <windows.h>
index 350598a..c435458 100644 (file)
@@ -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 <windows.h>
index 511e509..7d30e1d 100644 (file)
@@ -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 <malloc.h>
index 3b0ad19..f741390 100644 (file)
@@ -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 <malloc.h>
index 45c5598..c5b6953 100644 (file)
@@ -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 <malloc.h>
index 65385e2..040d855 100644 (file)
@@ -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 <stdio.h>
index ac267bf..a370246 100644 (file)
@@ -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 <stdio.h>
index 7dc75f8..1aef1a9 100644 (file)
@@ -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 <stdio.h>
index 1eb6442..7955f26 100644 (file)
@@ -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 6afb0bf..14bb82f 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clangxx_asan -O0 %s -Fe%t
+// RUN: %clang_cl_asan -O0 %s -Fe%t
 // RUN: %run %t
 
 #include <windows.h>
index 30e8ce0..17b9b1b 100644 (file)
@@ -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 <windows.h>
index 365288d..601a1b8 100644 (file)
@@ -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 <windows.h>
index 49611d9..7da3a80 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clangxx_asan -O0 %s -Fe%t
+// RUN: %clang_cl_asan -O0 %s -Fe%t
 // RUN: %run %t
 
 #include <windows.h>
index 3a0d9c5..74be8d8 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clangxx_asan -O0 %s -Fe%t
+// RUN: %clang_cl_asan -O0 %s -Fe%t
 // RUN: %run %t
 
 #include <windows.h>
index 6bd722b..9d2c025 100644 (file)
@@ -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 <malloc.h>
index c221185..40cf5a1 100644 (file)
@@ -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 <windows.h>
index 0f43a6a..112dd53 100644 (file)
@@ -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 02c9b9f..2859ecc 100644 (file)
@@ -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 ef51266..ad9786f 100644 (file)
@@ -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 @@ else:
 # 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 @@ if config.asan_dynamic:
   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")