]> granicus.if.org Git - clang/commit
ASTReader: Bypass overridden files when reading PCHs
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 30 Aug 2019 22:59:25 +0000 (22:59 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 30 Aug 2019 22:59:25 +0000 (22:59 +0000)
commit1d98bab4c4d1810b10e329ad3d185334a4320121
tree205d96b692696cb53aa0aa879cbdd64d11ca5dc3
parent0c07d3746df825eed1a45bf91ddbd085dbbafe87
ASTReader: Bypass overridden files when reading PCHs

If contents of a file that is part of a PCM are overridden when reading
it, but weren't overridden when the PCM was being built, the ASTReader
will emit an error.  Now it creates a separate FileEntry for recovery,
bypassing the overridden content instead of discarding it.  The
pre-existing testcase clang/test/PCH/remap-file-from-pch.cpp confirms
that the new recovery method works correctly.

This resolves a long-standing FIXME to avoid hypothetically invalidating
another precompiled module that's already using the overridden contents.

This also removes ContentCache-related API that would be unsafe to use
across `CompilerInstance`s in an implicit modules build.  This helps to
unblock us sinking it from SourceManager into FileManager in the future,
which would allow us to delete `InMemoryModuleCache`.

https://reviews.llvm.org/D66710

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@370546 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/FileManager.h
include/clang/Basic/SourceManager.h
lib/Basic/FileManager.cpp
lib/Basic/SourceManager.cpp
lib/Serialization/ASTReader.cpp
unittests/Basic/FileManagerTest.cpp