diff --git a/compiler-rt/test/asan/TestCases/Windows/coverage-basic.cpp b/compiler-rt/test/asan/TestCases/Windows/coverage-basic.cpp index 71291e8a53158..1b79016988260 100644 --- a/compiler-rt/test/asan/TestCases/Windows/coverage-basic.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/coverage-basic.cpp @@ -4,6 +4,7 @@ // RUN: %env_asan_opts=coverage=1 %run ./test.exe // // RUN: %sancov print *.sancov | FileCheck %s +// XFAIL: msvc #include diff --git a/compiler-rt/test/asan/TestCases/Windows/crash_read_write.cpp b/compiler-rt/test/asan/TestCases/Windows/crash_read_write.cpp index 74200cca1521b..bafc40c2c5665 100644 --- a/compiler-rt/test/asan/TestCases/Windows/crash_read_write.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/crash_read_write.cpp @@ -2,12 +2,13 @@ // RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=READ // RUN: not %run %t write 2>&1 | FileCheck %s --check-prefix=WRITE -#include +#include "../defines.h" #include +#include static volatile int sink; -__attribute__((noinline)) void Read(int *ptr) { sink = *ptr; } -__attribute__((noinline)) void Write(int *ptr) { *ptr = 0; } +ATTRIBUTE_NOINLINE void Read(int *ptr) { sink = *ptr; } +ATTRIBUTE_NOINLINE void Write(int *ptr) { *ptr = 0; } int main(int argc, char **argv) { // Writes to shadow are detected as reads from shadow gap (because of how the // shadow mapping works). This is kinda hard to fix. Test a random address in diff --git a/compiler-rt/test/asan/TestCases/Windows/dll_host.cpp b/compiler-rt/test/asan/TestCases/Windows/dll_host.cpp index 85b7967e86b51..773482783823f 100644 --- a/compiler-rt/test/asan/TestCases/Windows/dll_host.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/dll_host.cpp @@ -1,4 +1,5 @@ // UNSUPPORTED: target={{.*-windows-gnu}} +// XFAIL: msvc // This is a host program for DLL tests. // diff --git a/compiler-rt/test/asan/TestCases/Windows/dll_intercept_memcpy.cpp b/compiler-rt/test/asan/TestCases/Windows/dll_intercept_memcpy.cpp index 0a96752f9d0bf..4fa437960f126 100644 --- a/compiler-rt/test/asan/TestCases/Windows/dll_intercept_memcpy.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/dll_intercept_memcpy.cpp @@ -1,9 +1,9 @@ // RUN: %clang_cl_asan %Od %p/dll_host.cpp %Fe%t -// RUN: %clang_cl_asan -Wno-fortify-source %LD %Od %s %Fe%t.dll +// RUN: %clang_cl_asan %if !MSVC %{ -Wno-fortify-source %} %LD %Od %s %Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s // Test that it works correctly even with ICF enabled. -// RUN: %clang_cl_asan -Wno-fortify-source %LD %Od %s %Fe%t.dll \ +// RUN: %clang_cl_asan %if !MSVC %{ -Wno-fortify-source %} %LD %Od %s %Fe%t.dll \ // RUN: %if target={{.*-windows-gnu}} %{ -Wl,--gc-sections,--icf=all %} \ // RUN: %else %{ -link /OPT:REF /OPT:ICF %} // RUN: not %run %t %t.dll 2>&1 | FileCheck %s @@ -23,12 +23,12 @@ int test_function() { // CHECK: Initial test OK memcpy(buff2, buff1, 6); -// CHECK: AddressSanitizer: stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] -// CHECK: WRITE of size 6 at [[ADDR]] thread T0 -// CHECK-NEXT: __asan_{{.*}}memcpy -// CHECK-NEXT: test_function {{.*}}dll_intercept_memcpy.cpp:[[@LINE-4]] -// CHECK: Address [[ADDR]] is located in stack of thread T0 at offset {{.*}} in frame -// CHECK-NEXT: test_function {{.*}}dll_intercept_memcpy.cpp -// CHECK: 'buff2'{{.*}} <== Memory access at offset {{.*}} overflows this variable + // CHECK: AddressSanitizer: stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] + // CHECK: WRITE of size 6 at [[ADDR]] thread T0 + // CHECK-NEXT: __asan_{{.*}}{{(memcpy|memmove)}} + // CHECK-NEXT: test_function {{.*}}dll_intercept_memcpy.cpp:[[@LINE-4]] + // CHECK: Address [[ADDR]] is located in stack of thread T0 at offset {{.*}} in frame + // CHECK-NEXT: test_function {{.*}}dll_intercept_memcpy.cpp + // CHECK: 'buff2'{{.*}} <== Memory access at offset {{.*}} overflows this variable return 0; } diff --git a/compiler-rt/test/asan/TestCases/Windows/dll_intercept_memset.cpp b/compiler-rt/test/asan/TestCases/Windows/dll_intercept_memset.cpp index 27b343f439cb5..948a429e8c1a6 100644 --- a/compiler-rt/test/asan/TestCases/Windows/dll_intercept_memset.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/dll_intercept_memset.cpp @@ -1,9 +1,9 @@ -// RUN: %clang_cl_asan %Od %p/dll_host.cpp %Fe%t -// RUN: %clang_cl_asan -Wno-fortify-source %LD %Od %s %Fe%t.dll +// RUN: %clang_cl_asan %Od %Oy- %p/dll_host.cpp %Fe%t +// RUN: %clang_cl_asan %if !MSVC %{ -Wno-fortify-source %} %Oy- %LD %Od %s %Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s // Test that it works correctly even with ICF enabled. -// RUN: %clang_cl_asan -Wno-fortify-source %LD %Od %s %Fe%t.dll \ +// RUN: %clang_cl_asan %if !MSVC %{ -Wno-fortify-source %} %Oy- %LD %Od %s %Fe%t.dll \ // RUN: %if target={{.*-windows-gnu}} %{ -Wl,--gc-sections,--icf=all %} \ // RUN: %else %{ -link /OPT:REF /OPT:ICF %} // RUN: not %run %t %t.dll 2>&1 | FileCheck %s diff --git a/compiler-rt/test/asan/TestCases/Windows/dll_null_deref.cpp b/compiler-rt/test/asan/TestCases/Windows/dll_null_deref.cpp index b65926941cd78..d0d9a8ff0f516 100644 --- a/compiler-rt/test/asan/TestCases/Windows/dll_null_deref.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/dll_null_deref.cpp @@ -2,7 +2,9 @@ // RUN: %clang_cl_asan %LD %Od %s %Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s -__attribute__((noinline)) +#include "../defines.h" + +ATTRIBUTE_NOINLINE static void NullDeref(int *ptr) { // CHECK: ERROR: AddressSanitizer: access-violation on unknown address // CHECK: {{0x0*000.. .*pc 0x.*}} diff --git a/compiler-rt/test/asan/TestCases/Windows/dll_operator_array_new_with_dtor_left_oob.cpp b/compiler-rt/test/asan/TestCases/Windows/dll_operator_array_new_with_dtor_left_oob.cpp index ca6b256654a23..1d279f279d768 100644 --- a/compiler-rt/test/asan/TestCases/Windows/dll_operator_array_new_with_dtor_left_oob.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/dll_operator_array_new_with_dtor_left_oob.cpp @@ -2,12 +2,20 @@ // RUN: %clang_cl_asan %LD %Od %s %Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s +#include "../defines.h" + struct C { int x; ~C() {} }; -int __attribute__((noinline, optnone)) hide(int x) { return x; } +int ATTRIBUTE_NOINLINE +#if defined(__clang__) || !defined(_MSC_VER) + __attribute__((optnone)) +#endif + hide(int x) { + return x; +} extern "C" __declspec(dllexport) int test_function() { diff --git a/compiler-rt/test/asan/TestCases/Windows/dll_stack_use_after_return.cpp b/compiler-rt/test/asan/TestCases/Windows/dll_stack_use_after_return.cpp index be237044bb340..3a09566eb873f 100644 --- a/compiler-rt/test/asan/TestCases/Windows/dll_stack_use_after_return.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/dll_stack_use_after_return.cpp @@ -4,6 +4,8 @@ // RUN: %clang_cl_asan %LD %Od %s %Fe%t.dll -fsanitize-address-use-after-return=always // RUN: not %run %t %t.dll 2>&1 | FileCheck %s +// UNSUPPORTED: msvc + #include char *x; diff --git a/compiler-rt/test/asan/TestCases/Windows/global_const_string_oob.cpp b/compiler-rt/test/asan/TestCases/Windows/global_const_string_oob.cpp index 9788609773644..9615ccfc2aa0e 100644 --- a/compiler-rt/test/asan/TestCases/Windows/global_const_string_oob.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/global_const_string_oob.cpp @@ -13,7 +13,7 @@ int main(void) { // CHECK: AddressSanitizer: global-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] // CHECK: READ of size 1 at [[ADDR]] thread T0 // CHECK-NEXT: {{#0 .* main .*global_const_string_oob.cpp:}}[[@LINE-5]] - // CHECK: [[ADDR]] is located 5 bytes after global variable [[STR:.*]] defined in {{'.*global_const_string_oob.cpp' .*}} of size 11 + // CHECK: [[ADDR]] is located 5 bytes after global variable [[STR:.*]] defined in {{'.*global_const_string_oob.cpp.*}} of size 11 // CHECK: [[STR]] is ascii string 'foobarspam' return 0; } diff --git a/compiler-rt/test/asan/TestCases/Windows/illegal_instruction.cpp b/compiler-rt/test/asan/TestCases/Windows/illegal_instruction.cpp index 9b902c7536ca9..5c71c38a5113b 100644 --- a/compiler-rt/test/asan/TestCases/Windows/illegal_instruction.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/illegal_instruction.cpp @@ -1,5 +1,7 @@ // RUN: %clang_cl_asan %Od %s %Fe%t // RUN: %env_asan_opts=handle_sigill=1 not %run %t 2>&1 | FileCheck %s +// msvc doesn't have a __builtin_trap equivalent +// XFAIL: msvc // Test the error output from an illegal instruction. diff --git a/compiler-rt/test/asan/TestCases/Windows/issue64990.cpp b/compiler-rt/test/asan/TestCases/Windows/issue64990.cpp index b1b6e42148cb6..5222ec6e08191 100644 --- a/compiler-rt/test/asan/TestCases/Windows/issue64990.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/issue64990.cpp @@ -1,9 +1,13 @@ // Repro for the issue #64990: Asan with Windows EH generates __asan_xxx runtime calls without required funclet tokens -// RUN: %clang_cl_asan %Od %s -EHsc %Fe%t +// RUN: %clang_cl_asan %Od %if MSVC %{ /Oi %} %s -EHsc %Fe%t // RUN: not %run %t 2>&1 | FileCheck %s // UNSUPPORTED: target={{.*-windows-gnu}} +#if defined(_MSC_VER) && !defined(__clang__) +# include +#endif + char buff1[6] = "hello"; char buff2[6] = "hello"; @@ -12,7 +16,11 @@ int main(int argc, char **argv) { throw 1; } catch (...) { // Make asan generate call to __asan_memcpy inside the EH pad. +#if defined(_MSC_VER) && !defined(__clang__) + memcpy(buff1, buff2 + 3, 6); +#else __builtin_memcpy(buff1, buff2 + 3, 6); +#endif } return 0; } diff --git a/compiler-rt/test/asan/TestCases/Windows/msvc/seh.cpp b/compiler-rt/test/asan/TestCases/Windows/msvc/seh.cpp index 4cb0c55bc7730..f3c7e1a33a568 100644 --- a/compiler-rt/test/asan/TestCases/Windows/msvc/seh.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/msvc/seh.cpp @@ -2,15 +2,15 @@ // different EH personality depending on the -GS setting, so test both -GS+ and // -GS-. // -// RUN: cl -c %s -Fo%t.obj -DCOMPILE_SEH -// RUN: %clangxx_asan -o %t.exe %s %t.obj +// RUN: cl /EHa %MD -c %s -Fo%t.obj -DCOMPILE_SEH +// RUN: %clangxx_asan -o %t.exe %s %t.obj -DCOMPILE_MAIN // RUN: %run %t.exe // -// RUN: cl -GS- -c %s -Fo%t.obj -DCOMPILE_SEH -// RUN: %clangxx_asan -o %t.exe %s %t.obj +// RUN: cl /EHa %MD -GS- -c %s -Fo%t.obj -DCOMPILE_SEH +// RUN: %clangxx_asan -o %t.exe %s %t.obj -DCOMPILE_MAIN // RUN: %run %t.exe // -// RUN: %clang_cl_asan %s -DCOMPILE_SEH -Fe%t.exe +// RUN: %clang_cl_asan /EHa %MD %s -DCOMPILE_SEH -Fe%t.exe -DCOMPILE_MAIN // RUN: %run %t.exe #include @@ -42,7 +42,7 @@ void ThrowAndCatch() { } #endif -#if defined(__clang__) +#if defined(COMPILE_MAIN) int main() { char x[32]; fprintf(stderr, "Before: %p poisoned: %d\n", &x, diff --git a/compiler-rt/test/asan/TestCases/Windows/null_deref.cpp b/compiler-rt/test/asan/TestCases/Windows/null_deref.cpp deleted file mode 100644 index 6582bac9e69e3..0000000000000 --- a/compiler-rt/test/asan/TestCases/Windows/null_deref.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s -// FIXME: merge this with the common null_deref test when we can run common -// tests on Windows. - -__attribute__((noinline)) -static void NullDeref(int *ptr) { - // CHECK: ERROR: AddressSanitizer: access-violation on unknown address - // CHECK: {{0x0*000.. .*pc 0x.*}} - ptr[10]++; // BOOM -} -int main() { - NullDeref((int*)0); - // CHECK: {{ #1 0x.* in main.*null_deref.cpp:}}[[@LINE-1]]:3 - // CHECK: AddressSanitizer can not provide additional info. -} diff --git a/compiler-rt/test/asan/TestCases/Windows/null_deref_multiple_dlls.cpp b/compiler-rt/test/asan/TestCases/Windows/null_deref_multiple_dlls.cpp index ea5140a13dc88..19e3beefa4e0f 100644 --- a/compiler-rt/test/asan/TestCases/Windows/null_deref_multiple_dlls.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/null_deref_multiple_dlls.cpp @@ -9,6 +9,7 @@ // RUN: %clang_cl_asan %Od -DEXE %s %t1.lib %t2.lib %Fe%t // RUN: not %run %t 2>&1 | FileCheck %s +#include "../defines.h" #include #include @@ -28,7 +29,8 @@ __declspec(dllexport) void foo1() {} } #elif defined(DLL2) extern "C" { -__attribute__((noinline)) static void NullDeref(int *ptr) { +ATTRIBUTE_NOINLINE +static void NullDeref(int *ptr) { // CHECK: ERROR: AddressSanitizer: access-violation on unknown address // CHECK: {{0x0*000.. .*pc 0x.*}} ptr[10]++; // BOOM diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cpp index cad28ae8ace21..c66b201500e36 100644 --- a/compiler-rt/test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cpp @@ -1,13 +1,21 @@ // RUN: %clang_cl_asan %Od %s %Fe%t // RUN: not %run %t 2>&1 | FileCheck %s +#include "../defines.h" + struct C { int x; ~C() {} }; - -int __attribute__((noinline, optnone)) hide(int x) { return x; } - +#if defined(_MSC_VER) && !defined(__clang__) +# pragma optimize("", off) +#else +__attribute__((optnone)) +#endif +int ATTRIBUTE_NOINLINE hide(int x) { return x; } +#if defined(_MSC_VER) && !defined(__clang__) +# pragma optimize("", on) +#endif int main() { C *buffer = new C[42]; buffer[hide(-(1 + (int)sizeof(void*) / 4))].x = 42; diff --git a/compiler-rt/test/asan/TestCases/Windows/sse_misalignment.cpp b/compiler-rt/test/asan/TestCases/Windows/sse_misalignment.cpp index 1424ee88129f6..ee953cd6e4bfe 100644 --- a/compiler-rt/test/asan/TestCases/Windows/sse_misalignment.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/sse_misalignment.cpp @@ -3,6 +3,7 @@ // FIXME: On MinGW frame #0 does not include the line number? // XFAIL: target={{.*-windows-gnu}} +// XFAIL: msvc // Test the error output from misaligned SSE2 memory access. This is a READ // memory access. Windows appears to always provide an address of -1 for these diff --git a/compiler-rt/test/asan/TestCases/Windows/stack_use_after_return.cpp b/compiler-rt/test/asan/TestCases/Windows/stack_use_after_return.cpp index 9385e36a37b67..0b33ff3340cf6 100644 --- a/compiler-rt/test/asan/TestCases/Windows/stack_use_after_return.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/stack_use_after_return.cpp @@ -3,7 +3,7 @@ // RUN: %clang_cl_asan %Od %s %Fe%t -fsanitize-address-use-after-return=always // RUN: not %run %t 2>&1 | FileCheck %s - +// XFAIL: msvc char *x; void foo() { diff --git a/compiler-rt/test/asan/TestCases/Windows/unsymbolized.cpp b/compiler-rt/test/asan/TestCases/Windows/unsymbolized.cpp index 00428b809fccd..ade5e5b914be8 100644 --- a/compiler-rt/test/asan/TestCases/Windows/unsymbolized.cpp +++ b/compiler-rt/test/asan/TestCases/Windows/unsymbolized.cpp @@ -8,9 +8,10 @@ // RUN: not %run %t.exe 2>&1 | FileCheck %s // REQUIRES: lld-available -#include +#include "../defines.h" #include -int __attribute__((noinline)) do_uaf(void); +#include +int ATTRIBUTE_NOINLINE do_uaf(void); int main() { int r = do_uaf(); printf("r: %d\n", r); diff --git a/compiler-rt/test/asan/TestCases/alloca_big_alignment.cpp b/compiler-rt/test/asan/TestCases/alloca_big_alignment.cpp index a451e873f2e42..5ef52e7b6e0dd 100644 --- a/compiler-rt/test/asan/TestCases/alloca_big_alignment.cpp +++ b/compiler-rt/test/asan/TestCases/alloca_big_alignment.cpp @@ -1,12 +1,14 @@ // RUN: %clangxx_asan -O0 -mllvm -asan-instrument-dynamic-allocas %s -o %t // RUN: not %run %t 2>&1 | FileCheck %s // +// XFAIL: msvc +#include "defines.h" #include #include -__attribute__((noinline)) void foo(int index, int len) { - volatile char str[len] __attribute__((aligned(128))); +ATTRIBUTE_NOINLINE void foo(int index, int len) { + volatile char str[len] ATTRIBUTE_ALIGNED(128); assert(!(reinterpret_cast(str) & 127L)); str[index] = '1'; // BOOM // CHECK: ERROR: AddressSanitizer: dynamic-stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] diff --git a/compiler-rt/test/asan/TestCases/alloca_constant_size.cpp b/compiler-rt/test/asan/TestCases/alloca_constant_size.cpp index 8910ea9f8d8e2..91c3ca296ac1e 100644 --- a/compiler-rt/test/asan/TestCases/alloca_constant_size.cpp +++ b/compiler-rt/test/asan/TestCases/alloca_constant_size.cpp @@ -7,6 +7,9 @@ #include #include #include +#ifdef _MSC_VER +# include +#endif // MSVC provides _alloca instead of alloca. #if defined(_MSC_VER) && !defined(alloca) diff --git a/compiler-rt/test/asan/TestCases/alloca_detect_custom_size_.cpp b/compiler-rt/test/asan/TestCases/alloca_detect_custom_size_.cpp index 8b207aa07f2eb..e8e73d46f8a73 100644 --- a/compiler-rt/test/asan/TestCases/alloca_detect_custom_size_.cpp +++ b/compiler-rt/test/asan/TestCases/alloca_detect_custom_size_.cpp @@ -2,16 +2,24 @@ // RUN: not %run %t 2>&1 | FileCheck %s // +#include "defines.h" #include #include +#if defined(_MSC_VER) && !defined(__clang__) +# include +#endif struct A { char a[3]; int b[3]; }; -__attribute__((noinline)) void foo(int index, int len) { - volatile struct A str[len] __attribute__((aligned(32))); +ATTRIBUTE_NOINLINE void foo(int index, int len) { +#if !defined(_MSC_VER) || defined(__clang__) + volatile struct A str[len] ATTRIBUTE_ALIGNED(32); +#else + volatile struct A *str = (volatile struct A *)_alloca(len * sizeof(struct A)); +#endif assert(!(reinterpret_cast(str) & 31L)); str[index].a[0] = '1'; // BOOM // CHECK: ERROR: AddressSanitizer: dynamic-stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] diff --git a/compiler-rt/test/asan/TestCases/alloca_instruments_all_paddings.cpp b/compiler-rt/test/asan/TestCases/alloca_instruments_all_paddings.cpp index 912c8b0abaabd..4688079dfe6fb 100644 --- a/compiler-rt/test/asan/TestCases/alloca_instruments_all_paddings.cpp +++ b/compiler-rt/test/asan/TestCases/alloca_instruments_all_paddings.cpp @@ -2,6 +2,8 @@ // RUN: %clangxx_asan -O3 -mllvm -asan-instrument-dynamic-allocas %s -o %t // RUN: %run %t 2>&1 // +// MSVC does not support asan-instrament-dynamic-allocas yet +// UNSUPPORTED: msvc #include "sanitizer/asan_interface.h" #include diff --git a/compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp b/compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp index 0967b34dc7dbf..7e77d963c1e65 100644 --- a/compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp +++ b/compiler-rt/test/asan/TestCases/alloca_loop_unpoisoning.cpp @@ -5,10 +5,14 @@ // This testcase checks that allocas and VLAs inside loop are correctly unpoisoned. +// MSVC doesn't support VLAs in the first place. +// UNSUPPORTED: msvc + +#include "defines.h" +#include "sanitizer/asan_interface.h" #include #include #include -#include "sanitizer/asan_interface.h" // MSVC provides _alloca instead of alloca. #if defined(_MSC_VER) && !defined(alloca) @@ -21,7 +25,7 @@ void *top, *bot; -__attribute__((noinline)) void foo(int len) { +ATTRIBUTE_NOINLINE void foo(int len) { char x; top = &x; volatile char array[len]; diff --git a/compiler-rt/test/asan/TestCases/alloca_overflow_partial.cpp b/compiler-rt/test/asan/TestCases/alloca_overflow_partial.cpp index 25c6d75be7a53..f06195bb7793f 100644 --- a/compiler-rt/test/asan/TestCases/alloca_overflow_partial.cpp +++ b/compiler-rt/test/asan/TestCases/alloca_overflow_partial.cpp @@ -1,6 +1,8 @@ // RUN: %clangxx_asan -O0 -mllvm -asan-instrument-dynamic-allocas %s -o %t // RUN: not %run %t 2>&1 | FileCheck %s // +// MSVC doesn't support VLAs +// UNSUPPORTED: msvc #include #include diff --git a/compiler-rt/test/asan/TestCases/alloca_overflow_right.cpp b/compiler-rt/test/asan/TestCases/alloca_overflow_right.cpp index 7ec4b86cdc715..626c12488858d 100644 --- a/compiler-rt/test/asan/TestCases/alloca_overflow_right.cpp +++ b/compiler-rt/test/asan/TestCases/alloca_overflow_right.cpp @@ -1,6 +1,8 @@ // RUN: %clangxx_asan -O0 -mllvm -asan-instrument-dynamic-allocas %s -o %t // RUN: not %run %t 2>&1 | FileCheck %s // +// MSVC doesn't support VLAs +// UNSUPPORTED: msvc #include #include diff --git a/compiler-rt/test/asan/TestCases/alloca_safe_access.cpp b/compiler-rt/test/asan/TestCases/alloca_safe_access.cpp index 98e31769812bf..8979b6ca726ee 100644 --- a/compiler-rt/test/asan/TestCases/alloca_safe_access.cpp +++ b/compiler-rt/test/asan/TestCases/alloca_safe_access.cpp @@ -1,6 +1,8 @@ // RUN: %clangxx_asan -O0 -mllvm -asan-instrument-dynamic-allocas %s -o %t // RUN: %run %t 2>&1 // +// MSVC doesn't support VLAs +// UNSUPPORTED: msvc #include #include diff --git a/compiler-rt/test/asan/TestCases/alloca_underflow_left.cpp b/compiler-rt/test/asan/TestCases/alloca_underflow_left.cpp index 52cd781c4bb88..532344319b019 100644 --- a/compiler-rt/test/asan/TestCases/alloca_underflow_left.cpp +++ b/compiler-rt/test/asan/TestCases/alloca_underflow_left.cpp @@ -1,6 +1,8 @@ // RUN: %clangxx_asan -O0 -mllvm -asan-instrument-dynamic-allocas %s -o %t // RUN: not %run %t 2>&1 | FileCheck %s // +// MSVC doesn't support VLAs +// UNSUPPORTED: msvc #include #include diff --git a/compiler-rt/test/asan/TestCases/alloca_vla_interact.cpp b/compiler-rt/test/asan/TestCases/alloca_vla_interact.cpp index b98bb726dcebc..e83812242f88b 100644 --- a/compiler-rt/test/asan/TestCases/alloca_vla_interact.cpp +++ b/compiler-rt/test/asan/TestCases/alloca_vla_interact.cpp @@ -8,6 +8,9 @@ // This testcase checks correct interaction between VLAs and allocas. +// MSVC doesn't support VLA's +// UNSUPPORTED: msvc + #include #include #include diff --git a/compiler-rt/test/asan/TestCases/contiguous_container.cpp b/compiler-rt/test/asan/TestCases/contiguous_container.cpp index 6288e752fd4ba..a2adb1951dde6 100644 --- a/compiler-rt/test/asan/TestCases/contiguous_container.cpp +++ b/compiler-rt/test/asan/TestCases/contiguous_container.cpp @@ -2,6 +2,7 @@ // // Test __sanitizer_annotate_contiguous_container. +#include "defines.h" #include #include #include @@ -247,9 +248,9 @@ void TestDoubleEndedContainer(size_t capacity, size_t off_begin, delete[] buffer; } -__attribute__((noinline)) void Throw() { throw 1; } +ATTRIBUTE_NOINLINE void Throw() { throw 1; } -__attribute__((noinline)) void ThrowAndCatch() { +ATTRIBUTE_NOINLINE void ThrowAndCatch() { try { Throw(); } catch (...) { diff --git a/compiler-rt/test/asan/TestCases/coverage-trace-pc.cpp b/compiler-rt/test/asan/TestCases/coverage-trace-pc.cpp index c03a6f02f7719..e55c3acce9af3 100644 --- a/compiler-rt/test/asan/TestCases/coverage-trace-pc.cpp +++ b/compiler-rt/test/asan/TestCases/coverage-trace-pc.cpp @@ -2,6 +2,8 @@ // RUN: %clangxx_asan -O0 -DTRACE_RT %s -o %t-rt.o -c // RUN: %clangxx_asan -O0 -fsanitize-coverage=edge,trace-pc,indirect-calls %s -o %t %t-rt.o // RUN: %run %t +// XFAIL: msvc + #ifdef TRACE_RT int pc_count; void *last_callee; @@ -12,13 +14,14 @@ extern "C" void __sanitizer_cov_trace_pc_indir(void *callee) { last_callee = callee; } #else -#include -#include +# include "defines.h" +# include +# include extern int pc_count; extern void *last_callee; -__attribute__((noinline)) void foo() { printf("foo\n"); } -__attribute__((noinline)) void bar() { printf("bar\n"); } +ATTRIBUTE_NOINLINE void foo() { printf("foo\n"); } +ATTRIBUTE_NOINLINE void bar() { printf("bar\n"); } int main(int argc, char **argv) { void (*f)(void) = argc ? foo : bar; diff --git a/compiler-rt/test/asan/TestCases/debug_locate.cpp b/compiler-rt/test/asan/TestCases/debug_locate.cpp index 93d1af8b83916..2ccddd4739d4a 100644 --- a/compiler-rt/test/asan/TestCases/debug_locate.cpp +++ b/compiler-rt/test/asan/TestCases/debug_locate.cpp @@ -3,7 +3,7 @@ // that it correctly finds out which region (and name and size) the address // belongs to. // RUN: %clangxx_asan -O0 %s -o %t && %run %t 2>&1 - +// UNSUPPORTED: msvc #include #include #include diff --git a/compiler-rt/test/asan/TestCases/debug_stacks.cpp b/compiler-rt/test/asan/TestCases/debug_stacks.cpp index 67a9ac849c3aa..391e241023462 100644 --- a/compiler-rt/test/asan/TestCases/debug_stacks.cpp +++ b/compiler-rt/test/asan/TestCases/debug_stacks.cpp @@ -1,6 +1,6 @@ // Check that the stack trace debugging API works and returns correct // malloc and free stacks. -// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_asan -O0 %if MSVC %{ /wd4477 %} %s -o %t && not %run %t 2>&1 | FileCheck %s // FIXME: Figure out why allocation/free stack traces may be too short on ARM. // REQUIRES: stable-runtime diff --git a/compiler-rt/test/asan/TestCases/deep_tail_call.cpp b/compiler-rt/test/asan/TestCases/deep_tail_call.cpp index 628ef06db1447..772fa48bab7dc 100644 --- a/compiler-rt/test/asan/TestCases/deep_tail_call.cpp +++ b/compiler-rt/test/asan/TestCases/deep_tail_call.cpp @@ -4,15 +4,16 @@ // RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s // CHECK: AddressSanitizer: global-buffer-overflow +#include "defines.h" int global[10]; // CHECK: {{#0.*call4}} -void __attribute__((noinline)) call4(int i) { global[i+10]++; } +void ATTRIBUTE_NOINLINE call4(int i) { global[i + 10]++; } // CHECK: {{#1.*call3}} -void __attribute__((noinline)) call3(int i) { call4(i); } +void ATTRIBUTE_NOINLINE call3(int i) { call4(i); } // CHECK: {{#2.*call2}} -void __attribute__((noinline)) call2(int i) { call3(i); } +void ATTRIBUTE_NOINLINE call2(int i) { call3(i); } // CHECK: {{#3.*call1}} -void __attribute__((noinline)) call1(int i) { call2(i); } +void ATTRIBUTE_NOINLINE call1(int i) { call2(i); } // CHECK: {{#4.*main}} int main(int argc, char **argv) { call1(argc); diff --git a/compiler-rt/test/asan/TestCases/default_ignorelist.cpp b/compiler-rt/test/asan/TestCases/default_ignorelist.cpp index 8297b51e7680e..c1277394680f1 100644 --- a/compiler-rt/test/asan/TestCases/default_ignorelist.cpp +++ b/compiler-rt/test/asan/TestCases/default_ignorelist.cpp @@ -1,5 +1,5 @@ // FIXME: https://code.google.com/p/address-sanitizer/issues/detail?id=316 -// XFAIL: android +// XFAIL: android, msvc // UNSUPPORTED: ios // // Test that ASan uses the default ignorelist from resource directory. diff --git a/compiler-rt/test/asan/TestCases/default_options.cpp b/compiler-rt/test/asan/TestCases/default_options.cpp index 845e8a5f1793e..33507f3c82ef1 100644 --- a/compiler-rt/test/asan/TestCases/default_options.cpp +++ b/compiler-rt/test/asan/TestCases/default_options.cpp @@ -1,13 +1,14 @@ // RUN: %clangxx_asan -O2 %s -o %t // RUN: %run %t 2>&1 | FileCheck %s +#include "defines.h" + const char *kAsanDefaultOptions = "verbosity=1 help=1"; // Required for dyld macOS 12.0+ #if (__APPLE__) __attribute__((weak)) #endif -__attribute__((no_sanitize_address)) -extern "C" const char * +ATTRIBUTE_NO_SANITIZE_ADDRESS extern "C" const char * __asan_default_options() { // CHECK: Available flags for AddressSanitizer: return kAsanDefaultOptions; diff --git a/compiler-rt/test/asan/TestCases/defines.h b/compiler-rt/test/asan/TestCases/defines.h new file mode 100644 index 0000000000000..db6e374d2a031 --- /dev/null +++ b/compiler-rt/test/asan/TestCases/defines.h @@ -0,0 +1,34 @@ +#ifndef SANITIZER_TEST_DEFINES_H +#define SANITIZER_TEST_DEFINES_H + +#if defined(_MSC_VER) && !defined(__clang__) +# include + +# define ATTRIBUTE_NOINLINE __declspec(noinline) +# define ATTRIBUTE_ALIGNED(x) __declspec(align(x)) +# define ATTRIBUTE_NO_SANITIZE_ADDRESS __declspec(no_sanitize_address) +# define ATTRIBUTE_USED /* FIXME: Is there a __declspec used? */ +# define ATTRIBUTE_ALWAYS_INLINE __forceinline +# define VOLATILE volatile +# define EXTRACT_RETURN_ADDRESS _ReturnAddress() +# define ASM_CAUSE_SIDE_EFFECT(dest) __asm { mov eax, dest} +# define MULTIPLE_ATTRIBUTE_DECL(a, b) __declspec(a b) + +#else + +# define ATTRIBUTE_NOINLINE __attribute__((noinline)) +# define ATTRIBUTE_ALIGNED(x) __attribute__((aligned(x))) +# define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) +# define ATTRIBUTE_USED __attribute__((used)) +# define ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline)) +# define INLINE_ASM(x) __asm__(x) +# define VOLATILE __volatile__ +# define EXTRACT_RETURN_ADDRESS \ + __builtin_extract_return_addr(__builtin_return_address(0)) +# define ASM_CAUSE_SIDE_EFFECT(dest) \ + __asm__ __volatile__("" : : "r"(dest) : "memory"); +# define MULTIPLE_ATTRIBUTE_DECL(a, b) __attribute__((a, b)) + +#endif // _MSC_VER + +#endif // SANITIZER_TEST_DEFINES diff --git a/compiler-rt/test/asan/TestCases/error_report_callback.cpp b/compiler-rt/test/asan/TestCases/error_report_callback.cpp index 8c5bbe418fc52..903947e729fb2 100644 --- a/compiler-rt/test/asan/TestCases/error_report_callback.cpp +++ b/compiler-rt/test/asan/TestCases/error_report_callback.cpp @@ -1,6 +1,7 @@ // RUN: %clangxx_asan -O0 %s -o %t // RUN: not %run %t 0 2>&1 | FileCheck %s +#include "defines.h" #include #include @@ -11,9 +12,7 @@ static void ErrorReportCallbackOneToZ(const char *report) { int main(int argc, char **argv) { __asan_set_error_report_callback(ErrorReportCallbackOneToZ); - __asan_report_error( - (void *)__builtin_extract_return_addr(__builtin_return_address(0)), 0, 0, - 0, true, 1); + __asan_report_error((void *)EXTRACT_RETURN_ADDRESS, 0, 0, 0, true, 1); // CHECK: ABCDEF // CHECK: ERROR: AddressSanitizer // CHECK: GHIJKL diff --git a/compiler-rt/test/asan/TestCases/exitcode.cpp b/compiler-rt/test/asan/TestCases/exitcode.cpp index e949436e1909c..21743bfbd7b8d 100644 --- a/compiler-rt/test/asan/TestCases/exitcode.cpp +++ b/compiler-rt/test/asan/TestCases/exitcode.cpp @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -g -Wno-deprecated-declarations %s -o %t +// RUN: %clangxx_asan -g %if !MSVC %{ -Wno-deprecated-declarations %} %s -o %t // RUN: %env_asan_opts=exitcode=42 %run %t | FileCheck %s // Android doesn't have spawn.h or posix_spawn. diff --git a/compiler-rt/test/asan/TestCases/force_inline_opt0.cpp b/compiler-rt/test/asan/TestCases/force_inline_opt0.cpp index e6e5d26c7998e..0c721bcc5c809 100644 --- a/compiler-rt/test/asan/TestCases/force_inline_opt0.cpp +++ b/compiler-rt/test/asan/TestCases/force_inline_opt0.cpp @@ -1,8 +1,11 @@ // This test checks that we are no instrumenting a memory access twice // (before and after inlining) -// RUN: %clangxx_asan -O1 %s -o %t && %run %t -// RUN: %clangxx_asan -O0 %s -o %t && %run %t -__attribute__((always_inline)) +// RUN: %clangxx_asan -O1 %if MSVC %{ /Ob1 %} %s -o %t && %run %t +// RUN: %clangxx_asan -O0 %if MSVC %{ /Ob1 %} %s -o %t && %run %t + +#include "defines.h" + +ATTRIBUTE_ALWAYS_INLINE void foo(int *x) { *x = 0; } diff --git a/compiler-rt/test/asan/TestCases/global-location-nodebug.cpp b/compiler-rt/test/asan/TestCases/global-location-nodebug.cpp index 07c8e63f439da..199816b8036ab 100644 --- a/compiler-rt/test/asan/TestCases/global-location-nodebug.cpp +++ b/compiler-rt/test/asan/TestCases/global-location-nodebug.cpp @@ -11,7 +11,7 @@ /// Solaris ld -S has different semantics, so enforce -fuse-ld= for /// configurations that default to GNU ld. // XFAIL: target={{.*solaris.*}} - +// XFAIL: msvc // CHECK: AddressSanitizer: global-buffer-overflow // CLASS_STATIC-NO-G: 0x{{.*}} is located 4 bytes after global variable '{{.*}}C::array{{.*}}' defined in '{{.*}}global-location.cpp' {{.*}} of size 40 // GLOB-NO-G: 0x{{.*}} is located 4 bytes after global variable '{{.*}}global{{.*}}' defined in '{{.*}}global-location.cpp' {{.*}} of size 40 diff --git a/compiler-rt/test/asan/TestCases/global-underflow.cpp b/compiler-rt/test/asan/TestCases/global-underflow.cpp index 32b4ce82f9b04..fc9b14628aece 100644 --- a/compiler-rt/test/asan/TestCases/global-underflow.cpp +++ b/compiler-rt/test/asan/TestCases/global-underflow.cpp @@ -1,3 +1,4 @@ +// XFAIL: msvc // RUN: %clangxx_asan -O0 %s %p/Helpers/underflow.cpp -o %t && not %run %t 2>&1 | FileCheck %s // RUN: %clangxx_asan -O1 %s %p/Helpers/underflow.cpp -o %t && not %run %t 2>&1 | FileCheck %s // RUN: %clangxx_asan -O2 %s %p/Helpers/underflow.cpp -o %t && not %run %t 2>&1 | FileCheck %s diff --git a/compiler-rt/test/asan/TestCases/halt_on_error-1.c b/compiler-rt/test/asan/TestCases/halt_on_error-1.c index 63c65e58bb71b..d40a281987133 100644 --- a/compiler-rt/test/asan/TestCases/halt_on_error-1.c +++ b/compiler-rt/test/asan/TestCases/halt_on_error-1.c @@ -5,7 +5,7 @@ // RUN: env not %run %t 2>&1 | FileCheck %s // RUN: %env_asan_opts=halt_on_error=true not %run %t 2>&1 | FileCheck %s // RUN: %env_asan_opts=halt_on_error=false %run %t 2>&1 | FileCheck %s --check-prefix CHECK-RECOVER - +// XFAIL: msvc #include volatile int ten = 10; diff --git a/compiler-rt/test/asan/TestCases/heavy_uar_test.cpp b/compiler-rt/test/asan/TestCases/heavy_uar_test.cpp index 661867260d260..200d19cdbaf8a 100644 --- a/compiler-rt/test/asan/TestCases/heavy_uar_test.cpp +++ b/compiler-rt/test/asan/TestCases/heavy_uar_test.cpp @@ -15,29 +15,29 @@ // UNSUPPORTED: ios +#include "defines.h" #include -#include #include +#include #ifdef _WIN32 # include #endif -__attribute__((noinline)) +ATTRIBUTE_NOINLINE char *pretend_to_do_something(char *x) { __asm__ __volatile__("" : : "r" (x) : "memory"); return x; } -__attribute__((noinline)) +ATTRIBUTE_NOINLINE char *LeakStack() { char x[1024]; memset(x, 0, sizeof(x)); return pretend_to_do_something(x); } -template -__attribute__((noinline)) -void RecursiveFunctionWithStackFrame(int depth) { +template +ATTRIBUTE_NOINLINE void RecursiveFunctionWithStackFrame(int depth) { if (depth <= 0) return; char x[kFrameSize]; x[0] = depth; diff --git a/compiler-rt/test/asan/TestCases/ignorelist.cpp b/compiler-rt/test/asan/TestCases/ignorelist.cpp index 348ea5d350bf1..5fe728bfe9c21 100644 --- a/compiler-rt/test/asan/TestCases/ignorelist.cpp +++ b/compiler-rt/test/asan/TestCases/ignorelist.cpp @@ -15,7 +15,10 @@ // badGlobal is accessed improperly, but we ignorelisted it. Align // it to make sure memory past the end of badGlobal will be in // the same page. -__attribute__((aligned(16))) int badGlobal; + +// XFAIL: msvc +#include "defines.h" +ATTRIBUTE_ALIGNED(16) int badGlobal; int readBadGlobal() { return (&badGlobal)[1]; } diff --git a/compiler-rt/test/asan/TestCases/ill.cpp b/compiler-rt/test/asan/TestCases/ill.cpp index d7b5350916719..da457d6737dbd 100644 --- a/compiler-rt/test/asan/TestCases/ill.cpp +++ b/compiler-rt/test/asan/TestCases/ill.cpp @@ -2,12 +2,18 @@ // // RUN: %clangxx_asan %s -o %t && %env_asan_opts=handle_sigill=0 not --crash %run %t 2>&1 | FileCheck %s --check-prefix=CHECK0 // RUN: %clangxx_asan %s -o %t && %env_asan_opts=handle_sigill=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 -// REQUIRES: x86-target-arch +// REQUIRES: x86-target-arch && (!MSVC || asan-32-bits) #ifdef _WIN32 #include #endif +// note: test is limited to i386 only ("asan-32-bits") when using "real" MSVC +// see the requires clause above +#if defined(_MSC_VER) && !defined(__clang__) +# define __builtin_trap() __asm ud2; +#endif + int main(int argc, char **argv) { #ifdef _WIN32 // Sometimes on Windows this test generates a WER fault dialog. Suppress that. diff --git a/compiler-rt/test/asan/TestCases/initialization-bug.cpp b/compiler-rt/test/asan/TestCases/initialization-bug.cpp index 2775f6ce356dd..1af6e256f0c24 100644 --- a/compiler-rt/test/asan/TestCases/initialization-bug.cpp +++ b/compiler-rt/test/asan/TestCases/initialization-bug.cpp @@ -8,6 +8,7 @@ // FIXME: https://code.google.com/p/address-sanitizer/issues/detail?id=186 // XFAIL: target={{.*windows-msvc.*}} +#include "defines.h" #include // The structure of the test is: @@ -27,7 +28,7 @@ int z = initZ(); // result is undefined behavior, which should be caught by initialization order // checking. extern int y; -int __attribute__((noinline)) initX() { +int ATTRIBUTE_NOINLINE initX() { return y + 1; // CHECK: {{AddressSanitizer: initialization-order-fiasco}} // CHECK: {{READ of size .* at 0x.* thread T0}} diff --git a/compiler-rt/test/asan/TestCases/inline.cpp b/compiler-rt/test/asan/TestCases/inline.cpp index 12bd27e675844..42779a07ae2e6 100644 --- a/compiler-rt/test/asan/TestCases/inline.cpp +++ b/compiler-rt/test/asan/TestCases/inline.cpp @@ -2,10 +2,15 @@ // Test that no_sanitize_address attribute applies even when the function would // be normally inlined. +// +// MSVC doesn't apply __declspec(no_sanitize_address) to inlined functions +// (i.e. it contains this bug) +// XFAIL: msvc +#include "defines.h" #include -__attribute__((no_sanitize_address)) +ATTRIBUTE_NO_SANITIZE_ADDRESS int f(int *p) { return *p; // BOOOM?? Nope! } diff --git a/compiler-rt/test/asan/TestCases/intercept-rethrow-exception.cpp b/compiler-rt/test/asan/TestCases/intercept-rethrow-exception.cpp index bf51eed41fddf..24b93c56e730c 100644 --- a/compiler-rt/test/asan/TestCases/intercept-rethrow-exception.cpp +++ b/compiler-rt/test/asan/TestCases/intercept-rethrow-exception.cpp @@ -15,6 +15,7 @@ // https://reviews.llvm.org/D111703 made compiler incompatible with released NDK. // UNSUPPORTED: android && arm-target-arch +#include "defines.h" #include #include #include @@ -28,7 +29,7 @@ namespace { // [[noreturn]] because the scenario we're emulating doesn't always throw. If it // were [[noreturn]], the calling code would emit a call to // __asan_handle_no_return. -void __attribute__((no_sanitize("address"))) +void ATTRIBUTE_NO_SANITIZE_ADDRESS uninstrumented_rethrow_exception(std::exception_ptr const &exc_ptr) { std::rethrow_exception(exc_ptr); } diff --git a/compiler-rt/test/asan/TestCases/interception_failure_test.cpp b/compiler-rt/test/asan/TestCases/interception_failure_test.cpp index 918fa8e82bf74..bdaf3eb3178f2 100644 --- a/compiler-rt/test/asan/TestCases/interception_failure_test.cpp +++ b/compiler-rt/test/asan/TestCases/interception_failure_test.cpp @@ -18,6 +18,10 @@ // it works with the dynamic runtime. // XFAIL: target={{.*netbsd.*}} && !asan-dynamic-runtime +#if defined(_MSC_VER) && !defined(__clang__) +# pragma warning(disable : 4273) +#endif + #include #include #include diff --git a/compiler-rt/test/asan/TestCases/interface_test.cpp b/compiler-rt/test/asan/TestCases/interface_test.cpp index 9419f07e91eae..bc347807bcc3a 100644 --- a/compiler-rt/test/asan/TestCases/interface_test.cpp +++ b/compiler-rt/test/asan/TestCases/interface_test.cpp @@ -1,8 +1,8 @@ // Check that user may include ASan interface header. // RUN: %clang_asan %s -o %t && %run %t // RUN: %clang_asan -x c %s -o %t && %run %t -// RUN: %clang %s -pie -o %t && %run %t -// RUN: %clang -x c %s -pie -o %t && %run %t +// RUN: %clang %s %pie -o %t && %run %t +// RUN: %clang -x c %s %pie -o %t && %run %t #include int main() { diff --git a/compiler-rt/test/asan/TestCases/invalid-pointer-pairs-compare-errors.cpp b/compiler-rt/test/asan/TestCases/invalid-pointer-pairs-compare-errors.cpp index 7b1479e2d05bd..84c264b305692 100644 --- a/compiler-rt/test/asan/TestCases/invalid-pointer-pairs-compare-errors.cpp +++ b/compiler-rt/test/asan/TestCases/invalid-pointer-pairs-compare-errors.cpp @@ -1,7 +1,7 @@ // RUN: %clangxx_asan -O0 %s -o %t -mllvm -asan-detect-invalid-pointer-pair // RUN: %env_asan_opts=detect_invalid_pointer_pairs=2:halt_on_error=0 %run %t 2>&1 | FileCheck %s - +// XFAIL: msvc #include #include diff --git a/compiler-rt/test/asan/TestCases/invalid-pointer-pairs-subtract-errors.cpp b/compiler-rt/test/asan/TestCases/invalid-pointer-pairs-subtract-errors.cpp index 535833d05c89a..80742cddc0460 100644 --- a/compiler-rt/test/asan/TestCases/invalid-pointer-pairs-subtract-errors.cpp +++ b/compiler-rt/test/asan/TestCases/invalid-pointer-pairs-subtract-errors.cpp @@ -1,7 +1,7 @@ // RUN: %clangxx_asan -O0 %s -o %t -mllvm -asan-detect-invalid-pointer-pair // RUN: %env_asan_opts=detect_invalid_pointer_pairs=2:halt_on_error=0 %run %t 2>&1 | FileCheck %s - +// XFAIL: msvc #include #include diff --git a/compiler-rt/test/asan/TestCases/invalid-pointer-pairs.cpp b/compiler-rt/test/asan/TestCases/invalid-pointer-pairs.cpp index accd9b7704d51..061a0a7b2b861 100644 --- a/compiler-rt/test/asan/TestCases/invalid-pointer-pairs.cpp +++ b/compiler-rt/test/asan/TestCases/invalid-pointer-pairs.cpp @@ -4,7 +4,7 @@ // RUN: %env_asan_opts=detect_invalid_pointer_pairs=1 not %run %t g 2>&1 | FileCheck %s -check-prefix=CMP -check-prefix=ALL-ERRORS // RUN: %env_asan_opts=detect_invalid_pointer_pairs=1 not %run %t s 2>&1 | FileCheck %s -check-prefix=SUB -check-prefix=ALL-ERRORS // RUN: %env_asan_opts=detect_invalid_pointer_pairs=1 not %run %t f 2>&1 | FileCheck %s -check-prefix=FREE -check-prefix=ALL-ERRORS - +// XFAIL: msvc #include #include diff --git a/compiler-rt/test/asan/TestCases/large_func_test.cpp b/compiler-rt/test/asan/TestCases/large_func_test.cpp index c64fc7d3c7aa7..1c25d345cb5c4 100644 --- a/compiler-rt/test/asan/TestCases/large_func_test.cpp +++ b/compiler-rt/test/asan/TestCases/large_func_test.cpp @@ -7,8 +7,9 @@ // Issue #108194: Incomplete .debug_line at -O1 and above. // XFAIL: target={{.*sparc.*}} +#include "defines.h" #include -__attribute__((noinline)) +ATTRIBUTE_NOINLINE static void LargeFunction(int *x, int zero) { x[0]++; x[1]++; @@ -29,7 +30,7 @@ static void LargeFunction(int *x, int zero) { // Darwin. // CHECK-Linux: {{#0 0x.* in LargeFunction.*large_func_test.cpp:}}[[@LINE-3]] // CHECK-SunOS: {{#0 0x.* in LargeFunction.*large_func_test.cpp:}}[[@LINE-4]] - // CHECK-Windows:{{#0 0x.* in LargeFunction.*large_func_test.cpp:}}[[@LINE-5]] + // CHECK-Windows:{{#[0-1] 0x.* in LargeFunction.*large_func_test.cpp:}}[[@LINE-5]] // CHECK-FreeBSD:{{#0 0x.* in LargeFunction.*large_func_test.cpp:}}[[@LINE-6]] // CHECK-Darwin: {{#0 0x.* in .*LargeFunction.*large_func_test.cpp}}:[[@LINE-7]] @@ -48,7 +49,7 @@ static void LargeFunction(int *x, int zero) { int main(int argc, char **argv) { int *x = new int[100]; LargeFunction(x, argc - 1); - // CHECK: {{ #1 0x.* in main .*large_func_test.cpp:}}[[@LINE-1]] + // CHECK: {{ #[1-2] 0x.* in main .*large_func_test.cpp:}}[[@LINE-1]] // CHECK: {{0x.* is located 12 bytes after 400-byte region}} // CHECK: {{allocated by thread T0 here:}} // CHECK-Linux: {{ #0 0x.* in operator new}} diff --git a/compiler-rt/test/asan/TestCases/null_deref.cpp b/compiler-rt/test/asan/TestCases/null_deref.cpp index a8947a4378032..3ccb475326369 100644 --- a/compiler-rt/test/asan/TestCases/null_deref.cpp +++ b/compiler-rt/test/asan/TestCases/null_deref.cpp @@ -3,7 +3,9 @@ // RUN: %clangxx_asan -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s // RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s -__attribute__((noinline)) +#include "defines.h" + +ATTRIBUTE_NOINLINE // FIXME: Static symbols don't show up in PDBs. We can remove this once we start // using DWARF. #ifndef _MSC_VER diff --git a/compiler-rt/test/asan/TestCases/pass-struct-byval.cpp b/compiler-rt/test/asan/TestCases/pass-struct-byval.cpp index ba49eccf41cab..69409bc6ace6b 100644 --- a/compiler-rt/test/asan/TestCases/pass-struct-byval.cpp +++ b/compiler-rt/test/asan/TestCases/pass-struct-byval.cpp @@ -1,6 +1,6 @@ // RUN: %clangxx_asan -O0 %s -o %t // RUN: not %run %t 2>&1 | FileCheck %s - +// XFAIL: msvc struct A { int a[8]; }; diff --git a/compiler-rt/test/asan/TestCases/report_error_summary.cpp b/compiler-rt/test/asan/TestCases/report_error_summary.cpp index 9e024e35bed86..e10def7218634 100644 --- a/compiler-rt/test/asan/TestCases/report_error_summary.cpp +++ b/compiler-rt/test/asan/TestCases/report_error_summary.cpp @@ -2,8 +2,10 @@ #include +#if !defined(_MSC_VER) || defined(__clang__) // Required for ld64 macOS 12.0+ __attribute__((weak)) extern "C" void foo() {} +#endif extern "C" void __sanitizer_report_error_summary(const char *summary) { fprintf(stderr, "test_report_error_summary\n"); diff --git a/compiler-rt/test/asan/TestCases/speculative_load.cpp b/compiler-rt/test/asan/TestCases/speculative_load.cpp index fdf70eb39767a..27bd293d28a39 100644 --- a/compiler-rt/test/asan/TestCases/speculative_load.cpp +++ b/compiler-rt/test/asan/TestCases/speculative_load.cpp @@ -4,6 +4,9 @@ // RUN: %clangxx_asan -O2 %s -o %t && %run %t 2>&1 // RUN: %clangxx_asan -O3 %s -o %t && %run %t 2>&1 +// MSVC doesn't support GCC style inline assembly +// UNSUPPORTED: msvc + #include struct S { diff --git a/compiler-rt/test/asan/TestCases/stack-buffer-overflow-with-position.cpp b/compiler-rt/test/asan/TestCases/stack-buffer-overflow-with-position.cpp index 0077663d6a176..d33c6246fd4fb 100644 --- a/compiler-rt/test/asan/TestCases/stack-buffer-overflow-with-position.cpp +++ b/compiler-rt/test/asan/TestCases/stack-buffer-overflow-with-position.cpp @@ -13,6 +13,7 @@ // RUN: not %run %t 63 2>&1 | FileCheck --check-prefix=CHECK-63 %s // RUN: not %run %t 73 2>&1 | FileCheck --check-prefix=CHECK-73 %s // RUN: not %run %t 74 2>&1 | FileCheck --check-prefix=CHECK-74 %s +// XFAIL: msvc #include #include #include diff --git a/compiler-rt/test/asan/TestCases/stack-oob-frames.cpp b/compiler-rt/test/asan/TestCases/stack-oob-frames.cpp index 3b5d511b26818..1e077513c2168 100644 --- a/compiler-rt/test/asan/TestCases/stack-oob-frames.cpp +++ b/compiler-rt/test/asan/TestCases/stack-oob-frames.cpp @@ -4,6 +4,9 @@ // RUN: not %run %t 2 2>&1 | FileCheck %s --check-prefix=CHECK2 // RUN: not %run %t 3 2>&1 | FileCheck %s --check-prefix=CHECK3 +// MSVC doesn't support GCC style inline ASM +// UNSUPPORTED: msvc + #define NOINLINE __attribute__((noinline)) inline void break_optimization(void *arg) { __asm__ __volatile__("" : : "r" (arg) : "memory"); diff --git a/compiler-rt/test/asan/TestCases/strcat-overlap.cpp b/compiler-rt/test/asan/TestCases/strcat-overlap.cpp index 76fd3e1f11d14..af78bc4440549 100644 --- a/compiler-rt/test/asan/TestCases/strcat-overlap.cpp +++ b/compiler-rt/test/asan/TestCases/strcat-overlap.cpp @@ -34,11 +34,12 @@ // UNSUPPORTED: target={{.*windows-msvc.*}} // UNSUPPORTED: android +#include "defines.h" #include // Don't inline function otherwise stacktrace changes. -__attribute__((noinline)) void bad_function() { +ATTRIBUTE_NOINLINE void bad_function() { char buffer[] = "hello\0XXX"; // CHECK: strcat-param-overlap: memory ranges // CHECK: [{{0x.*,[ ]*0x.*}}) and [{{0x.*,[ ]*0x.*}}) overlap diff --git a/compiler-rt/test/asan/TestCases/strcpy-overlap.cpp b/compiler-rt/test/asan/TestCases/strcpy-overlap.cpp index efd2e6b7521ef..89ac7a39b33ca 100644 --- a/compiler-rt/test/asan/TestCases/strcpy-overlap.cpp +++ b/compiler-rt/test/asan/TestCases/strcpy-overlap.cpp @@ -26,13 +26,14 @@ // RUN: echo "interceptor_name:strcpy" > %t.supp // RUN: %env_asan_opts=suppressions='"%t.supp"' %run %t -// UNSUPPORTED: android +// UNSUPPORTED: android, MSVC +#include "defines.h" #include // Don't inline function otherwise stacktrace changes. -__attribute__((noinline)) void bad_function() { +ATTRIBUTE_NOINLINE void bad_function() { char buffer[] = "hello"; // CHECK: strcpy-param-overlap: memory ranges // CHECK: [{{0x.*,[ ]*0x.*}}) and [{{0x.*,[ ]*0x.*}}) overlap diff --git a/compiler-rt/test/asan/TestCases/strncat-overlap.cpp b/compiler-rt/test/asan/TestCases/strncat-overlap.cpp index 3e3f7ee2723f5..e4f2fbca68abf 100644 --- a/compiler-rt/test/asan/TestCases/strncat-overlap.cpp +++ b/compiler-rt/test/asan/TestCases/strncat-overlap.cpp @@ -28,11 +28,12 @@ // UNSUPPORTED: android +#include "defines.h" #include // Don't inline function otherwise stacktrace changes. -__attribute__((noinline)) void bad_function() { +ATTRIBUTE_NOINLINE void bad_function() { char buffer[] = "hello\0XXX"; // CHECK: strncat-param-overlap: memory ranges // CHECK: [{{0x.*,[ ]*0x.*}}) and [{{0x.*,[ ]*0x.*}}) overlap diff --git a/compiler-rt/test/asan/TestCases/strncpy-overflow.cpp b/compiler-rt/test/asan/TestCases/strncpy-overflow.cpp index ff84052a94987..f75f8c5eb3ff6 100644 --- a/compiler-rt/test/asan/TestCases/strncpy-overflow.cpp +++ b/compiler-rt/test/asan/TestCases/strncpy-overflow.cpp @@ -6,14 +6,15 @@ // REQUIRES: compiler-rt-optimized // REQUIRES: stable-runtime -#include +#include "defines.h" #include +#include // We need a way to prevent the optimize from eliminating the // strncpy below (which otherwises writes to dead storage). We // need the read to be out-of-line to prevent memory forwarding // from making the memory dead again. -int sink_memory(int N, char *p) __attribute__((noinline)); +int ATTRIBUTE_NOINLINE sink_memory(int N, char *p); int sink_memory(int N, char *p) { int sum = 0; for (int i = 0; i < N; i++) diff --git a/compiler-rt/test/asan/TestCases/strncpy-overlap.cpp b/compiler-rt/test/asan/TestCases/strncpy-overlap.cpp index 860fc5d304e0e..9334a333c052a 100644 --- a/compiler-rt/test/asan/TestCases/strncpy-overlap.cpp +++ b/compiler-rt/test/asan/TestCases/strncpy-overlap.cpp @@ -28,11 +28,12 @@ // UNSUPPORTED: android +#include "defines.h" #include // Don't inline function otherwise stacktrace changes. -__attribute__((noinline)) void bad_function() { +ATTRIBUTE_NOINLINE void bad_function() { char buffer[] = "hello"; // CHECK: strncpy-param-overlap: memory ranges // CHECK: [{{0x.*,[ ]*0x.*}}) and [{{0x.*,[ ]*0x.*}}) overlap diff --git a/compiler-rt/test/asan/TestCases/throw_call_test.cpp b/compiler-rt/test/asan/TestCases/throw_call_test.cpp index 20a7c0b766015..06e9422701406 100644 --- a/compiler-rt/test/asan/TestCases/throw_call_test.cpp +++ b/compiler-rt/test/asan/TestCases/throw_call_test.cpp @@ -2,6 +2,10 @@ // http://code.google.com/p/address-sanitizer/issues/detail?id=147 (not fixed). // BROKEN: %clangxx_asan %s -o %t -static-libstdc++ && %run %t +// MSVC doesn't support GCC style inline ASM +// UNSUPPORTED: msvc + +#include "defines.h" #include static volatile int zero = 0; inline void pretend_to_do_something(void *x) { @@ -15,7 +19,7 @@ void ReallyThrow() { throw 42; } -__attribute__((noinline)) +ATTRIBUTE_NOINLINE void Throw() { int a, b, c, d, e, f, g, h; pretend_to_do_something(&a); @@ -30,7 +34,7 @@ void Throw() { ReallyThrow(); } -__attribute__((noinline)) +ATTRIBUTE_NOINLINE void CheckStack() { int ar[100]; pretend_to_do_something(ar); diff --git a/compiler-rt/test/asan/TestCases/throw_catch.cpp b/compiler-rt/test/asan/TestCases/throw_catch.cpp index 2884e95f8a7e2..71e66e3fc4dd4 100644 --- a/compiler-rt/test/asan/TestCases/throw_catch.cpp +++ b/compiler-rt/test/asan/TestCases/throw_catch.cpp @@ -1,17 +1,18 @@ // RUN: %clangxx_asan -fsanitize-address-use-after-return=never -O %s -o %t && %run %t +#include "defines.h" #include -#include #include +#include -__attribute__((noinline)) +ATTRIBUTE_NOINLINE void Throw() { int local; fprintf(stderr, "Throw: %p\n", &local); throw 1; } -__attribute__((noinline)) +ATTRIBUTE_NOINLINE void ThrowAndCatch() { int local; try { @@ -21,7 +22,7 @@ void ThrowAndCatch() { } } -__attribute__((noinline)) +ATTRIBUTE_NOINLINE void TestThrow() { char x[32]; fprintf(stderr, "Before: %p poisoned: %d\n", &x, @@ -33,7 +34,7 @@ void TestThrow() { assert(!__asan_address_is_poisoned(x + 32)); } -__attribute__((noinline)) +ATTRIBUTE_NOINLINE void TestThrowInline() { char x[32]; fprintf(stderr, "Before: %p poisoned: %d\n", &x, diff --git a/compiler-rt/test/asan/TestCases/throw_invoke_test.cpp b/compiler-rt/test/asan/TestCases/throw_invoke_test.cpp index a9069e1ca8d1a..2faf3efe9e6ec 100644 --- a/compiler-rt/test/asan/TestCases/throw_invoke_test.cpp +++ b/compiler-rt/test/asan/TestCases/throw_invoke_test.cpp @@ -2,8 +2,9 @@ // RUN: %clangxx_asan %s -o %t -static-libstdc++ && %run %t // Investigate why it fails with NDK 21. -// UNSUPPORTED: android +// UNSUPPORTED: android, MSVC +#include "defines.h" #include static volatile int zero = 0; inline void pretend_to_do_something(void *x) { @@ -34,7 +35,7 @@ void Throw() { ReallyThrow(); } -__attribute__((noinline)) +ATTRIBUTE_NOINLINE void CheckStack() { int ar[100]; pretend_to_do_something(ar); diff --git a/compiler-rt/test/asan/TestCases/use-after-scope-capture.cpp b/compiler-rt/test/asan/TestCases/use-after-scope-capture.cpp index 0eca27181e54f..110d9e5222453 100644 --- a/compiler-rt/test/asan/TestCases/use-after-scope-capture.cpp +++ b/compiler-rt/test/asan/TestCases/use-after-scope-capture.cpp @@ -1,12 +1,13 @@ // RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s +#include "defines.h" #include int main() { std::function f; { int x = 0; - f = [&x]() __attribute__((noinline)) { + f = [&x]() ATTRIBUTE_NOINLINE { return x; // BOOM // CHECK: ERROR: AddressSanitizer: stack-use-after-scope // We cannot assert the line, after the argument promotion pass this crashes diff --git a/compiler-rt/test/asan/TestCases/use-after-scope-dtor-order.cpp b/compiler-rt/test/asan/TestCases/use-after-scope-dtor-order.cpp index 42f62c72397ec..c4a188d2c86ce 100644 --- a/compiler-rt/test/asan/TestCases/use-after-scope-dtor-order.cpp +++ b/compiler-rt/test/asan/TestCases/use-after-scope-dtor-order.cpp @@ -1,10 +1,11 @@ // RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s +#include "defines.h" #include struct IntHolder { explicit IntHolder(int *val = 0) : val_(val) { } - __attribute__((noinline)) ~IntHolder() { + ATTRIBUTE_NOINLINE ~IntHolder() { printf("Value: %d\n", *val_); // BOOM // CHECK: ERROR: AddressSanitizer: stack-use-after-scope // CHECK: #0 0x{{.*}} in IntHolder::~IntHolder{{.*}}.cpp:[[@LINE-2]] diff --git a/compiler-rt/test/asan/TestCases/use-after-scope-inlined.cpp b/compiler-rt/test/asan/TestCases/use-after-scope-inlined.cpp index 1014ff919b9ef..d0154ef744241 100644 --- a/compiler-rt/test/asan/TestCases/use-after-scope-inlined.cpp +++ b/compiler-rt/test/asan/TestCases/use-after-scope-inlined.cpp @@ -4,9 +4,13 @@ // // RUN: %clangxx_asan -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s +// MSVC marks this as xfail because it doesn't generate the metadata to display the "x.i" offset. +// XFAIL: msvc +#include "defines.h" + int *arr; -__attribute__((always_inline)) +ATTRIBUTE_ALWAYS_INLINE void inlined(int arg) { int x[5]; for (int i = 0; i < arg; i++) x[i] = i; diff --git a/compiler-rt/test/asan/TestCases/use-after-scope-loop-bug.cpp b/compiler-rt/test/asan/TestCases/use-after-scope-loop-bug.cpp index 286b6441a5698..b97fe6730ddc4 100644 --- a/compiler-rt/test/asan/TestCases/use-after-scope-loop-bug.cpp +++ b/compiler-rt/test/asan/TestCases/use-after-scope-loop-bug.cpp @@ -1,4 +1,4 @@ -// RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_asan %if MSVC %{ /Od %} %else %{ -O1 %} %s -o %t && not %run %t 2>&1 | FileCheck %s volatile int *p; diff --git a/compiler-rt/test/asan/TestCases/use-after-scope-loop-removed.cpp b/compiler-rt/test/asan/TestCases/use-after-scope-loop-removed.cpp index 8a8a7b60deb6b..8fedceb6cf330 100644 --- a/compiler-rt/test/asan/TestCases/use-after-scope-loop-removed.cpp +++ b/compiler-rt/test/asan/TestCases/use-after-scope-loop-removed.cpp @@ -1,4 +1,5 @@ -// RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_asan %if MSVC %{ /Od %} %else %{ -O1 %} \ +// RUN: %s -o %t && not %run %t 2>&1 | FileCheck %s #include diff --git a/compiler-rt/test/asan/TestCases/use-after-scope-loop.cpp b/compiler-rt/test/asan/TestCases/use-after-scope-loop.cpp index 3e199056930cb..7254a785995b7 100644 --- a/compiler-rt/test/asan/TestCases/use-after-scope-loop.cpp +++ b/compiler-rt/test/asan/TestCases/use-after-scope-loop.cpp @@ -1,4 +1,5 @@ -// RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_asan %if MSVC %{ /Od %} %else %{ -O1 %} \ +// RUN: %s -o %t && not %run %t 2>&1 | FileCheck %s int *p[3]; diff --git a/compiler-rt/test/asan/TestCases/use-after-scope-temp.cpp b/compiler-rt/test/asan/TestCases/use-after-scope-temp.cpp index 29680f37bfa53..ab14e14e485d9 100644 --- a/compiler-rt/test/asan/TestCases/use-after-scope-temp.cpp +++ b/compiler-rt/test/asan/TestCases/use-after-scope-temp.cpp @@ -1,14 +1,14 @@ -// RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_asan %if MSVC %{ /Od %} %else %{ -O1 %} \ +// RUN: %s -o %t && not %run %t 2>&1 | FileCheck %s +#include "defines.h" struct IntHolder { int val; }; const IntHolder *saved; -__attribute__((noinline)) void save(const IntHolder &holder) { - saved = &holder; -} +ATTRIBUTE_NOINLINE void save(const IntHolder &holder) { saved = &holder; } int main(int argc, char *argv[]) { save({argc}); diff --git a/compiler-rt/test/asan/TestCases/use-after-scope-temp2.cpp b/compiler-rt/test/asan/TestCases/use-after-scope-temp2.cpp index b98d6f12911a7..ff65f592ee208 100644 --- a/compiler-rt/test/asan/TestCases/use-after-scope-temp2.cpp +++ b/compiler-rt/test/asan/TestCases/use-after-scope-temp2.cpp @@ -1,9 +1,10 @@ -// RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_asan %if MSVC %{ /Od %} %else %{ -O1 %} \ +// RUN: %s -o %t && not %run %t 2>&1 | FileCheck %s + +#include "defines.h" struct IntHolder { - __attribute__((noinline)) const IntHolder &Self() const { - return *this; - } + ATTRIBUTE_NOINLINE const IntHolder &Self() const { return *this; } int val = 3; }; diff --git a/compiler-rt/test/asan/TestCases/use-after-scope-types.cpp b/compiler-rt/test/asan/TestCases/use-after-scope-types.cpp index 5751a0a09bb4e..3e740edfae250 100644 --- a/compiler-rt/test/asan/TestCases/use-after-scope-types.cpp +++ b/compiler-rt/test/asan/TestCases/use-after-scope-types.cpp @@ -11,6 +11,7 @@ // RUN: not %run %t 9 2>&1 | FileCheck %s // RUN: not %run %t 10 2>&1 | FileCheck %s +#include "defines.h" #include #include #include @@ -32,7 +33,7 @@ template struct Ptr { T *t; }; -template __attribute__((noinline)) void test() { +template ATTRIBUTE_NOINLINE void test() { Ptr ptr; { T x; diff --git a/compiler-rt/test/asan/TestCases/vla_chrome_testcase.cpp b/compiler-rt/test/asan/TestCases/vla_chrome_testcase.cpp index 613d4bb2763fa..743e2ae71425b 100644 --- a/compiler-rt/test/asan/TestCases/vla_chrome_testcase.cpp +++ b/compiler-rt/test/asan/TestCases/vla_chrome_testcase.cpp @@ -1,20 +1,22 @@ // RUN: %clangxx_asan -O0 -mllvm -asan-instrument-dynamic-allocas %s -o %t // RUN: not %run %t 2>&1 | FileCheck %s // +// MSVC doesn't support VLAs +// UNSUPPORTED: msvc // This is reduced testcase based on Chromium code. // See http://reviews.llvm.org/D6055?vs=on&id=15616&whitespace=ignore-all#toc. -#include +#include "defines.h" #include +#include int a = 7; int b; int c; int *p; -__attribute__((noinline)) void fn3(int *first, int second) { -} +ATTRIBUTE_NOINLINE void fn3(int *first, int second) {} int main() { int d = b && c; diff --git a/compiler-rt/test/asan/TestCases/vla_condition_overflow.cpp b/compiler-rt/test/asan/TestCases/vla_condition_overflow.cpp index 00df5d2919c46..5269a35e9796a 100644 --- a/compiler-rt/test/asan/TestCases/vla_condition_overflow.cpp +++ b/compiler-rt/test/asan/TestCases/vla_condition_overflow.cpp @@ -2,11 +2,14 @@ // RUN: not %run %t 2>&1 | FileCheck %s // // REQUIRES: stable-runtime +// MSVC doesn't support VLAs +// UNSUPPORTED: msvc +#include "defines.h" #include #include -__attribute__((noinline)) void foo(int index, int len) { +ATTRIBUTE_NOINLINE void foo(int index, int len) { if (index > len) { char str[len]; assert(!(reinterpret_cast(str) & 31L)); diff --git a/compiler-rt/test/asan/TestCases/vla_loop_overfow.cpp b/compiler-rt/test/asan/TestCases/vla_loop_overfow.cpp index 370e0dc72c12f..d4cf9513d0fa6 100644 --- a/compiler-rt/test/asan/TestCases/vla_loop_overfow.cpp +++ b/compiler-rt/test/asan/TestCases/vla_loop_overfow.cpp @@ -3,6 +3,9 @@ // // REQUIRES: stable-runtime +// MSVC doesn't support VLAs +// UNSUPPORTED: msvc + #include #include diff --git a/compiler-rt/test/asan/TestCases/zero_page_pc.cpp b/compiler-rt/test/asan/TestCases/zero_page_pc.cpp index a7d00ce9b6988..3af4d04a587c2 100644 --- a/compiler-rt/test/asan/TestCases/zero_page_pc.cpp +++ b/compiler-rt/test/asan/TestCases/zero_page_pc.cpp @@ -1,6 +1,10 @@ // Check that ASan correctly detects SEGV on the zero page. // RUN: %clangxx_asan %s -o %t && not %run %t 2>&1 | FileCheck %s +#if defined(_MSC_VER) && !defined(__CLANG__) +# define __has_feature(x) 0 +#endif + #if __has_feature(ptrauth_calls) # include #endif diff --git a/compiler-rt/test/asan/lit.cfg.py b/compiler-rt/test/asan/lit.cfg.py index c57f5ca0fa652..2da511103da7c 100644 --- a/compiler-rt/test/asan/lit.cfg.py +++ b/compiler-rt/test/asan/lit.cfg.py @@ -183,6 +183,7 @@ def build_invocation(compile_flags, with_lto=False): config.substitutions.append(("%MD", "-MD")) config.substitutions.append(("%MT", "-MT")) config.substitutions.append(("%Gw", "-Gw")) + config.substitutions.append(("%Oy-", "-Oy-")) base_lib = os.path.join( config.compiler_rt_libdir, "clang_rt.asan%%s%s.lib" % config.target_suffix @@ -220,6 +221,7 @@ def build_invocation(compile_flags, with_lto=False): config.substitutions.append(("%MD", "")) config.substitutions.append(("%MT", "")) config.substitutions.append(("%Gw", "-fdata-sections")) + config.substitutions.append(("%Oy-", "-fno-omit-frame-pointer")) # FIXME: De-hardcode this path. asan_source_dir = os.path.join(