https://github.com/aeubanks updated https://github.com/llvm/llvm-project/pull/198838
>From d1c339ba464bcc1aadf0a5972acf3091d41ca556 Mon Sep 17 00:00:00 2001 From: Arthur Eubanks <[email protected]> Date: Wed, 20 May 2026 16:33:53 +0000 Subject: [PATCH 1/6] [clang] Add -fcrash-diagnostics-tar for tarball of crash reproducer files Makes it easier to move around crash diagnostics. --- clang/include/clang/Options/Options.td | 4 ++ clang/lib/Driver/Driver.cpp | 64 +++++++++++++++++++ clang/test/Driver/Inputs/empty.h | 1 + clang/test/Driver/Inputs/module.modulemap | 3 + clang/test/Driver/crash-diagnostics-modules.c | 17 +++++ clang/test/Driver/crash-diagnostics-tar.c | 17 +++++ 6 files changed, 106 insertions(+) create mode 100644 clang/test/Driver/Inputs/empty.h create mode 100644 clang/test/Driver/Inputs/module.modulemap create mode 100644 clang/test/Driver/crash-diagnostics-modules.c create mode 100644 clang/test/Driver/crash-diagnostics-tar.c diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td index 753e3ac1b74a5..8ee8bb544535e 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -2177,6 +2177,10 @@ def fcrash_diagnostics_dir : Joined<["-"], "fcrash-diagnostics-dir=">, Group<f_clang_Group>, Flags<[NoArgumentUnused]>, Visibility<[ClangOption, CLOption, DXCOption]>, HelpText<"Put crash-report files in <dir>">, MetaVarName<"<dir>">; +def fcrash_diagnostics_tar : Joined<["-"], "fcrash-diagnostics-tar=">, + Group<f_clang_Group>, Flags<[NoArgumentUnused]>, + Visibility<[ClangOption, CLOption, DXCOption]>, + HelpText<"Put crash-report tarball at <path>">, MetaVarName<"<path>">; def fcreate_profile : Flag<["-"], "fcreate-profile">, Group<f_Group>; defm cxx_exceptions: BoolFOption<"cxx-exceptions", LangOpts<"CXXExceptions">, DefaultFalse, diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 4a968a4ce5cc0..42226193c3b15 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -98,12 +98,14 @@ #include "llvm/Support/IOSandbox.h" #include "llvm/Support/JSON.h" #include "llvm/Support/MD5.h" +#include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/Process.h" #include "llvm/Support/Program.h" #include "llvm/Support/Regex.h" #include "llvm/Support/StringSaver.h" +#include "llvm/Support/TarWriter.h" #include "llvm/Support/VirtualFileSystem.h" #include "llvm/Support/raw_ostream.h" #include "llvm/TargetParser/Host.h" @@ -2271,9 +2273,71 @@ void Driver::generateCompilationDiagnostics( << "\n"; if (Report) Report->TemporaryFiles.push_back(std::string(Script)); + TempFiles.push_back(std::string(Script)); + ScriptOS.close(); Diag(clang::diag::note_drv_command_failed_diag_msg) << Script; } + if (Arg *A = C.getArgs().getLastArg(options::OPT_fcrash_diagnostics_tar)) { + StringRef CrashDiagnosticsTar = A->getValue(); + Expected<std::unique_ptr<llvm::TarWriter>> TarOrErr = + llvm::TarWriter::create(CrashDiagnosticsTar, + llvm::sys::path::stem(CrashDiagnosticsTar)); + if (!TarOrErr) { + Diag(clang::diag::note_drv_command_failed_diag_msg) + << (std::string("Error creating reproducer tarball: ") + + llvm::toString(TarOrErr.takeError())); + } else { + std::unique_ptr<llvm::TarWriter> &Tar = *TarOrErr; + for (const std::string &TempFile : TempFiles) { + if (llvm::sys::fs::is_directory(TempFile)) { + std::error_code EC; + for (llvm::sys::fs::recursive_directory_iterator I(TempFile, EC), E; + I != E && !EC; I.increment(EC)) { + if (llvm::sys::fs::is_regular_file(I->path())) { + auto BufferOrErr = llvm::MemoryBuffer::getFile(I->path()); + if (BufferOrErr) { + // Construct path of file relative to TempFile. + llvm::SmallString<128> PathInTar = + llvm::sys::path::filename(TempFile); + StringRef SubPath = I->path(); + if (SubPath.consume_front(TempFile)) { + if (!SubPath.empty() && + llvm::sys::path::is_separator(SubPath.front())) { + SubPath = SubPath.drop_front(); + } + llvm::sys::path::append(PathInTar, SubPath); + Tar->append(PathInTar, (*BufferOrErr)->getBuffer()); + } + } else { + Diag(clang::diag::note_drv_command_failed_diag_msg) + << (std::string("Error reading file for tarball: ") + + I->path()); + } + } + } + if (EC) { + Diag(clang::diag::note_drv_command_failed_diag_msg) + << (std::string("Error iterating directory for tarball: ") + + TempFile + " " + EC.message()); + } + } else { + auto BufferOrErr = llvm::MemoryBuffer::getFile(TempFile); + if (BufferOrErr) { + Tar->append(llvm::sys::path::filename(TempFile), + (*BufferOrErr)->getBuffer()); + } else { + Diag(clang::diag::note_drv_command_failed_diag_msg) + << (std::string("Error reading file for tarball: ") + TempFile); + } + } + } + Diag(clang::diag::note_drv_command_failed_diag_msg) + << (std::string("Crash reproducer tarball created at: ") + + CrashDiagnosticsTar); + } + } + // On darwin, provide information about the .crash diagnostic report. if (llvm::Triple(llvm::sys::getProcessTriple()).isOSDarwin()) { SmallString<128> CrashDiagDir; diff --git a/clang/test/Driver/Inputs/empty.h b/clang/test/Driver/Inputs/empty.h new file mode 100644 index 0000000000000..655474edc7b65 --- /dev/null +++ b/clang/test/Driver/Inputs/empty.h @@ -0,0 +1 @@ +// Empty header diff --git a/clang/test/Driver/Inputs/module.modulemap b/clang/test/Driver/Inputs/module.modulemap new file mode 100644 index 0000000000000..b6edda7ff5dda --- /dev/null +++ b/clang/test/Driver/Inputs/module.modulemap @@ -0,0 +1,3 @@ +module Empty { + header "empty.h" +} diff --git a/clang/test/Driver/crash-diagnostics-modules.c b/clang/test/Driver/crash-diagnostics-modules.c new file mode 100644 index 0000000000000..49414f7fe2bfc --- /dev/null +++ b/clang/test/Driver/crash-diagnostics-modules.c @@ -0,0 +1,17 @@ +// UNSUPPORTED: system-windows +// RUN: export LSAN_OPTIONS=detect_leaks=0 +// RUN: rm -rf %t +// RUN: mkdir %t +// RUN: not %crash_opt %clang -fcrash-diagnostics-tar=%t.tar -fmodules -fmodules-cache-path=%t/cache -I %S/Inputs -c %s -o /dev/null 2>&1 | FileCheck %s +// RUN: tar -tf %t.tar | FileCheck %s --check-prefix=TAR + +#include "empty.h" + +#pragma clang __debug parser_crash + +// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: Crash reproducer tarball created at: + +// TAR-DAG: {{.*}}.c +// TAR-DAG: {{.*}}.sh +// TAR-DAG: {{.*}}.cache/{{.*}}module.modulemap diff --git a/clang/test/Driver/crash-diagnostics-tar.c b/clang/test/Driver/crash-diagnostics-tar.c new file mode 100644 index 0000000000000..4159afb75b885 --- /dev/null +++ b/clang/test/Driver/crash-diagnostics-tar.c @@ -0,0 +1,17 @@ +// UNSUPPORTED: system-windows +// RUN: export LSAN_OPTIONS=detect_leaks=0 +// RUN: rm -rf %t.tar +// RUN: not %crash_opt %clang -fcrash-diagnostics-tar=%t.tar -c %s -o /dev/null 2>&1 | FileCheck %s +// RUN: rm -rf %t +// RUN: mkdir %t +// RUN: tar -xf %t.tar -C %t +// RUN: FileCheck %s --check-prefix=SH < %t/*/crash-diagnostics-tar-*.sh +// RUN: FileCheck %s --check-prefix=C < %t/*/crash-diagnostics-tar-*.c + +#pragma clang __debug parser_crash + +// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: Crash reproducer tarball created at: + +// SH: # Crash reproducer for +// C: # 1 " >From de2f684b6187a70259c89d90997dec3260ab83ec Mon Sep 17 00:00:00 2001 From: Arthur Eubanks <[email protected]> Date: Fri, 22 May 2026 00:00:20 +0000 Subject: [PATCH 2/6] make tests work on windows --- clang/test/Driver/crash-diagnostics-modules.c | 9 ++++----- clang/test/Driver/crash-diagnostics-tar.c | 15 +++++++-------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/clang/test/Driver/crash-diagnostics-modules.c b/clang/test/Driver/crash-diagnostics-modules.c index 49414f7fe2bfc..41d04384affa9 100644 --- a/clang/test/Driver/crash-diagnostics-modules.c +++ b/clang/test/Driver/crash-diagnostics-modules.c @@ -1,9 +1,8 @@ -// UNSUPPORTED: system-windows // RUN: export LSAN_OPTIONS=detect_leaks=0 -// RUN: rm -rf %t -// RUN: mkdir %t -// RUN: not %crash_opt %clang -fcrash-diagnostics-tar=%t.tar -fmodules -fmodules-cache-path=%t/cache -I %S/Inputs -c %s -o /dev/null 2>&1 | FileCheck %s -// RUN: tar -tf %t.tar | FileCheck %s --check-prefix=TAR +// RUN: rm -rf %t && mkdir %t +// RUN: cd %t +// RUN: not %crash_opt %clang -fcrash-diagnostics-tar=repro.tar -fmodules -fmodules-cache-path=cache -I %S/Inputs -c %s -o /dev/null 2>&1 | FileCheck %s +// RUN: tar -tf repro.tar | FileCheck %s --check-prefix=TAR #include "empty.h" diff --git a/clang/test/Driver/crash-diagnostics-tar.c b/clang/test/Driver/crash-diagnostics-tar.c index 4159afb75b885..ddc95ae5b00df 100644 --- a/clang/test/Driver/crash-diagnostics-tar.c +++ b/clang/test/Driver/crash-diagnostics-tar.c @@ -1,12 +1,11 @@ -// UNSUPPORTED: system-windows // RUN: export LSAN_OPTIONS=detect_leaks=0 -// RUN: rm -rf %t.tar -// RUN: not %crash_opt %clang -fcrash-diagnostics-tar=%t.tar -c %s -o /dev/null 2>&1 | FileCheck %s -// RUN: rm -rf %t -// RUN: mkdir %t -// RUN: tar -xf %t.tar -C %t -// RUN: FileCheck %s --check-prefix=SH < %t/*/crash-diagnostics-tar-*.sh -// RUN: FileCheck %s --check-prefix=C < %t/*/crash-diagnostics-tar-*.c +// RUN: rm -rf %t && mkdir %t +// RUN: cd %t +// RUN: not %crash_opt %clang -fcrash-diagnostics-tar=repro.tar -c %s -o /dev/null 2>&1 | FileCheck %s +// RUN: mkdir extract +// RUN: tar -xf repro.tar -C extract +// RUN: FileCheck %s --check-prefix=SH < extract/*/crash-diagnostics-tar-*.sh +// RUN: FileCheck %s --check-prefix=C < extract/*/crash-diagnostics-tar-*.c #pragma clang __debug parser_crash >From 9fc24501342f103d9ffd6f530804cc2082543960 Mon Sep 17 00:00:00 2001 From: Arthur Eubanks <[email protected]> Date: Fri, 22 May 2026 22:55:25 +0000 Subject: [PATCH 3/6] Print path to tar instead when -fcrash-diagnostic-tar --- clang/lib/Driver/Driver.cpp | 21 ++++++++++--------- clang/test/Driver/crash-diagnostics-dir-3.c | 2 +- clang/test/Driver/crash-diagnostics-dir.c | 2 +- clang/test/Driver/crash-diagnostics-modules.c | 4 ++-- clang/test/Driver/crash-diagnostics-tar.c | 15 ++++++++++--- 5 files changed, 27 insertions(+), 17 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 42226193c3b15..5aba0067fda46 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -2011,10 +2011,9 @@ bool Driver::getCrashDiagnosticFile(StringRef ReproCrashFilename, return false; } -static const char BugReporMsg[] = +static const char BugReportMsg[] = "\n********************\n\n" - "PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:\n" - "Preprocessed source(s) and associated run script(s) are located at:"; + "PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT:"; // When clang crashes, produce diagnostic information including the fully // preprocessed source file(s). Request that the developer attach the @@ -2025,6 +2024,8 @@ void Driver::generateCompilationDiagnostics( if (C.getArgs().hasArg(options::OPT_fno_crash_diagnostics)) return; + bool HasCrashTar = C.getArgs().hasArg(options::OPT_fcrash_diagnostics_tar); + unsigned Level = 1; if (Arg *A = C.getArgs().getLastArg(options::OPT_fcrash_diagnostics_EQ)) { Level = llvm::StringSwitch<unsigned>(A->getValue()) @@ -2085,7 +2086,7 @@ void Driver::generateCompilationDiagnostics( // Redirect stdout/stderr to /dev/null. NewLLDInvocation.Execute({std::nullopt, {""}, {""}}, nullptr, nullptr); - Diag(clang::diag::note_drv_command_failed_diag_msg) << BugReporMsg; + Diag(clang::diag::note_drv_command_failed_diag_msg) << BugReportMsg; Diag(clang::diag::note_drv_command_failed_diag_msg) << TmpName; Diag(clang::diag::note_drv_command_failed_diag_msg) << "\n\n********************"; @@ -2226,12 +2227,13 @@ void Driver::generateCompilationDiagnostics( TempFiles.push_back(std::string(Path.begin(), Path.end())); } - Diag(clang::diag::note_drv_command_failed_diag_msg) << BugReporMsg; + Diag(clang::diag::note_drv_command_failed_diag_msg) << BugReportMsg; SmallString<128> VFS; SmallString<128> ReproCrashFilename; for (std::string &TempFile : TempFiles) { - Diag(clang::diag::note_drv_command_failed_diag_msg) << TempFile; + if (!HasCrashTar) + Diag(clang::diag::note_drv_command_failed_diag_msg) << TempFile; if (Report) Report->TemporaryFiles.push_back(TempFile); if (ReproCrashFilename.empty()) { @@ -2275,7 +2277,8 @@ void Driver::generateCompilationDiagnostics( Report->TemporaryFiles.push_back(std::string(Script)); TempFiles.push_back(std::string(Script)); ScriptOS.close(); - Diag(clang::diag::note_drv_command_failed_diag_msg) << Script; + if (!HasCrashTar) + Diag(clang::diag::note_drv_command_failed_diag_msg) << Script; } if (Arg *A = C.getArgs().getLastArg(options::OPT_fcrash_diagnostics_tar)) { @@ -2332,9 +2335,7 @@ void Driver::generateCompilationDiagnostics( } } } - Diag(clang::diag::note_drv_command_failed_diag_msg) - << (std::string("Crash reproducer tarball created at: ") + - CrashDiagnosticsTar); + Diag(clang::diag::note_drv_command_failed_diag_msg) << CrashDiagnosticsTar; } } diff --git a/clang/test/Driver/crash-diagnostics-dir-3.c b/clang/test/Driver/crash-diagnostics-dir-3.c index 63a5efc853a4c..753b60ee2e2a0 100644 --- a/clang/test/Driver/crash-diagnostics-dir-3.c +++ b/clang/test/Driver/crash-diagnostics-dir-3.c @@ -2,5 +2,5 @@ // RUN: rm -rf %t // RUN: not %crash_opt env CLANG_CRASH_DIAGNOSTICS_DIR=%t %clang -c %s -o - 2>&1 | FileCheck %s #pragma clang __debug parser_crash -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK: diagnostic msg: {{.*}}{{/|\\}}crash-diagnostics-dir-3.c.tmp{{(/|\\).*}}.c diff --git a/clang/test/Driver/crash-diagnostics-dir.c b/clang/test/Driver/crash-diagnostics-dir.c index 9a8299bffe005..8350ef70f9fef 100644 --- a/clang/test/Driver/crash-diagnostics-dir.c +++ b/clang/test/Driver/crash-diagnostics-dir.c @@ -2,5 +2,5 @@ // RUN: rm -rf %t // RUN: not %crash_opt %clang -fcrash-diagnostics-dir=%t -c %s -o - 2>&1 | FileCheck %s #pragma clang __debug parser_crash -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK: diagnostic msg: {{.*}}{{/|\\}}crash-diagnostics-dir.c.tmp{{(/|\\).*}}.c diff --git a/clang/test/Driver/crash-diagnostics-modules.c b/clang/test/Driver/crash-diagnostics-modules.c index 41d04384affa9..cb9299b8e73cc 100644 --- a/clang/test/Driver/crash-diagnostics-modules.c +++ b/clang/test/Driver/crash-diagnostics-modules.c @@ -8,8 +8,8 @@ #pragma clang __debug parser_crash -// CHECK: Preprocessed source(s) and associated run script(s) are located at: -// CHECK: Crash reproducer tarball created at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: +// CHECK: repro.tar // TAR-DAG: {{.*}}.c // TAR-DAG: {{.*}}.sh diff --git a/clang/test/Driver/crash-diagnostics-tar.c b/clang/test/Driver/crash-diagnostics-tar.c index ddc95ae5b00df..a8dd28498aa30 100644 --- a/clang/test/Driver/crash-diagnostics-tar.c +++ b/clang/test/Driver/crash-diagnostics-tar.c @@ -1,16 +1,25 @@ // RUN: export LSAN_OPTIONS=detect_leaks=0 // RUN: rm -rf %t && mkdir %t // RUN: cd %t -// RUN: not %crash_opt %clang -fcrash-diagnostics-tar=repro.tar -c %s -o /dev/null 2>&1 | FileCheck %s +// RUN: not %crash_opt %clang -fcrash-diagnostics-tar=repro.tar -c %s -o /dev/null 2>&1 | FileCheck %s --check-prefix=TAR // RUN: mkdir extract // RUN: tar -xf repro.tar -C extract // RUN: FileCheck %s --check-prefix=SH < extract/*/crash-diagnostics-tar-*.sh // RUN: FileCheck %s --check-prefix=C < extract/*/crash-diagnostics-tar-*.c +// RUN: not %crash_opt %clang -c %s -o /dev/null 2>&1 | FileCheck %s --check-prefix=NOTAR + #pragma clang __debug parser_crash -// CHECK: Preprocessed source(s) and associated run script(s) are located at: -// CHECK: Crash reproducer tarball created at: +// TAR: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: +// TAR: repro.tar +// TAR-NOT: .c +// TAR-NOT: .sh + +// NOTAR: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: +// NOTAR: .c +// NOTAR: .sh +// NOTAR-NOT: .tar // SH: # Crash reproducer for // C: # 1 " >From 96094068a27a8f58a21f9ebf99d7195a0c8eff58 Mon Sep 17 00:00:00 2001 From: Arthur Eubanks <[email protected]> Date: Fri, 22 May 2026 22:58:04 +0000 Subject: [PATCH 4/6] small test cleanup --- clang/test/Driver/crash-diagnostics-modules.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/clang/test/Driver/crash-diagnostics-modules.c b/clang/test/Driver/crash-diagnostics-modules.c index cb9299b8e73cc..d6228f6b38c98 100644 --- a/clang/test/Driver/crash-diagnostics-modules.c +++ b/clang/test/Driver/crash-diagnostics-modules.c @@ -11,6 +11,6 @@ // CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK: repro.tar -// TAR-DAG: {{.*}}.c -// TAR-DAG: {{.*}}.sh -// TAR-DAG: {{.*}}.cache/{{.*}}module.modulemap +// TAR-DAG: .c +// TAR-DAG: .sh +// TAR-DAG: .cache/{{.*}}module.modulemap >From ce855e72d3c266aefe4985a8135ed950b313255a Mon Sep 17 00:00:00 2001 From: Arthur Eubanks <[email protected]> Date: Mon, 25 May 2026 00:59:55 +0000 Subject: [PATCH 5/6] fix tests and slightly reword driver crash message --- clang/test/Driver/crash-ir-repro.cpp | 2 +- clang/test/Driver/crash-report-clang-cl.cpp | 2 +- clang/test/Driver/crash-report-crashfile.m | 4 ++-- clang/test/Driver/crash-report-header.h | 2 +- clang/test/Driver/crash-report-modules.m | 4 ++-- clang/test/Driver/crash-report-multi-arch.c | 2 +- clang/test/Driver/crash-report-null.test | 4 ++-- clang/test/Driver/crash-report-spaces.c | 2 +- clang/test/Driver/crash-report-with-asserts.c | 2 +- clang/test/Driver/crash-report.cpp | 2 +- clang/test/Driver/lld-repro.c | 4 ++-- clang/test/Modules/crash-vfs-headermaps.m | 2 +- clang/test/Modules/crash-vfs-include-pch.m | 2 +- clang/test/Modules/crash-vfs-ivfsoverlay.m | 2 +- clang/test/Modules/crash-vfs-path-emptydir-entries.m | 2 +- clang/test/Modules/crash-vfs-path-symlink-component.m | 2 +- clang/test/Modules/crash-vfs-path-symlink-topheader.m | 2 +- clang/test/Modules/crash-vfs-path-traversal.m | 2 +- clang/test/Modules/crash-vfs-relative-incdir.m | 2 +- clang/test/Modules/crash-vfs-relative-overlay.m | 2 +- clang/test/Modules/crash-vfs-run-reproducer.m | 2 +- clang/test/Modules/crash-vfs-umbrella-frameworks.m | 2 +- clang/tools/driver/driver.cpp | 4 ++-- 23 files changed, 28 insertions(+), 28 deletions(-) diff --git a/clang/test/Driver/crash-ir-repro.cpp b/clang/test/Driver/crash-ir-repro.cpp index 599c656f0936e..4f6cf93189627 100644 --- a/clang/test/Driver/crash-ir-repro.cpp +++ b/clang/test/Driver/crash-ir-repro.cpp @@ -1,7 +1,7 @@ // RUN: %clang -S -emit-llvm -o %t.ll %s // RUN: not %crash_opt %clang -S -DCRASH %s -o %t.ll 2>&1 | FileCheck %s -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: clang: note: diagnostic msg: {{.*}}.cpp // CHECK-NEXT: clang: note: diagnostic msg: {{.*}}.sh diff --git a/clang/test/Driver/crash-report-clang-cl.cpp b/clang/test/Driver/crash-report-clang-cl.cpp index f61b94626f584..e97210aa952dc 100644 --- a/clang/test/Driver/crash-report-clang-cl.cpp +++ b/clang/test/Driver/crash-report-clang-cl.cpp @@ -11,7 +11,7 @@ #pragma clang __debug crash -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // __has_feature(cxx_exceptions) is default-off in the cl-compatible driver. FOO diff --git a/clang/test/Driver/crash-report-crashfile.m b/clang/test/Driver/crash-report-crashfile.m index dd55b0dbb77e0..9479d1fdd03f2 100644 --- a/clang/test/Driver/crash-report-crashfile.m +++ b/clang/test/Driver/crash-report-crashfile.m @@ -19,7 +19,7 @@ // CRASH_ENV: PLEASE submit a bug report to {{.*}} and include the crash backtrace, preprocessed source, and associated run script. // CRASH_ENV: failing because environment variable 'FORCE_CLANG_DIAGNOSTICS_CRASH' is set -// CRASH_ENV: Preprocessed source(s) and associated run script(s) are located at: +// CRASH_ENV: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CRASH_ENV-NEXT: note: diagnostic msg: {{.*}}.m // CRASH_ENV-NEXT: note: diagnostic msg: {{.*}}.cache // CRASH_ENV-NEXT: note: diagnostic msg: {{.*}}.sh @@ -27,7 +27,7 @@ // CRASH_ENV-NEXT: note: diagnostic msg: {{.*}}Library/Logs/DiagnosticReports{{.*}} // CRASH_FLAG: failing because '-gen-reproducer' is used -// CRASH_FLAG: Preprocessed source(s) and associated run script(s) are located at: +// CRASH_FLAG: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CRASH_FLAG-NEXT: note: diagnostic msg: {{.*}}.m // CRASH_FLAG-NEXT: note: diagnostic msg: {{.*}}.cache // CRASH_FLAG-NEXT: note: diagnostic msg: {{.*}}.sh diff --git a/clang/test/Driver/crash-report-header.h b/clang/test/Driver/crash-report-header.h index 6d5156537126d..9208cea53d1d0 100644 --- a/clang/test/Driver/crash-report-header.h +++ b/clang/test/Driver/crash-report-header.h @@ -7,7 +7,7 @@ // REQUIRES: crash-recovery #pragma clang __debug parser_crash -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.h FOO // CHECKSRC: FOO diff --git a/clang/test/Driver/crash-report-modules.m b/clang/test/Driver/crash-report-modules.m index 7f669dc8ededd..27f2ba2dfbb7d 100644 --- a/clang/test/Driver/crash-report-modules.m +++ b/clang/test/Driver/crash-report-modules.m @@ -16,8 +16,8 @@ @import simple; const int x = MODULE_MACRO; -// CHECK: PLEASE submit a bug report to {{.*}} and include the crash backtrace, preprocessed source, and associated run script. -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE submit a bug report to {{.*}} and include the crash backtrace and dumped files. +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/test/Driver/crash-report-multi-arch.c b/clang/test/Driver/crash-report-multi-arch.c index 423fd1dc38bfe..7007d5c718045 100644 --- a/clang/test/Driver/crash-report-multi-arch.c +++ b/clang/test/Driver/crash-report-multi-arch.c @@ -38,7 +38,7 @@ // REQUIRES: crash-recovery, system-darwin // REQUIRES: aarch64-registered-target, x86-registered-target -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}crash-report-{{.*}}.c // CHECKSH-x86_64: # Crash reproducer diff --git a/clang/test/Driver/crash-report-null.test b/clang/test/Driver/crash-report-null.test index c5e3b3b0fc9ca..8faaaf6e140f2 100644 --- a/clang/test/Driver/crash-report-null.test +++ b/clang/test/Driver/crash-report-null.test @@ -3,6 +3,6 @@ // FIXME: Investigating. "fatal error: file 'nul' modified since it was first processed" // UNSUPPORTED: system-windows -// CHECK: PLEASE submit a bug report to {{.*}} and include the crash backtrace, preprocessed source, and associated run script. -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE submit a bug report to {{.*}} and include the crash backtrace and dumped files. +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}null-{{.*}}.c diff --git a/clang/test/Driver/crash-report-spaces.c b/clang/test/Driver/crash-report-spaces.c index b5fbb59683fc0..59d441445a89e 100644 --- a/clang/test/Driver/crash-report-spaces.c +++ b/clang/test/Driver/crash-report-spaces.c @@ -8,7 +8,7 @@ // REQUIRES: crash-recovery #pragma clang __debug parser_crash -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.c FOO // CHECKSRC: FOO diff --git a/clang/test/Driver/crash-report-with-asserts.c b/clang/test/Driver/crash-report-with-asserts.c index 278860a9158e4..3885a20dc4de6 100644 --- a/clang/test/Driver/crash-report-with-asserts.c +++ b/clang/test/Driver/crash-report-with-asserts.c @@ -30,7 +30,7 @@ #pragma clang __debug llvm_unreachable #endif -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}crash-report-with-asserts-{{.*}}.c FOO // CHECKSRC: FOO diff --git a/clang/test/Driver/crash-report.cpp b/clang/test/Driver/crash-report.cpp index c431940bf9ea1..9fb79b3987650 100644 --- a/clang/test/Driver/crash-report.cpp +++ b/clang/test/Driver/crash-report.cpp @@ -61,7 +61,7 @@ #pragma clang __debug llvm_fatal_error #endif -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}crash-report-{{.*}}.cpp // __has_feature(cxx_exceptions) is default-on in the gcc-compatible driver. diff --git a/clang/test/Driver/lld-repro.c b/clang/test/Driver/lld-repro.c index 0e6340865b738..c2e5b0eb67ef1 100644 --- a/clang/test/Driver/lld-repro.c +++ b/clang/test/Driver/lld-repro.c @@ -15,7 +15,7 @@ // check that we still get lld's output // CHECK: error: undefined symbol: {{_?}}a -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}linker-crash-{{.*}}.tar // CHECK-NEXT: note: diagnostic msg: // CHECK: ******************** @@ -25,7 +25,7 @@ // RUN: not %clang %s @%t.rsp -o /dev/null 2>&1 \ // RUN: | FileCheck %s --check-prefix=NO-LINKER -// NO-LINKER-NOT: Preprocessed source(s) and associated run script(s) are located at: +// NO-LINKER-NOT: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: extern int a; int main() { diff --git a/clang/test/Modules/crash-vfs-headermaps.m b/clang/test/Modules/crash-vfs-headermaps.m index 26ff3f26450b5..1104b26cb8242 100644 --- a/clang/test/Modules/crash-vfs-headermaps.m +++ b/clang/test/Modules/crash-vfs-headermaps.m @@ -16,7 +16,7 @@ #include "Foo.h" #include "Foo.h" -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/test/Modules/crash-vfs-include-pch.m b/clang/test/Modules/crash-vfs-include-pch.m index 2610b06974578..d0c6650656db6 100644 --- a/clang/test/Modules/crash-vfs-include-pch.m +++ b/clang/test/Modules/crash-vfs-include-pch.m @@ -21,7 +21,7 @@ void f() { SPXTrace(); } void g() { double x = DBL_MAX; } -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/test/Modules/crash-vfs-ivfsoverlay.m b/clang/test/Modules/crash-vfs-ivfsoverlay.m index 32489457d7362..9ce0d37cd1513 100644 --- a/clang/test/Modules/crash-vfs-ivfsoverlay.m +++ b/clang/test/Modules/crash-vfs-ivfsoverlay.m @@ -21,7 +21,7 @@ #include <stdio.h> -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/test/Modules/crash-vfs-path-emptydir-entries.m b/clang/test/Modules/crash-vfs-path-emptydir-entries.m index 9564f11cdbcff..ad94d9dd041e4 100644 --- a/clang/test/Modules/crash-vfs-path-emptydir-entries.m +++ b/clang/test/Modules/crash-vfs-path-emptydir-entries.m @@ -24,7 +24,7 @@ #include "usr/include/stdio.h" -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/test/Modules/crash-vfs-path-symlink-component.m b/clang/test/Modules/crash-vfs-path-symlink-component.m index 4cc4467166bd9..74aae37cceb9f 100644 --- a/clang/test/Modules/crash-vfs-path-symlink-component.m +++ b/clang/test/Modules/crash-vfs-path-symlink-component.m @@ -26,7 +26,7 @@ #include "usr/x/../stdio.h" -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/test/Modules/crash-vfs-path-symlink-topheader.m b/clang/test/Modules/crash-vfs-path-symlink-topheader.m index bab754fcb749b..b241d6f1fc77b 100644 --- a/clang/test/Modules/crash-vfs-path-symlink-topheader.m +++ b/clang/test/Modules/crash-vfs-path-symlink-topheader.m @@ -25,7 +25,7 @@ #include "usr/include/stdio.h" -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/test/Modules/crash-vfs-path-traversal.m b/clang/test/Modules/crash-vfs-path-traversal.m index 680cda34700cf..c51870838e713 100644 --- a/clang/test/Modules/crash-vfs-path-traversal.m +++ b/clang/test/Modules/crash-vfs-path-traversal.m @@ -24,7 +24,7 @@ #include "usr/././//////include/../include/./././../include/stdio.h" -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/test/Modules/crash-vfs-relative-incdir.m b/clang/test/Modules/crash-vfs-relative-incdir.m index cacf65a053049..57506f9163603 100644 --- a/clang/test/Modules/crash-vfs-relative-incdir.m +++ b/clang/test/Modules/crash-vfs-relative-incdir.m @@ -17,7 +17,7 @@ #include <stdio.h> -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/test/Modules/crash-vfs-relative-overlay.m b/clang/test/Modules/crash-vfs-relative-overlay.m index 36849246b9db4..f3701701ddd94 100644 --- a/clang/test/Modules/crash-vfs-relative-overlay.m +++ b/clang/test/Modules/crash-vfs-relative-overlay.m @@ -21,7 +21,7 @@ #include <stdio.h> -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/test/Modules/crash-vfs-run-reproducer.m b/clang/test/Modules/crash-vfs-run-reproducer.m index 7b289ccc15bd5..27c8bea2ba6ff 100644 --- a/clang/test/Modules/crash-vfs-run-reproducer.m +++ b/clang/test/Modules/crash-vfs-run-reproducer.m @@ -17,7 +17,7 @@ #include <stdio.h> -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/test/Modules/crash-vfs-umbrella-frameworks.m b/clang/test/Modules/crash-vfs-umbrella-frameworks.m index 9f79fb1c09b0d..d71d85380d6c3 100644 --- a/clang/test/Modules/crash-vfs-umbrella-frameworks.m +++ b/clang/test/Modules/crash-vfs-umbrella-frameworks.m @@ -18,7 +18,7 @@ // RUN: find %t/crash-vfs-*.cache/vfs | \ // RUN: grep "B.framework/Headers/B.h" | count 1 -// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK: PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT: // CHECK-NEXT: note: diagnostic msg: {{.*}}.m // CHECK-NEXT: note: diagnostic msg: {{.*}}.cache diff --git a/clang/tools/driver/driver.cpp b/clang/tools/driver/driver.cpp index f22c4b7050b8e..d4d913a8977a4 100644 --- a/clang/tools/driver/driver.cpp +++ b/clang/tools/driver/driver.cpp @@ -242,8 +242,8 @@ static int ExecuteCC1Tool(SmallVectorImpl<const char *> &ArgV, int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContext) { noteBottomOfStack(); llvm::setBugReportMsg("PLEASE submit a bug report to " BUG_REPORT_URL - " and include the crash backtrace, preprocessed " - "source, and associated run script.\n"); + " and include the crash backtrace and" + " dumped files.\n"); SmallVector<const char *, 256> Args(Argv, Argv + Argc); if (llvm::sys::Process::FixupStandardFileDescriptors()) >From 726c5c5eef6ef6650464c79cecf420467de8f834 Mon Sep 17 00:00:00 2001 From: Arthur Eubanks <[email protected]> Date: Mon, 25 May 2026 01:05:34 +0000 Subject: [PATCH 6/6] format --- clang/lib/Driver/Driver.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 5aba0067fda46..318d9b496f3a4 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -2335,7 +2335,8 @@ void Driver::generateCompilationDiagnostics( } } } - Diag(clang::diag::note_drv_command_failed_diag_msg) << CrashDiagnosticsTar; + Diag(clang::diag::note_drv_command_failed_diag_msg) + << CrashDiagnosticsTar; } } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
