[Driver] When forcing a crash print the bug report message

Commit a945037e8f moved the printing of the
"PLEASE submit a bug report" message to the crash handler, but that means we
don't print it when forcing a crash using FORCE_CLANG_DIAGNOSTICS_CRASH. Fix
this by adding a function to get the bug report message and printing it when
forcing a crash.

Differential Revision: https://reviews.llvm.org/D81672
This commit is contained in:
John Brawn 2020-06-29 13:13:12 +01:00
parent 52911428ef
commit ce1fa201af
6 changed files with 19 additions and 6 deletions

View File

@ -18,6 +18,7 @@
const int x = MODULE_MACRO;
// CRASH_ENV: failing because environment variable 'FORCE_CLANG_DIAGNOSTICS_CRASH' is set
// CRASH_ENV: PLEASE submit a bug report to {{.*}} and include the crash backtrace, preprocessed source, and associated run script.
// CRASH_ENV: Preprocessed source(s) and associated run script(s) are located at:
// CRASH_ENV-NEXT: note: diagnostic msg: {{.*}}.m
// CRASH_ENV-NEXT: note: diagnostic msg: {{.*}}.cache

View File

@ -19,6 +19,7 @@
@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-NEXT: note: diagnostic msg: {{.*}}.m
// CHECK-NEXT: note: diagnostic msg: {{.*}}.cache

View File

@ -3,5 +3,6 @@
// FIXME: Investigating. "fatal error: file 'nul' modified since it was first processed"
// XFAIL: windows-gnu
// 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-NEXT: note: diagnostic msg: {{.*}}null-{{.*}}.c

View File

@ -511,6 +511,11 @@ int main(int argc_, const char **argv_) {
for (const auto &J : C->getJobs())
if (const Command *C = dyn_cast<Command>(&J))
FailingCommands.push_back(std::make_pair(-1, C));
// Print the bug report message that would be printed if we did actually
// crash, but only if we're crashing due to FORCE_CLANG_DIAGNOSTICS_CRASH.
if (::getenv("FORCE_CLANG_DIAGNOSTICS_CRASH"))
llvm::dbgs() << llvm::getBugReportMsg();
}
for (const auto &P : FailingCommands) {

View File

@ -41,6 +41,9 @@ namespace llvm {
/// a crash.
void setBugReportMsg(const char *Msg);
/// Get the bug report message that will be output upon a crash.
const char *getBugReportMsg();
/// PrettyStackTraceEntry - This class is used to represent a frame of the
/// "pretty" stack trace that is dumped when a program crashes. You can define
/// subclasses of this and declare them on the program stack: when they are

View File

@ -33,6 +33,10 @@
using namespace llvm;
static const char *BugReportMsg =
"PLEASE submit a bug report to " BUG_REPORT_URL
" and include the crash backtrace.\n";
// If backtrace support is not enabled, compile out support for pretty stack
// traces. This has the secondary effect of not requiring thread local storage
// when backtrace support is disabled.
@ -142,10 +146,6 @@ using CrashHandlerStringStorage =
static CrashHandlerStringStorage crashHandlerStringStorage;
#endif
static const char *BugReportMsg =
"PLEASE submit a bug report to " BUG_REPORT_URL
" and include the crash backtrace.\n";
/// This callback is run if a fatal signal is delivered to the process, it
/// prints the pretty stack trace.
static void CrashHandler(void *) {
@ -203,9 +203,11 @@ static void printForSigInfoIfNeeded() {
#endif // ENABLE_BACKTRACES
void llvm::setBugReportMsg(const char *Msg) {
#if ENABLE_BACKTRACES
BugReportMsg = Msg;
#endif
}
const char *llvm::getBugReportMsg() {
return BugReportMsg;
}
PrettyStackTraceEntry::PrettyStackTraceEntry() {