diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -1260,23 +1260,6 @@ #include #endif -static LLVM_ATTRIBUTE_NOINLINE void -ComputeLineNumbers(DiagnosticsEngine &Diag, const ContentCache &FI, - llvm::BumpPtrAllocator &Alloc, - const SourceManager &SM, bool &Invalid); -static void ComputeLineNumbers(DiagnosticsEngine &Diag, const ContentCache &FI, - llvm::BumpPtrAllocator &Alloc, - const SourceManager &SM, bool &Invalid) { - // Note that calling 'getBuffer()' may lazily page in the file. - llvm::Optional Buffer = - FI.getBufferOrNone(Diag, SM.getFileManager(), SourceLocation()); - Invalid = !Buffer; - if (Invalid) - return; - - FI.SourceLineCache = LineOffsetMapping::get(*Buffer, Alloc); -} - LineOffsetMapping LineOffsetMapping::get(llvm::MemoryBufferRef Buffer, llvm::BumpPtrAllocator &Alloc) { // Find the file offsets of all of the *physical* source lines. This does @@ -1342,12 +1325,15 @@ // If this is the first use of line information for this buffer, compute the /// SourceLineCache for it on demand. if (!Content->SourceLineCache) { - bool MyInvalid = false; - ComputeLineNumbers(Diag, *Content, ContentCacheAlloc, *this, MyInvalid); + llvm::Optional Buffer = + Content->getBufferOrNone(Diag, getFileManager(), SourceLocation()); if (Invalid) - *Invalid = MyInvalid; - if (MyInvalid) + *Invalid = !Buffer; + if (!Buffer) return 1; + + Content->SourceLineCache = + LineOffsetMapping::get(*Buffer, ContentCacheAlloc); } else if (Invalid) *Invalid = false; @@ -1689,17 +1675,13 @@ // If this is the first use of line information for this buffer, compute the // SourceLineCache for it on demand. - if (!Content->SourceLineCache) { - bool MyInvalid = false; - ComputeLineNumbers(Diag, *Content, ContentCacheAlloc, *this, MyInvalid); - if (MyInvalid) - return SourceLocation(); - } - llvm::Optional Buffer = Content->getBufferOrNone(Diag, getFileManager()); if (!Buffer) return SourceLocation(); + if (!Content->SourceLineCache) + Content->SourceLineCache = + LineOffsetMapping::get(*Buffer, ContentCacheAlloc); if (Line > Content->SourceLineCache.size()) { unsigned Size = Buffer->getBufferSize();