diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2024-09-16 10:49:17 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-16 10:49:17 -0400 |
commit | 5cead0cb0bdeebd47e648114541b2998ed83df6f (patch) | |
tree | ece30b70ce4e63ef87b200a4d0558ac0853de3c2 /clang/lib/Basic/SourceManager.cpp | |
parent | 76a85b0e2f3e59a5fd96c4b6dbd1a2835329d1e0 (diff) | |
download | llvm-5cead0cb0bdeebd47e648114541b2998ed83df6f.zip llvm-5cead0cb0bdeebd47e648114541b2998ed83df6f.tar.gz llvm-5cead0cb0bdeebd47e648114541b2998ed83df6f.tar.bz2 |
Revert "Fix OOM in FormatDiagnostic" (#108838)
Reverting due to build failures found in #108187
Diffstat (limited to 'clang/lib/Basic/SourceManager.cpp')
-rw-r--r-- | clang/lib/Basic/SourceManager.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp index 65a8a72..d6ec26a 100644 --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -130,8 +130,13 @@ ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, // the file could also have been removed during processing. Since we can't // really deal with this situation, just create an empty buffer. if (!BufferOrError) { - Diag.Report(Loc, diag::err_cannot_open_file) - << ContentsEntry->getName() << BufferOrError.getError().message(); + if (Diag.isDiagnosticInFlight()) + Diag.SetDelayedDiagnostic(diag::err_cannot_open_file, + ContentsEntry->getName(), + BufferOrError.getError().message()); + else + Diag.Report(Loc, diag::err_cannot_open_file) + << ContentsEntry->getName() << BufferOrError.getError().message(); return std::nullopt; } @@ -148,7 +153,12 @@ ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, // ContentsEntry::getSize() could have the wrong size. Use // MemoryBuffer::getBufferSize() instead. if (Buffer->getBufferSize() >= std::numeric_limits<unsigned>::max()) { - Diag.Report(Loc, diag::err_file_too_large) << ContentsEntry->getName(); + if (Diag.isDiagnosticInFlight()) + Diag.SetDelayedDiagnostic(diag::err_file_too_large, + ContentsEntry->getName()); + else + Diag.Report(Loc, diag::err_file_too_large) + << ContentsEntry->getName(); return std::nullopt; } @@ -158,7 +168,12 @@ ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, // have come from a stat cache). if (!ContentsEntry->isNamedPipe() && Buffer->getBufferSize() != (size_t)ContentsEntry->getSize()) { - Diag.Report(Loc, diag::err_file_modified) << ContentsEntry->getName(); + if (Diag.isDiagnosticInFlight()) + Diag.SetDelayedDiagnostic(diag::err_file_modified, + ContentsEntry->getName()); + else + Diag.Report(Loc, diag::err_file_modified) + << ContentsEntry->getName(); return std::nullopt; } |