Index: clang/lib/Basic/SourceManager.cpp =================================================================== --- clang/lib/Basic/SourceManager.cpp +++ clang/lib/Basic/SourceManager.cpp @@ -1258,23 +1258,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 @@ -1340,12 +1323,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; @@ -1692,9 +1678,11 @@ // 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) + if (llvm::Optional Buffer = + Content->getBufferOrNone(Diag, getFileManager(), SourceLocation())) + Content->SourceLineCache = + LineOffsetMapping::get(*Buffer, ContentCacheAlloc); + else return SourceLocation(); }