[libcxxabi] Add support for running libc++abi tests with sanitizers
Summary: Add support for LLVM_USE_SANITIZER to the libc++abi tests. Currently, if libc++abi is configured with LLVM_USE_SANITIZER then none of the tests will pass.
Reviewers: jroelofs, mclow.lists, danalbert
Reviewed By: danalbert
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D5926
git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@220464 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/lit.cfg b/test/lit.cfg
index 72d038d..87226e9 100644
--- a/test/lit.cfg
+++ b/test/lit.cfg
@@ -222,6 +222,31 @@
library_paths = ['-L' + libcxxabi_obj_root + '/lib']
compile_flags = ['-std=c++11']
+
+san = lit_config.params.get('llvm_use_sanitizer', None)
+if san is None:
+ san = getattr(config, 'llvm_use_sanitizer', None)
+if san:
+ if not sys.platform.startswith('freebsd'):
+ link_flags += ['-ldl']
+ if san == 'Address':
+ compile_flags += ['-fsanitize=address']
+ config.available_features.add('asan')
+ elif san == 'Memory' or san == 'MemoryWithOrigins':
+ compile_flags += ['-fsanitize=memory']
+ config.available_features.add('msan')
+ if san == 'MemoryWithOrigins':
+ compile_flags += ['-fsanitize-memory-track-origins']
+ elif san == 'Undefined':
+ compile_flags += ['-fsanitize=undefined',
+ '-fno-sanitize=vptr,function',
+ '-fno-sanitize-recover']
+ config.available_features.add('ubsan')
+ else:
+ lit_config.fatal('unsupported value for '
+ 'llvm_use_sanitizer: {0}'.format(san))
+
+
# Configure extra linker parameters.
exec_env = {}
if sys.platform == 'darwin':
diff --git a/test/lit.site.cfg.in b/test/lit.site.cfg.in
index 94c61a0..bb62387 100644
--- a/test/lit.site.cfg.in
+++ b/test/lit.site.cfg.in
@@ -6,6 +6,7 @@
config.enable_shared = @LIBCXXABI_ENABLE_SHARED@
config.libcxx_includes = "@LIBCXXABI_LIBCXX_INCLUDES@"
config.llvm_unwinder = @LIBCXXABI_USE_LLVM_UNWINDER@
+config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
# Let the main config do the real work.
lit_config.load_config(config, "@LIBCXXABI_SOURCE_DIR@/test/lit.cfg")