From: Alexey Samsonov Date: Fri, 16 Nov 2012 12:57:07 +0000 (+0000) Subject: UBSan: enable CMake build on Darwin. Fix two failing tests and disable the test which... X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=be9a293ddaa763b33340f3adb53da80cdb950d58;p=platform%2Fupstream%2Fllvm.git UBSan: enable CMake build on Darwin. Fix two failing tests and disable the test which produces linker errors on Darwin. llvm-svn: 168169 --- diff --git a/compiler-rt/lib/CMakeLists.txt b/compiler-rt/lib/CMakeLists.txt index 6febaf5..b7cd07e 100644 --- a/compiler-rt/lib/CMakeLists.txt +++ b/compiler-rt/lib/CMakeLists.txt @@ -6,12 +6,11 @@ if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux") add_subdirectory(asan) add_subdirectory(interception) add_subdirectory(sanitizer_common) + add_subdirectory(ubsan) endif() if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") # ThreadSanitizer is supported on Linux only. add_subdirectory(tsan) - # UndefinedBehaviorSanitizer has been tested on Linux only. - add_subdirectory(ubsan) endif() # FIXME: Add support for the profile library. diff --git a/compiler-rt/lib/ubsan/CMakeLists.txt b/compiler-rt/lib/ubsan/CMakeLists.txt index 3458875..b16983d 100644 --- a/compiler-rt/lib/ubsan/CMakeLists.txt +++ b/compiler-rt/lib/ubsan/CMakeLists.txt @@ -14,27 +14,41 @@ set(UBSAN_CFLAGS ${SANITIZER_COMMON_CFLAGS}) set(UBSAN_RUNTIME_LIBRARIES) -if(CAN_TARGET_X86_64) - add_library(clang_rt.ubsan-x86_64 STATIC +if(APPLE) + # Build universal binary on APPLE. + add_library(clang_rt.ubsan_osx STATIC ${UBSAN_SOURCES} - $ + $ ) - set_target_compile_flags(clang_rt.ubsan-x86_64 - ${UBSAN_CFLAGS} ${TARGET_X86_64_CFLAGS} - ) - list(APPEND UBSAN_RUNTIME_LIBRARIES clang_rt.ubsan-x86_64) + set_target_compile_flags(clang_rt.ubsan_osx ${UBSAN_CFLAGS}) + filter_available_targets(UBSAN_TARGETS x86_64 i386) + set_target_properties(clang_rt.ubsan_osx PROPERTIES + OSX_ARCHITECTURES "${UBSAN_TARGETS}") + list(APPEND UBSAN_RUNTIME_LIBRARIES clang_rt.ubsan_osx) +else() + # Build separate libraries for each target. + if(CAN_TARGET_X86_64) + add_library(clang_rt.ubsan-x86_64 STATIC + ${UBSAN_SOURCES} + $ + ) + set_target_compile_flags(clang_rt.ubsan-x86_64 + ${UBSAN_CFLAGS} ${TARGET_X86_64_CFLAGS} + ) + list(APPEND UBSAN_RUNTIME_LIBRARIES clang_rt.ubsan-x86_64) + endif() + if(CAN_TARGET_I386) + add_library(clang_rt.ubsan-i386 STATIC + ${UBSAN_SOURCES} + $ + ) + set_target_compile_flags(clang_rt.ubsan-i386 + ${UBSAN_CFLAGS} ${TARGET_I386_CFLAGS} + ) + list(APPEND UBSAN_RUNTIME_LIBRARIES clang_rt.ubsan-i386) + endif() endif() -if(CAN_TARGET_I386) - add_library(clang_rt.ubsan-i386 STATIC - ${UBSAN_SOURCES} - $ - ) - set_target_compile_flags(clang_rt.ubsan-i386 - ${UBSAN_CFLAGS} ${TARGET_I386_CFLAGS} - ) - list(APPEND UBSAN_RUNTIME_LIBRARIES clang_rt.ubsan-i386) -endif() set_property(TARGET ${UBSAN_RUNTIME_LIBRARIES} APPEND PROPERTY COMPILE_DEFINITIONS ${UBSAN_COMMON_DEFINITIONS}) diff --git a/compiler-rt/lib/ubsan/lit_tests/Integer/add-overflow.cpp b/compiler-rt/lib/ubsan/lit_tests/Integer/add-overflow.cpp index 1b0a6d9..020ae76 100644 --- a/compiler-rt/lib/ubsan/lit_tests/Integer/add-overflow.cpp +++ b/compiler-rt/lib/ubsan/lit_tests/Integer/add-overflow.cpp @@ -17,7 +17,7 @@ int main() { #ifdef ADD_I64 (void)(int64_t(8000000000000000000ll) + int64_t(2000000000000000000ll)); - // CHECK-ADD_I64: 8000000000000000000 + 2000000000000000000 cannot be represented in type 'long' + // CHECK-ADD_I64: 8000000000000000000 + 2000000000000000000 cannot be represented in type '{{long( long)?}}' #endif #ifdef ADD_I128 diff --git a/compiler-rt/lib/ubsan/lit_tests/Integer/sub-overflow.cpp b/compiler-rt/lib/ubsan/lit_tests/Integer/sub-overflow.cpp index 38fc7b0..ee43154 100644 --- a/compiler-rt/lib/ubsan/lit_tests/Integer/sub-overflow.cpp +++ b/compiler-rt/lib/ubsan/lit_tests/Integer/sub-overflow.cpp @@ -16,7 +16,7 @@ int main() { #ifdef SUB_I64 (void)(int64_t(-8000000000000000000ll) - int64_t(2000000000000000000ll)); - // CHECK-SUB_I64: -8000000000000000000 - 2000000000000000000 cannot be represented in type 'long' + // CHECK-SUB_I64: -8000000000000000000 - 2000000000000000000 cannot be represented in type '{{long( long)?}}' #endif #ifdef SUB_I128 diff --git a/compiler-rt/lib/ubsan/lit_tests/TypeCheck/vptr.cpp b/compiler-rt/lib/ubsan/lit_tests/TypeCheck/vptr.cpp index e9fffd5..ee61e2c 100644 --- a/compiler-rt/lib/ubsan/lit_tests/TypeCheck/vptr.cpp +++ b/compiler-rt/lib/ubsan/lit_tests/TypeCheck/vptr.cpp @@ -8,6 +8,9 @@ // RUN: %t mV 2>&1 | FileCheck %s --check-prefix=CHECK-MEMBER // RUN: %t fV 2>&1 | FileCheck %s --check-prefix=CHECK-MEMFUN +// FIXME: This test produces linker errors on Darwin. +// XFAIL: darwin + struct S { S() : a(0) {} ~S() {} diff --git a/compiler-rt/lib/ubsan/lit_tests/lit.cfg b/compiler-rt/lib/ubsan/lit_tests/lit.cfg index 50a8cbd..9fd3a1a 100644 --- a/compiler-rt/lib/ubsan/lit_tests/lit.cfg +++ b/compiler-rt/lib/ubsan/lit_tests/lit.cfg @@ -59,6 +59,7 @@ lit.load_config(config, compiler_rt_lit_cfg) # Default test suffixes. config.suffixes = ['.c', '.cc', '.cpp'] -# UndefinedBehaviorSanitizer tests are currently supported on Linux only. -if config.host_os not in ['Linux']: +# UndefinedBehaviorSanitizer tests are currently supported on +# Linux and Darwin only. +if config.host_os not in ['Linux', 'Darwin']: config.unsupported = True