diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_hash.h b/compiler-rt/lib/sanitizer_common/sanitizer_hash.h --- a/compiler-rt/lib/sanitizer_common/sanitizer_hash.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_hash.h @@ -12,6 +12,8 @@ #ifndef SANITIZER_HASH_H #define SANITIZER_HASH_H +#pragma clang __debug crash + #include "sanitizer_internal_defs.h" namespace __sanitizer { @@ -37,7 +39,7 @@ x ^= x >> 15; return x; } -}; +} class MurMur2Hash64Builder { static const u64 m = 0xc6a4a7935bd1e995ull; diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -862,6 +862,8 @@ " no longer supported.") endif() +set(LLVM_CRASH_REPORT_DIR "" CACHE STRING "Define directory name for crash reports" ) + include(HandleLLVMOptions) ###### @@ -1201,6 +1203,8 @@ endif() if( LLVM_INCLUDE_RUNTIMES ) + message("LLVM_ENABLE_CRASH_REPORT_DIR = ${LLVM_ENABLE_CRASH_REPORT_DIR}") + message("LLVM_CRASH_REPORT_DIR = ${LLVM_CRASH_REPORT_DIR}") add_subdirectory(runtimes) endif() diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake --- a/llvm/cmake/modules/HandleLLVMOptions.cmake +++ b/llvm/cmake/modules/HandleLLVMOptions.cmake @@ -85,6 +85,10 @@ endif() endif() +if(DEFINED LLVM_CRASH_REPORT_DIR AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") + append("-fcrash-diagnostics-dir=${LLVM_CRASH_REPORT_DIR}" CMAKE_CXX_FLAGS CMAKE_C_FLAGS) +endif() + if(LLVM_ENABLE_EXPENSIVE_CHECKS) add_definitions(-DEXPENSIVE_CHECKS) diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -83,6 +83,7 @@ PASSTHROUGH_PREFIXES COMPILER_RT DARWIN SANITIZER + LLVM_CRASH_REPORT_DIR USE_TOOLCHAIN TARGET_TRIPLE ${LLVM_TARGET_TRIPLE} ${EXTRA_ARGS}) @@ -242,6 +243,7 @@ ${RUNTIMES_CMAKE_ARGS} PASSTHROUGH_PREFIXES LLVM_ENABLE_RUNTIMES LLVM_USE_LINKER + LLVM_CRASH_REPORT_DIR ${ARG_PREFIXES} EXTRA_TARGETS ${extra_targets} ${test_targets} diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -13,6 +13,9 @@ "${CMAKE_CURRENT_SOURCE_DIR}/../llvm/cmake/modules" ) + message("LLVM_ENABLE_CRASH_REPORT_DIR = ${LLVM_ENABLE_CRASH_REPORT_DIR}") + message("LLVM_CRASH_REPORT_DIR = ${LLVM_CRASH_REPORT_DIR}") + # We order libraries to mirror roughly how they are layered, except that compiler-rt can depend # on libc++, so we put it after. set(LLVM_DEFAULT_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp")