Index: clang-tools-extra/test/clang-tidy/checkers/performance/trivially-destructible.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/performance/trivially-destructible.cpp +++ clang-tools-extra/test/clang-tidy/checkers/performance/trivially-destructible.cpp @@ -1,7 +1,14 @@ // RUN: %check_clang_tidy %s performance-trivially-destructible %t // RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp -// RUN: clang-tidy %t.cpp -checks='-*,performance-trivially-destructible' -fix -// RUN: clang-tidy %t.cpp -checks='-*,performance-trivially-destructible' -warnings-as-errors='-*,performance-trivially-destructible' +// RUN: clang-tidy -p %S %t.cpp -checks='-*,performance-trivially-destructible' -fix +// RUN: clang-tidy -p %S %t.cpp -checks='-*,performance-trivially-destructible' -warnings-as-errors='-*,performance-trivially-destructible' + +// The "-p %S" in the clang-tidy command lines above is used for overriding +// the detection of the `compile_commands.json` file. As %t.cpp is in the +// build directory, by default the `compile_commands.json` file created by +// cmake for LLVM itself will be used. But the file may contains options +// not recognized by Clang if the LLVM project is built with another +// compiler. struct TriviallyDestructible1 { int a; Index: llvm/cmake/modules/HandleLLVMOptions.cmake =================================================================== --- llvm/cmake/modules/HandleLLVMOptions.cmake +++ llvm/cmake/modules/HandleLLVMOptions.cmake @@ -594,6 +594,16 @@ 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})