[all-commits] [llvm/llvm-project] 272742: Perform an extra consistency check when searching ...
adrian-prantl via All-commits
all-commits at lists.llvm.org
Wed Sep 2 14:23:32 PDT 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: 272742a92d2443893eb98a7b3460e243e34278f9
https://github.com/llvm/llvm-project/commit/272742a92d2443893eb98a7b3460e243e34278f9
Author: Adrian Prantl <aprantl at apple.com>
Date: 2020-09-02 (Wed, 02 Sep 2020)
Changed paths:
M clang/lib/Serialization/ModuleManager.cpp
Log Message:
-----------
Perform an extra consistency check when searching ModuleManager's
cache for implicit modules.
The ModuleManager's use of FileEntry nodes as the keys for its map of
loaded modules is less than ideal. Uniqueness for FileEntry nodes is
maintained by FileManager, which in turn uses inode numbers on hosts
that support that. When coupled with the module cache's proclivity for
turning over and deleting stale PCMs, this means entries for different
module files can wind up reusing the same underlying inode. When this
happens, subsequent accesses to the Modules map will disagree on the
ModuleFile associated with a given file.
In general, it is not sufficient to resolve this conundrum with a type
like FileEntryRef that stores the name of the FileEntry node on first
access because of path canonicalization issues. However, the paths
constructed for implicit module builds are fully under Clang's
control. We *can*, therefore, rely on their structure being consistent
across operating systems and across subsequent accesses to the Modules
map.
To mitigate the effects of inode reuse, perform an extra name check when
implicit modules are returned from the cache. This has the effect of
forcing reused FileEntry nodes to stomp over existing-but-stale entries
in the cache, which simulates a miss - exactly the desired behavior.
rdar://48443680
Patch by Robert Widmann!
Differential Revision: https://reviews.llvm.org/D86823
More information about the All-commits
mailing list