[Serialization] Intro -Rmodule-recovery to remark about silent errors

Deserialization recovery silently drops errors and the affected decls.
This can lead to surprises when a function from an imported module
simply disappears without an explanation.

This commit introduces the flag -Rmodule-recovery to report as remarks
some of these previously silently dropped issues. It can be used to
debug project configuration issues.
This commit is contained in:
Alexis Laferrière
2023-05-08 16:50:40 -07:00
parent 65b5f82b52
commit 4f66fcfadb
5 changed files with 65 additions and 1 deletions

View File

@@ -7384,6 +7384,14 @@ llvm::Error ModuleFile::consumeExpectedError(llvm::Error &&error) {
}
void ModuleFile::diagnoseAndConsumeError(llvm::Error error) const {
auto &ctx = getContext();
if (ctx.LangOpts.EnableModuleRecoveryRemarks) {
error = diagnoseModularizationError(std::move(error),
DiagnosticBehavior::Remark);
// If error was already diagnosed it was also consumed.
if (!error)
return;
}
consumeError(std::move(error));
}