diff options
Diffstat (limited to 'test/ubsan/lit.common.cfg')
-rw-r--r-- | test/ubsan/lit.common.cfg | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/test/ubsan/lit.common.cfg b/test/ubsan/lit.common.cfg new file mode 100644 index 0000000000000..d28733a61cf8f --- /dev/null +++ b/test/ubsan/lit.common.cfg @@ -0,0 +1,56 @@ +# -*- Python -*- + +import os + +def get_required_attr(config, attr_name): + attr_value = getattr(config, attr_name, None) + if attr_value == None: + lit_config.fatal( + "No attribute %r in test configuration! You may need to run " + "tests from your build directory or add this attribute " + "to lit.site.cfg " % attr_name) + return attr_value + +# Setup source root. +config.test_source_root = os.path.dirname(__file__) + +# Choose between standalone and UBSan+ASan modes. +ubsan_lit_test_mode = get_required_attr(config, 'ubsan_lit_test_mode') +if ubsan_lit_test_mode == "Standalone": + config.name = 'UndefinedBehaviorSanitizer-Standalone' + config.available_features.add("ubsan-standalone") + clang_ubsan_cflags = [] +elif ubsan_lit_test_mode == "AddressSanitizer": + if config.host_os == 'Darwin': + # ubsan-asan doesn't yet work on Darwin, + # see http://llvm.org/bugs/show_bug.cgi?id=21112. + config.unsupported = True + config.name = 'UndefinedBehaviorSanitizer-AddressSanitizer' + config.available_features.add("ubsan-asan") + clang_ubsan_cflags = ["-fsanitize=address"] + config.environment['ASAN_OPTIONS'] = 'detect_leaks=0' +else: + lit_config.fatal("Unknown UBSan test mode: %r" % ubsan_lit_test_mode) + +def build_invocation(compile_flags): + return " " + " ".join([config.clang] + compile_flags) + " " + +target_cflags = [get_required_attr(config, "target_cflags")] +clang_ubsan_cflags += target_cflags +clang_ubsan_cxxflags = config.cxx_mode_flags + clang_ubsan_cflags + +# Define %clang and %clangxx substitutions to use in test RUN lines. +config.substitutions.append( ("%clang ", build_invocation(clang_ubsan_cflags)) ) +config.substitutions.append( ("%clangxx ", build_invocation(clang_ubsan_cxxflags)) ) + +# Default test suffixes. +config.suffixes = ['.c', '.cc', '.cpp'] + +# Check that the host supports UndefinedBehaviorSanitizer tests +if config.host_os not in ['Linux', 'Darwin', 'FreeBSD']: + config.unsupported = True + +# Allow tests to use REQUIRES=stable-runtime. For use when you cannot use XFAIL +# because the test hangs or fails on one configuration and not the other. +if config.target_arch.startswith('arm') == False: + config.available_features.add('stable-runtime') |