forked from OSchip/llvm-project
[ASTImporter] Improve import of FileID.
Summary: Even if the content cache has a directory and filename, it may be a virtual file. The old code returned with error in this case, but it is worth to try to handle the file as it were a memory buffer. Reviewers: a.sidorin, shafik, martong, a_sidorin Reviewed By: shafik Subscribers: efriedma, rnkovacs, cfe-commits, dkrupp, martong, Szelethus, gamesh411 Tags: #clang Differential Revision: https://reviews.llvm.org/D57590 llvm-svn: 355000
This commit is contained in:
parent
b3a924afd6
commit
9cf39dfb38
|
@ -8289,14 +8289,21 @@ FileID ASTImporter::Import(FileID FromID) {
|
|||
// than mmap the files several times.
|
||||
const FileEntry *Entry =
|
||||
ToFileManager.getFile(Cache->OrigEntry->getName());
|
||||
if (!Entry)
|
||||
return {};
|
||||
ToID = ToSM.createFileID(Entry, ToIncludeLoc,
|
||||
FromSLoc.getFile().getFileCharacteristic());
|
||||
} else {
|
||||
// FIXME: The filename may be a virtual name that does probably not
|
||||
// point to a valid file and we get no Entry here. In this case try with
|
||||
// the memory buffer below.
|
||||
if (Entry)
|
||||
ToID = ToSM.createFileID(Entry, ToIncludeLoc,
|
||||
FromSLoc.getFile().getFileCharacteristic());
|
||||
}
|
||||
if (ToID.isInvalid()) {
|
||||
// FIXME: We want to re-use the existing MemoryBuffer!
|
||||
const llvm::MemoryBuffer *FromBuf =
|
||||
Cache->getBuffer(FromContext.getDiagnostics(), FromSM);
|
||||
bool Invalid = true;
|
||||
const llvm::MemoryBuffer *FromBuf = Cache->getBuffer(
|
||||
FromContext.getDiagnostics(), FromSM, SourceLocation{}, &Invalid);
|
||||
if (!FromBuf || Invalid)
|
||||
return {};
|
||||
|
||||
std::unique_ptr<llvm::MemoryBuffer> ToBuf =
|
||||
llvm::MemoryBuffer::getMemBufferCopy(FromBuf->getBuffer(),
|
||||
FromBuf->getBufferIdentifier());
|
||||
|
@ -8305,6 +8312,8 @@ FileID ASTImporter::Import(FileID FromID) {
|
|||
}
|
||||
}
|
||||
|
||||
assert(ToID.isValid() && "Unexpected invalid fileID was created.");
|
||||
|
||||
ImportedFileIDs[FromID] = ToID;
|
||||
return ToID;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue