[cmake] Disable GCC lifetime DSE
LLVM data structures like llvm::User and llvm::MDNode rely on the value of object storage persisting beyond the lifetime of the object (#24952). This is not standard compliant and causes a runtime crash if LLVM is built with GCC and LTO enabled (#57740). Until these issues are fixed, we need to disable dead store eliminations eliminations based on object lifetime. Bug: https://github.com/llvm/llvm-project/issues/24952 Bug: https://github.com/llvm/llvm-project/issues/57740 Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106943 Reviewed By: MaskRay, thesamesam, nikic Differential Revision: https://reviews.llvm.org/D150505
This commit is contained in:
@@ -594,6 +594,16 @@ if ( LLVM_COMPILER_IS_GCC_COMPATIBLE OR CMAKE_CXX_COMPILER_ID MATCHES "XL" )
|
||||
add_flag_if_supported("-Werror=unguarded-availability-new" WERROR_UNGUARDED_AVAILABILITY_NEW)
|
||||
endif( LLVM_COMPILER_IS_GCC_COMPATIBLE OR CMAKE_CXX_COMPILER_ID MATCHES "XL" )
|
||||
|
||||
if ( LLVM_COMPILER_IS_GCC_COMPATIBLE )
|
||||
# LLVM data structures like llvm::User and llvm::MDNode rely on
|
||||
# the value of object storage persisting beyond the lifetime of the
|
||||
# object (#24952). This is not standard compliant and causes a runtime
|
||||
# crash if LLVM is built with GCC and LTO enabled (#57740). Until
|
||||
# these bugs are fixed, we need to disable dead store eliminations
|
||||
# based on object lifetime.
|
||||
add_flag_if_supported("-fno-lifetime-dse" CMAKE_CXX_FLAGS)
|
||||
endif ( LLVM_COMPILER_IS_GCC_COMPATIBLE )
|
||||
|
||||
# Modules enablement for GCC-compatible compilers:
|
||||
if ( LLVM_COMPILER_IS_GCC_COMPATIBLE AND LLVM_ENABLE_MODULES )
|
||||
set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
|
||||
|
||||
Reference in New Issue
Block a user