Skip to content

Commit

Permalink
Try to fix more Windows portability issues in sanitizer tests
Browse files Browse the repository at this point in the history
Add a %stdcxx11 lit substitution for -std=c++11. Windows defaults to
-std=c++14 when VS 2015 is used because the STL requires it. Harcoding
-std=c++11 in the ASan tests actually downgrades the C++ standard level,
leading to test failures.

Relax a FileCheck pattern in use-after-scope-types.cc.

Disable the sanitizer_common OOM tests. They fail on bots with low swap,
and cause other concurrently running tests to OOM.

llvm-svn: 276454
  • Loading branch information
rnk committed Jul 22, 2016
1 parent f432c9c commit ff3ea5f
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,9 @@ void FailInAssertionOnOOM() {
a.TestOnlyUnmap();
}

#if SANITIZER_CAN_USE_ALLOCATOR64
// Don't test OOM conditions on Win64 because it causes other tests on the same
// machine to OOM.
#if SANITIZER_CAN_USE_ALLOCATOR64 && !SANITIZER_WINDOWS64
TEST(SanitizerCommon, SizeClassAllocator64Overflow) {
EXPECT_DEATH(FailInAssertionOnOOM<Allocator64>(), "Out of memory");
}
Expand Down Expand Up @@ -777,7 +779,9 @@ TEST(SanitizerCommon, LargeMmapAllocatorBlockBegin) {
}


#if SANITIZER_CAN_USE_ALLOCATOR64
// Don't test OOM conditions on Win64 because it causes other tests on the same
// machine to OOM.
#if SANITIZER_CAN_USE_ALLOCATOR64 && !SANITIZER_WINDOWS64
// Regression test for out-of-memory condition in PopulateFreeList().
TEST(SanitizerCommon, SizeClassAllocator64PopulateFreeListOOM) {
// In a world where regions are small and chunks are huge...
Expand Down
2 changes: 1 addition & 1 deletion compiler-rt/test/asan/TestCases/use-after-scope-capture.cc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// RUN: %clangxx_asan -std=c++11 -O1 -fsanitize-address-use-after-scope %s -o %t && \
// RUN: %clangxx_asan %stdcxx11 -O1 -fsanitize-address-use-after-scope %s -o %t && \
// RUN: not %run %t 2>&1 | FileCheck %s

#include <functional>
Expand Down
4 changes: 2 additions & 2 deletions compiler-rt/test/asan/TestCases/use-after-scope-types.cc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// RUN: %clangxx_asan -std=c++11 -O0 -fsanitize-address-use-after-scope %s -o %t
// RUN: %clangxx_asan %stdcxx11 -O0 -fsanitize-address-use-after-scope %s -o %t
// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 0 2>&1 | FileCheck %s
// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 1 2>&1 | FileCheck %s
// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 2 2>&1 | FileCheck %s
Expand Down Expand Up @@ -43,7 +43,7 @@ template <class T> void test() {

ptr.Access();
// CHECK: ERROR: AddressSanitizer: stack-use-after-scope
// CHECK: #{{[0-9]+}} 0x{{.*}} in void test{{.*}}(){{.*}}use-after-scope-types.cc
// CHECK: #{{[0-9]+}} 0x{{.*}} in {{(void )?test.*\((void)?\) .*}}use-after-scope-types.cc
// CHECK: Address 0x{{.*}} is located in stack of thread T{{.*}} at offset [[OFFSET:[^ ]+]] in frame
// {{\[}}[[OFFSET]], {{[0-9]+}}) 'x'
}
Expand Down
8 changes: 8 additions & 0 deletions compiler-rt/test/asan/lit.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,14 @@ if platform.system() == 'Windows':
config.substitutions.append( ("%asan_cxx_lib", base_lib % "_cxx") )
config.substitutions.append( ("%asan_dll_thunk", base_lib % "_dll_thunk") )

if platform.system() == 'Windows':
# Don't use -std=c++11 on Windows, as the driver will detect the appropriate
# default needed to use with the STL.
config.substitutions.append(("%stdcxx11 ", ""))
else:
# Some tests uses C++11 features such as lambdas and need to pass -std=c++11.
config.substitutions.append(("%stdcxx11 ", "-std=c++11 "))

# FIXME: De-hardcode this path.
asan_source_dir = os.path.join(
get_required_attr(config, "compiler_rt_src_root"), "lib", "asan")
Expand Down

0 comments on commit ff3ea5f

Please sign in to comment.