================
@@ -283,15 +278,23 @@ int cc1_main(ArrayRef<const char *> Argv, const char
*Argv0, void *MainAddr) {
// Create the actual diagnostics engine.
Clang->createDiagnostics();
+ DiagsBuffer->FlushDiagnostics(Clang->getDiagnostics());
+ if (!Success)
+ return 1;
+
+ // Initialize process-global state only after the early-return paths above.
+ // Everything below reaches the corresponding cleanup before returning.
+ if (!Clang->getFrontendOpts().TimeTracePath.empty()) {
+ llvm::timeTraceProfilerInitialize(
+ Clang->getFrontendOpts().TimeTraceGranularity, Argv0,
+ Clang->getFrontendOpts().TimeTraceVerbose);
+ }
+
// Set an error handler, so that any LLVM backend diagnostics go through our
// error handler.
llvm::install_fatal_error_handler(LLVMErrorHandler,
----------------
aganea wrote:
Please use a `CrashRecoveryContextCleanupRegistrar` along with the installation
of the fatal error handler, otherwise `llvm::remove_fatal_error_handler` below
would never be called.
Additionally, I wonder if we shouln't stop further commands and consider the
process as "contamined" after the first crash, in the same way LLD does with
`canRunAgain`? Regardless of that choice, I would still do the fatal error
cleanup anyway.
https://github.com/llvm/llvm-project/pull/222531
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits