diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2017-03-02 17:37:11 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2017-03-02 17:37:11 +0000 |
commit | 97d25552ed0647f843dda92c47e3dd5bc4c6b90f (patch) | |
tree | 80047cb422a0da454cf3788ed212361cd74cdaba | |
parent | fffa17983756af40fb726b425a314091767f1388 (diff) | |
download | bcm5719-llvm-97d25552ed0647f843dda92c47e3dd5bc4c6b90f.tar.gz bcm5719-llvm-97d25552ed0647f843dda92c47e3dd5bc4c6b90f.zip |
Serialization: use the PCH chain to check PCH mode
When we are deciding whether we are creating a PCH or a module, we would
check if the ModuleMgr had any elements to switch into PCH mode.
However, when creating a module, the size may be 1. This would result
in us going down the wrong path.
This was found by cross-compiling the swift standard library. Use the
PCH chain length instead to identify the PCH mode.
Unfortunately, I have not yet been able to create a simple test case for
this, but have verified that this fixes the swift standard library
construction.
Thanks to Adrian Prantl for help and discussions with this change!
llvm-svn: 296769
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index e9cb51dec6e..3ec009afaa2 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -7928,7 +7928,8 @@ ASTReader::getSourceDescriptor(unsigned ID) { // If there is only a single PCH, return it instead. // Chained PCH are not suported. - if (ModuleMgr.size() == 1) { + const auto &PCHChain = ModuleMgr.pch_modules(); + if (std::distance(std::begin(PCHChain), std::end(PCHChain))) { ModuleFile &MF = ModuleMgr.getPrimaryModule(); StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName); StringRef FileName = llvm::sys::path::filename(MF.FileName); |