UBSan: enable CMake build on Darwin. Fix two failing tests and disable the test which...
authorAlexey Samsonov <samsonov@google.com>
Fri, 16 Nov 2012 12:57:07 +0000 (12:57 +0000)
committerAlexey Samsonov <samsonov@google.com>
Fri, 16 Nov 2012 12:57:07 +0000 (12:57 +0000)
llvm-svn: 168169

compiler-rt/lib/CMakeLists.txt
compiler-rt/lib/ubsan/CMakeLists.txt
compiler-rt/lib/ubsan/lit_tests/Integer/add-overflow.cpp
compiler-rt/lib/ubsan/lit_tests/Integer/sub-overflow.cpp
compiler-rt/lib/ubsan/lit_tests/TypeCheck/vptr.cpp
compiler-rt/lib/ubsan/lit_tests/lit.cfg

index 6febaf5..b7cd07e 100644 (file)
@@ -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.
index 3458875..b16983d 100644 (file)
@@ -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}
-    $<TARGET_OBJECTS:RTSanitizerCommon.x86_64>
+    $<TARGET_OBJECTS:RTSanitizerCommon.osx>
     )
-  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}
+      $<TARGET_OBJECTS:RTSanitizerCommon.x86_64>
+      )
+    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}
+      $<TARGET_OBJECTS:RTSanitizerCommon.i386>
+      )
+    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}
-    $<TARGET_OBJECTS:RTSanitizerCommon.i386>
-    )
-  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})
index 1b0a6d9..020ae76 100644 (file)
@@ -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
index 38fc7b0..ee43154 100644 (file)
@@ -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
index e9fffd5..ee61e2c 100644 (file)
@@ -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() {}
index 50a8cbd..9fd3a1a 100644 (file)
@@ -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