Index: clang/CMakeLists.txt =================================================================== --- clang/CMakeLists.txt +++ clang/CMakeLists.txt @@ -200,6 +200,24 @@ set(CLANG_ENABLE_OPAQUE_POINTERS_INTERNAL OFF) endif() +set(CLANG_CRASH_DIAG_OFF 0) +set(CLANG_CRASH_DIAG_COMPILER 1) +set(CLANG_CRASH_DIAG_ALL 2) +set(CLANG_CRASH_DIAG_DEFAULT ${CLANG_CRASH_DIAG_COMPILER}) + +set(CLANG_DEFAULT_CRASH_DIAG_LEVEL CLANG_CRASH_DIAG_COMPILER CACHE STRING + "Specifies for which tools clang should perform crash reproduction. \ + Use the CLANG_CRASH_DIAG_* variables. They mean, no diagnostics, \ + only when the compiler crashes, and crashes from all possible tools \ + respectively." + ) + +if(${${CLANG_DEFAULT_CRASH_DIAG_LEVEL}} STREQUAL ${CLANG_CRASH_DIAG_DEFAULT}) + set(CLANG_CRASH_DIAG_IS_DEFAULT 1) +else() + set(CLANG_CRASH_DIAG_IS_DEFAULT 0) +endif() + # TODO: verify the values against LangStandards.def? set(CLANG_DEFAULT_STD_C "" CACHE STRING "Default standard to use for C/ObjC code (IDENT from LangStandards.def, empty for platform default)") Index: clang/include/clang/Config/config.h.cmake =================================================================== --- clang/include/clang/Config/config.h.cmake +++ clang/include/clang/Config/config.h.cmake @@ -104,4 +104,6 @@ /* Whether to enable opaque pointers by default */ #cmakedefine01 CLANG_ENABLE_OPAQUE_POINTERS_INTERNAL +#cmakedefine CLANG_DEFAULT_CRASH_DIAG_LEVEL ${${CLANG_DEFAULT_CRASH_DIAG_LEVEL}} + #endif Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -1528,13 +1528,13 @@ if (C.getArgs().hasArg(options::OPT_fno_crash_diagnostics)) return; - unsigned Level = 1; + unsigned Level = CLANG_DEFAULT_CRASH_DIAG_LEVEL; if (Arg *A = C.getArgs().getLastArg(options::OPT_fcrash_diagnostics_EQ)) { Level = llvm::StringSwitch(A->getValue()) .Case("off", 0) .Case("compiler", 1) .Case("all", 2) - .Default(1); + .Default(CLANG_DEFAULT_CRASH_DIAG_LEVEL); } if (!Level) return; Index: clang/test/Driver/lit.local.cfg =================================================================== --- clang/test/Driver/lit.local.cfg +++ clang/test/Driver/lit.local.cfg @@ -21,3 +21,6 @@ if llvm_config.use_lld(required=False): config.available_features.add('lld') + +if config.is_clang_crash_diag_default: + config.available_features.add("clang_crash_diag_default") Index: clang/test/Driver/lld-repro.c =================================================================== --- clang/test/Driver/lld-repro.c +++ clang/test/Driver/lld-repro.c @@ -16,8 +16,11 @@ // RUN: not %clang %s -nostartfiles -nostdlib -fuse-ld=lld -gen-reproducer=error -fcrash-diagnostics-dir=%t -fcrash-diagnostics=compiler 2>&1 \ // RUN: | FileCheck %s --check-prefix=NO-LINKER + +// RUN: %if clang_crash_diag_default %{ \ // RUN: not %clang %s -nostartfiles -nostdlib -fuse-ld=lld -gen-reproducer=error -fcrash-diagnostics-dir=%t 2>&1 \ -// RUN: | FileCheck %s --check-prefix=NO-LINKER +// RUN: | FileCheck %s --check-prefix=NO-LINKER \ +// RUN: %} // NO-LINKER-NOT: Preprocessed source(s) and associated run script(s) are located at: Index: clang/test/lit.site.cfg.py.in =================================================================== --- clang/test/lit.site.cfg.py.in +++ clang/test/lit.site.cfg.py.in @@ -40,6 +40,7 @@ config.clang_vendor_uti = "@CLANG_VENDOR_UTI@" config.llvm_external_lit = path(r"@LLVM_EXTERNAL_LIT@") config.standalone_build = @CLANG_BUILT_STANDALONE@ +config.is_clang_crash_diag_default = @CLANG_CRASH_DIAG_IS_DEFAULT@ import lit.llvm lit.llvm.initialize(lit_config, config) Index: llvm/test/CMakeLists.txt =================================================================== --- llvm/test/CMakeLists.txt +++ llvm/test/CMakeLists.txt @@ -23,6 +23,7 @@ LLVM_ENABLE_EXPENSIVE_CHECKS LLVM_INCLUDE_DXIL_TESTS LLVM_TOOL_LLVM_DRIVER_BUILD + CLANG_CRASH_DIAG_IS_DEFAULT ) configure_lit_site_cfg( Index: llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn =================================================================== --- llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn +++ llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn @@ -34,6 +34,7 @@ "CLANG_ENABLE_OBJC_REWRITER=1", # FIXME: flag? "CLANG_SYSTEMZ_DEFAULT_ARCH=z10", "PPC_LINUX_DEFAULT_IEEELONGDOUBLE=", + "CLANG_DEFAULT_CRASH_DIAG_LEVEL=1", ] if (clang_enable_arcmt) { Index: utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h =================================================================== --- utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h +++ utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h @@ -121,6 +121,11 @@ /* Whether to enable opaque pointers by default */ #define CLANG_ENABLE_OPAQUE_POINTERS_INTERNAL 1 +/* Default crash diagnostics level. 1 implies crash diagnostics from the + * compiler only + */ +#define CLANG_DEFAULT_CRASH_DIAG_LEVEL 1 + /* Directly provide definitions here behind platform preprocessor definitions. * The preprocessor conditions are sufficient to handle all of the configuration * on platforms targeted by Bazel, and defining these here more faithfully