From 1e866347e05f5bfba1c78380d2950ef2cabe01bc Mon Sep 17 00:00:00 2001 From: Jon Ross-Perkins Date: Mon, 17 Oct 2022 14:59:34 -0700 Subject: [PATCH] Improve driver debugability (#2290) llvm::InitLLVM starts getting stacks on assertion errors. Tieing errs to outs causes outs to be flushed when errs is used (avoiding munging out incompletely flushed output). --- toolchain/driver/driver_main.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/toolchain/driver/driver_main.cpp b/toolchain/driver/driver_main.cpp index 7334d407ce1b..1c916bd3eddc 100644 --- a/toolchain/driver/driver_main.cpp +++ b/toolchain/driver/driver_main.cpp @@ -7,7 +7,7 @@ #include "common/bazel_working_dir.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Support/FileSystem.h" +#include "llvm/Support/InitLLVM.h" #include "toolchain/driver/driver.h" auto main(int argc, char** argv) -> int { @@ -17,6 +17,16 @@ auto main(int argc, char** argv) -> int { Carbon::SetWorkingDirForBazel(); + llvm::setBugReportMsg( + "Please report issues to " + "https://github.com/carbon-language/carbon-lang/issues and include the " + "crash backtrace.\n"); + llvm::InitLLVM init_llvm(argc, argv); + + // Printing to stderr should flush stdout. This is most noticeable when stderr + // is piped to stdout. + llvm::errs().tie(&llvm::outs()); + llvm::SmallVector args(argv + 1, argv + argc); Carbon::Driver driver; bool success = driver.RunFullCommand(args);