sema_manager: Use llvm::CrashRecoveryContext

This commit is contained in:
Fangrui Song 2021-05-18 21:01:50 -07:00
parent c018bce9af
commit 80d06eb476

View File

@ -327,19 +327,26 @@ buildCompilerInstance(Session &session, std::unique_ptr<CompilerInvocation> ci,
bool parse(CompilerInstance &clang) { bool parse(CompilerInstance &clang) {
SyntaxOnlyAction action; SyntaxOnlyAction action;
llvm::CrashRecoveryContext crc;
bool ok = false;
auto run = [&]() {
if (!action.BeginSourceFile(clang, clang.getFrontendOpts().Inputs[0])) if (!action.BeginSourceFile(clang, clang.getFrontendOpts().Inputs[0]))
return false; return;
#if LLVM_VERSION_MAJOR >= 9 // rL364464 #if LLVM_VERSION_MAJOR >= 9 // rL364464
if (llvm::Error e = action.Execute()) { if (llvm::Error e = action.Execute()) {
llvm::consumeError(std::move(e)); llvm::consumeError(std::move(e));
return false; return;
} }
#else #else
if (!action.Execute()) if (!action.Execute())
return false; return;
#endif #endif
action.EndSourceFile(); action.EndSourceFile();
return true; ok = true;
};
if (!crc.RunSafely(run))
LOG_S(ERROR) << "clang crashed";
return ok;
} }
void buildPreamble(Session &session, CompilerInvocation &ci, void buildPreamble(Session &session, CompilerInvocation &ci,