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